Apache Hive проти Apache Impala: основні відмінності

Якщо ви тільки починаєте свій шлях у світі аналізу великих даних, то, ймовірно, вже стикнулися з різноманітністю інструментів Apache. Велика кількість цих інструментів може викликати плутанину, а іноді навіть збентеження.

Ця стаття допоможе вам розібратися в цьому питанні та пояснить, що саме являють собою Apache Hive та Impala, а також які ключові відмінності між ними!

Apache Hive

Apache Hive – це інтерфейс, який надає можливість доступу до даних SQL на платформі Apache Hadoop. Завдяки Hive ви можете виконувати запити, агрегувати та аналізувати дані, використовуючи знайомий синтаксис SQL.

Для даних, що зберігаються у файловій системі HDFS, використовується схема “читання при доступі”, що дозволяє обробляти інформацію як звичайні таблиці, подібні до реляційних СУБД. Запити HiveQL трансформуються у Java-код для виконання завдань MapReduce.

Запити в Hive пишуться мовою HiveQL, яка заснована на SQL, проте не повністю відповідає стандарту SQL-92.

Проте, ця мова дозволяє програмістам використовувати власні запити, коли застосування функцій HiveQL є незручним або неефективним. HiveQL можна розширити за допомогою скалярних функцій, визначених користувачем (UDF), агрегацій (UDAF) та табличних функцій (UDTF).

Як працює Apache Hive

Apache Hive перетворює програми, написані мовою HiveQL (яка є близькою до SQL), в одне або декілька завдань MapReduce, Apache Tez або Apache Spark. Це три різні механізми виконання, які можуть працювати на Hadoop. Далі Apache Hive організовує дані в масив для файлової системи HDFS, щоб виконати завдання в кластері та отримати результат.

Таблиці в Apache Hive нагадують реляційні бази даних, де дані організовані від найбільших до найменших одиниць. Бази даних являють собою масиви, які складаються з розділів, а ті, в свою чергу, можуть бути розділені на “відра”.

Доступ до даних здійснюється за допомогою HiveQL. У кожній базі даних дані проіндексовані, і кожна таблиця відповідає певному каталогу в HDFS.

В архітектурі Apache Hive передбачено кілька інтерфейсів, наприклад, веб-інтерфейс, CLI або зовнішні клієнти.

Сервер “Apache Hive Thrift” дозволяє віддаленим клієнтам надсилати команди та запити до Apache Hive, використовуючи різні мови програмування. Центральний каталог Apache Hive, відомий як “метасховище”, містить всю необхідну інформацію.

Механізм, що забезпечує роботу Hive, називається “драйвер”. Він включає компілятор та оптимізатор, що визначають оптимальний план виконання запиту.

Безпека забезпечується за допомогою Hadoop, який використовує Kerberos для аутентифікації між клієнтом та сервером. Дозволи на файли в Apache Hive регулюються HDFS, надаючи права користувачам, групам або іншим авторизованим суб’єктам.

Особливості Hive

  • Підтримує обчислювальні механізми Hadoop і Spark.
  • Використовує HDFS і працює як сховище даних.
  • Застосовує MapReduce та підтримує ETL.
  • Завдяки HDFS, має відмовостійкість, схожу з Hadoop.

Apache Hive: Переваги

Apache Hive є ідеальним вибором для виконання запитів та аналізу даних. Він надає можливість отримувати цінну інформацію, забезпечуючи конкурентні переваги та сприяючи швидкій реакції на зміни ринку.

Серед основних переваг Apache Hive можна виділити простоту використання, зумовлену його мовою, що нагадує SQL. Крім того, це прискорює процес первинного завантаження даних, оскільки немає необхідності зчитувати або індексувати їх з диску у внутрішньому форматі бази даних.

Зберігаючи дані в HDFS, Apache Hive дозволяє оперувати величезними наборами даних, що можуть сягати сотень петабайтів. Це рішення є значно більш масштабованим, ніж традиційні бази даних. Як хмарна служба, Apache Hive дає користувачам можливість оперативно розгортати віртуальні сервери залежно від потреб робочого навантаження.

Безпека також є сильною стороною Hive, завдяки його здатності відновлювати критично важливі робочі процеси у випадку виникнення проблем. Нарешті, продуктивність є високою, оскільки він може обробляти до 100 000 запитів на годину.

Apache Impala

