Вчера мы упоминали, что использование 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
Ближайшая дата курса
5 июня, 2023
Длительность обучения
40 ак.часов
Стоимость обучения
110 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 ак.часов
Стоимость обучения
22 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
Ближайшая дата курса
по запросу
Длительность обучения
40 ак.часов
Стоимость обучения
110 000 руб.
Больше подробностей про администрирование и эксплуатацию Apache Hive, а также фреймворка Spark для аналитики больших данных вы узнаете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
- Hadoop SQL администратор Hive
- Интеграция Hadoop и NoSQL
- Основы Apache Spark для разработчиков
- Анализ данных с Apache Spark
Источники