Tez vs Spark: что выбрать для Apache Hive

Tez vs Spark for Hive, обучение инженеров и аналитиков больших данных Apache Hive Hadoop SQL, Apache Hive Hadoop SQL курсы, оптимизация SQL-запросов в Apache Hive, Школа Больших Данных Учебный центр Коммерсант

Вчера мы упоминали, что использование Spark или Tez в качестве движка исполнения SQL-запросов в Apache Hive вместо классического Hadoop MapReduce намного ускоряет аналитику больших данных. Сегодня рассмотрим подробнее, чем отличаются эти механизмы и какой из них выбирать в разных случаях использования.

Что такое Apache Tez и как он работает с Hive в экосистеме Hadoop

Начнем с определения: Apache Tez – это расширяемая open-source платформа создания высокопроизводительных приложений пакетной и интерактивной обработки данных, координируемая YARN в Apache Hadoop. Tez развивает парадигму MapReduce, увеличивая ее скорость и сохраняя способность масштабироваться до огромных размеров [1]. Можно сказать, что в Tez задачи MapReduce объединяются в одно задание, которое рассматривается как узел в DAG, обеспечивая параллелизм и сериализацию [2].

Начиная с версии 0.13, Apache Hive использует именно Tez в качестве движка исполнения SQL-подобных запросов на языке HiveQL, транслируя их в высокооптимизированные DAG-задания, которые обеспечивают эффективный баланс между производительностью, пропускной способностью и масштабируемостью. Таким образом, популярностью Tez частично вызвана распространенностью Apache Hive в качестве востребованного инструмента SQL-on-Hadoop.

Tez моделирует обработку данных как направленный ациклический граф (DAG, Directed Acyclic Graph), где вершины представляют логику приложения, а ребра – движение данных. Богатый Java API позволяет пользователям определять сложную логику запросов, сочетая их с планами выполнения, созданными декларативными приложениями более высокого уровня, такими как Apache Hive.

Hadoop для инженеров данных

Код курса
HDDE
Ближайшая дата курса
17 июня, 2024
Продолжительность
40 ак.часов
Стоимость обучения
120 000 руб.

Таким образом, Tez моделирует пользовательскую логику в каждой вершине DAG-графа как композицию модулей ввода, процессора и вывода. Ввод и вывод определяют формат данных, как и где они читаются или записываются. Процессор содержит логику преобразования данных. Tez не требователен к форматам данных, но необходима совместимость форматов ввода, процессора и вывода.

Распределенная обработка данных носит динамический характер, не позволяя заранее определить оптимальные методы перемещения данных. Tez поддерживает подключаемые модули управления вершинами для сбора информации о времени выполнения SQL-запроса и динамического изменения DAG-графа, чтобы оптимизировать производительность и эффективно использовать ресурсы.

Tez получает ресурсы из Hadoop-менеджера ресурсов YARN и повторно использует каждый компонент в конвейере, избегая дублирования операций без необходимости. Напомним, YARN управляет ресурсами в кластере Hadoop в зависимости от его емкости и нагрузки. Tez следует традиционной модели Hadoop разделения задания на отдельные задачи, каждая из которых запускается как процессы через YARN от имени пользователя. Эта модель сопряжена с внутренними затратами на запуск и инициализацию процессов, обработку отставших задач и выделение каждого контейнера через YARN [1].

Tez предоставляет собственный пользовательский интерфейс, который взаимодействует с YARN Application Timeline Server, чтобы отразить текущий и исторический вид приложений в веб-GUI.

Для корректной работы Apache Hive с Tez нужно задать следующие конфигурации [3]:

  • tez.am.resource.memory.mb– должно быть равно yarn.scheduler.minimum-allocation-mb;
  • hive.tez.container.size– равно или в 2 раза больше значения yarn.scheduler.minimum-allocation-mb, но не более, чем yarn.scheduler.maximum-allocation-mb.

Если RAM 256 Гб и 16 ядер CPU, размер контейнера не должен превышать 16 Гб. Также требуется задать еще ряд конфигураций [3]:

  • runtime.io.sort.mb– обычно 40% от hive.tez.container.size, как правило не более 2 Гб;
  • auto.convert.join.noconditionaltask– true;
  • auto.convert.join.noconditionaltask.size– около 30% от hive.tez.container.size;
  • runtime.unordered.output.buffer.size-mb– до 10% от hive.tez.container.size;
  • grouping.min-size=16777216, минимум около 16 Мб;
  • grouping.max-size=1073741824, максимум около 1 ГБ.