Apache Impala – це система паралельної обробки SQL-запитів для інтерактивного виконання SQL-запитів до даних, що зберігаються в Apache Hadoop. Вона написана на C++ і розповсюджується за ліцензією Apache 2.0.

Impala часто називають двигуном MPP (Massively Parallel Processing), розподіленою СУБД, і навіть стековою базою даних SQL-on-Hadoop.

Impala функціонує в розподіленому режимі, де екземпляри процесів виконуються на різних вузлах кластера, приймаючи, плануючи та координуючи запити від клієнтів. Це дозволяє паралельно виконувати фрагменти SQL-запиту.

Клієнтами є користувачі та програми, які надсилають SQL-запити до даних, що зберігаються в Apache Hadoop (HBase та HDFS) або Amazon S3. Взаємодія з Impala відбувається через веб-інтерфейс HUE (Hadoop User Experience), ODBC, JDBC та командний рядок Impala Shell.

Інфраструктура Impala залежить від іншого популярного інструменту SQL-on-Hadoop, Apache Hive, використовуючи його сховище метаданих. Зокрема, Hive Metastore інформує Impala про наявність та структуру баз даних.

При створенні, зміні або видаленні об’єктів схеми, а також при завантаженні даних в таблиці за допомогою SQL, відповідні зміни метаданих автоматично поширюються на всі вузли Impala через спеціалізовану службу каталогів.

Основними компонентами Impala є такі виконувані файли:

  • Impalad або демон Impala – це системна служба, яка планує та виконує запити до даних HDFS, HBase та Amazon S3. На кожному вузлі кластера працює один процес impalad.
  • Statestore – це служба імен, яка відстежує розташування та стан усіх екземплярів impalad у кластері. Один екземпляр цієї системної служби працює на кожному вузлі та головному сервері (Name Node).
  • Каталог – це служба координації метаданих, яка поширює зміни з операторів Impala DDL та DML на всі задіяні вузли Impala, щоб нові таблиці або щойно завантажені дані були відразу доступні для будь-якого вузла в кластері. Рекомендовано запускати один екземпляр Catalog на тому ж хості кластера, що й демон Statestored.

Як працює Apache Impala

Impala, подібно до Apache Hive, використовує декларативну мову запитів Hive Query Language (HiveQL), яка є підмножиною SQL92.

Фактичне виконання запиту в Impala відбувається наступним чином:

Клієнтська програма надсилає SQL-запит, під’єднуючись до будь-якого impalad через стандартизовані інтерфейси драйверів ODBC або JDBC. Підключений impalad стає координатором поточного запиту.

SQL-запит аналізується для визначення завдань для екземплярів impalad у кластері; потім будується оптимальний план виконання запиту.

Impalad отримує прямий доступ до HDFS і HBase, використовуючи локальні екземпляри системних служб для отримання даних. На відміну від Apache Hive, така пряма взаємодія значно економить час виконання запиту, оскільки проміжні результати не зберігаються.

У відповідь кожен демон повертає дані координаційному impalad, який надсилає результати назад клієнту.

Особливості Impala

  • Підтримка обробки в пам’яті в реальному часі.
  • Зручний інтерфейс SQL.
  • Підтримка таких систем зберігання, як HDFS, Apache HBase та Amazon S3.
  • Можливість інтеграції з інструментами BI, такими як Pentaho та Tableau.
  • Використання синтаксису HiveQL.

Apache Impala: Переваги

Impala дозволяє уникнути зайвих витрат на запуск, оскільки всі процеси системного демона запускаються одразу при завантаженні. Це значно прискорює виконання запитів. Додаткове збільшення швидкості Impala пов’язано з тим, що цей інструмент SQL для Hadoop, на відміну від Hive, не зберігає проміжні результати, а звертається безпосередньо до HDFS або HBase.

Крім того, Impala генерує програмний код під час виконання, а не на етапі компіляції, як це робить Hive. Проте, побічним ефектом високої швидкості Impala є зниження надійності.

Зокрема, якщо вузол даних вийде з ладу під час виконання SQL-запиту, екземпляр Impala перезапуститься, тоді як Hive продовжить підтримувати з’єднання з джерелом даних, забезпечуючи відмовостійкість.

Інші переваги Impala включають вбудовану підтримку безпечного мережевого протоколу автентифікації Kerberos, визначення пріоритетів, можливість керувати чергою запитів і підтримку популярних форматів великих даних, таких як LZO, Avro, RCFile, Parquet і Sequence.