Hadoop SQL администратор Hive

Код курса
HIVE
Ближайшая дата курса
по запросу
Продолжительность
8 ак.часов
Стоимость обучения
24 000 руб.

Чем похожи Tez и Spark

Фреймворки Spark и Tez имеют следующие одинаковые характеристики:

  • open-source статус и свобода использования под лицензией Apache0;
  • оба движка стали проектами верхнего уровня Apache Software Foundation с 2014 года;
  • входят в экосистему Hadoop;
  • оба работают с SQL-on-Hadoop инструментом Apache Hive в качестве механизма исполнения HQL-запросов к данным, которые хранятся в HDFS;
  • оба расширяют парадигму классического MapReduce в DAG-граф, чтобы распараллелить выполнение заданий и ускорить обработку данных.

Однако, при этих общих чертах, рассматриваемые фреймворки существенно отличаются друг от друга в некоторых нюансах, что мы и покажем далее.

5 главных отличий

Ключевыми отличиями Spark от Tez являются следующие [2]:

  • совместимость с YARN — Tez основан на этом менеджере ресурсов и отлично вписывается в его архитектуру. Spark может работать как в среде кластера Hadoop под управлением YARN, так и без компонентов ядра Hadoop. В случае с YARN Spark может столкнуться с проблемами управления ресурсами, в частности, на практике Spark не может работать одновременно с другими приложениями YARN, по крайней мере, пока.
  • потребление ресурсов — в отличие от Apache Spark, контейнеры Tez могут отключиться по завершении и освободить ресурсы кластера. А контейнеры Spark продолжают работать и потреблять ресурсы, даже не обрабатывая никаких данных. Подробнее о контейнерах Tez в Apache Hive читайте здесь.
  • универсальность – благодаря широкому набору возможностей и гибкому API, Spark позволяет разработчикам решать практически любые задачи пакетной и потоковой обработки больших данных, включая графовую аналитику и машинное обучение. А Tez является узко специализированным инструментом для точечных приложений.
  • популярность – Apache Spark известен и востребован намного больше, что объясняется его универсальностью.
  • поддержка – изначально один из самых крупных коммерческих дистрибьютеров Hadoop, компания Cloudera поддерживала Spark, а ее конкурент, корпорация Hortonworks отдавала предпочтение движку Tez. Однако, в 2018 году Cloudera поглотила Hortonworks. Возможно, в том числе и поэтому Spark более распространен.

Что касается быстроты обработки данных, то различные бечмаркинговые тесты показывают разные результаты, в которых побеждает то Spark, то Tez, в зависимости от аффилированности исследователей. Однако, в любом случае оба DAG-движка намного быстрее классического Hadoop MapReduce, который также доступен для исполнения SQL-запросов в Apache Hive [2]. Таким образом, универсального ответа на вопрос «Spark vs Tez» нет, а выбор зависит от особенностей конкретной ситуации. На практике разработчики распределенных приложений чаще выбирают Apache Spark по причине его универсальности и огромного набора функциональных возможностей. О том, зачем использовать внешнюю базу данных для хранилища метаданных Apache Hive и как ее подключить вместо Derby, читайте в нашей новой статье. А какие приему помогут повысить скорость SQL-запросов при выборе Tez в качестве исполнительного движка, мы рассказываем здесь.

Интеграция Hadoop и NoSQL

Код курса
NOSQL
Ближайшая дата курса
5 августа, 2024
Продолжительность
40 ак.часов
Стоимость обучения
120 000 руб.

Больше подробностей про администрирование и эксплуатацию Apache Hive, а также фреймворка Spark для аналитики больших данных вы узнаете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://www.cloudera.com/products/open-source/apache-hadoop/apache-tez.html
  2. https://www.xplenty.com/blog/apache-spark-vs-tez-comparison/
  3. https://docs.arenadata.io/adh/v2.1.2/administration/hive/memory.html
Поиск по сайту