Hive проти Impala: Подібності

Hive та Impala є вільно розповсюджуваними інструментами під ліцензією Apache Software Foundation. Вони належать до категорії SQL-інструментів для обробки даних, що зберігаються в кластері Hadoop. Обидва інструменти використовують розподілену файлову систему HDFS.

Impala і Hive виконують різні завдання, але мають спільну мету – обробку великих даних за допомогою SQL, що зберігаються в кластері Apache Hadoop. Impala пропонує інтерфейс, подібний до SQL, який дозволяє читати та записувати таблиці Hive, що забезпечує легкий обмін даними.

У той же час, Impala робить SQL-операції на Hadoop досить швидкими та ефективними, що дозволяє використовувати цю СУБД в дослідницьких проектах з аналітики великих даних. Impala використовує існуючу інфраструктуру Apache Hive, яка вже застосовується для виконання тривалих пакетних SQL-запитів.

Крім того, Impala зберігає визначення своїх таблиць в метасховищі, традиційній базі даних MySQL або PostgreSQL, тобто в тому ж місці, де Hive зберігає аналогічні дані. Це дозволяє Impala отримувати доступ до таблиць Hive, якщо всі стовпці використовують підтримувані Impala типи даних, формати файлів і кодеки стиснення.

Hive проти Impala: Відмінності

Мова програмування

Hive написаний на Java, а Impala – на C++. Однак Impala також використовує деякі Hive UDF на основі Java.

Випадки використання

Інженери з обробки даних використовують Hive у процесах ETL (видобування, перетворення, завантаження), наприклад, для тривалих пакетних завдань з великими наборами даних, скажімо, в туристичних агрегаторах та інформаційних системах аеропортів. Impala ж призначена в першу чергу для аналітиків і фахівців з обробки даних та використовується в основному в таких завданнях, як бізнес-аналітика.

Продуктивність

Impala виконує SQL-запити в реальному часі, а Hive характеризується нижчою швидкістю обробки даних. При простих SQL-запитах Impala може працювати у 6-69 разів швидше, ніж Hive. Однак Hive краще справляється зі складними запитами.

Затримка/пропускна здатність

Пропускна здатність Hive значно вища, ніж у Impala. Функція LLAP (Live Long and Process), яка дозволяє кешувати запити в пам’яті, забезпечує Hive високу продуктивність на низькому рівні.

LLAP включає довгострокові системні служби (демони), які дозволяють безпосередньо взаємодіяти з вузлами даних HDFS та замінюють тісно інтегровану структуру запитів DAG (спрямований ациклічний граф), яка активно використовується в обробці великих даних.

Відмовостійкість

Hive – це відмовостійка система, що зберігає всі проміжні результати. Це також позитивно впливає на масштабованість, але призводить до зниження швидкості обробки даних. Impala, у свою чергу, не є відмовостійкою платформою, оскільки вона більше залежить від пам’яті.

Перетворення коду

Hive генерує вирази запиту під час компіляції, а Impala – під час виконання. Hive має проблему «холодного старту» при першому запуску програми; запити перетворюються повільно через необхідність встановлення з’єднання з джерелом даних.

Impala не має таких витрат на запуск. Необхідні системні служби (демони) для обробки SQL-запитів запускаються при завантаженні, що прискорює роботу.

Підтримка зберігання

Impala підтримує формати LZO, Avro та Parquet, тоді як Hive працює з Plain Text та ORC. Однак обидва підтримують формати RCFIle і Sequence.

Apache Hive Apache Impala
Мова Java C++
Випадки використання Інженерна розробка даних Аналіз і аналітика
Продуктивність для простих запитів Порівняно низька затримка Більш висока
Затримка Більша через кешування Менш прихована
Відмовостійкість Більша толерантність завдяки MapReduce Менш толерантна через MPP
Конверсія Повільна через холодний старт Швидша конверсія
Підтримка зберігання Plain Text і ORC LZO, Avro, Parquet

Заключні слова

Hive та Impala не конкурують, а скоріше ефективно доповнюють один одного. Хоча між ними є значні відмінності, є також багато спільного, і вибір одного інструмента замість іншого залежить від даних і конкретних вимог проекту.

Ви також можете ознайомитися з порівняннями між Hadoop і Spark.

.