Не существует универсального подхода к настройке Hive для запросов Tez. Производительность запросов зависит от размера данных, типа файла, структуры запроса и шаблона запроса. При тестировании производительности мы обычно выполняем настройку производительности путем настройки параметров конфигурации или переписывания SQL. Рекомендуется вносить только одно изменение во время тестирования, чтобы можно было легко проверить, какой параметр вступит в силу.
Иногда после обновления с CDH на CDP вы обнаружите, что задание Hive на Tez работает медленнее, чем старые MR или Spark. Это часто вызвано отсутствием настройки задания Tez. Кроме того, на старой платформе CDH, т.к. обычно оно продолжается. Некоторое время оно работает стабильно, и некоторые параметры старого задания MR были более или менее настроены. Однако эти параметры не могут действовать непосредственно в задании Tez, поэтому вы почувствуете, что новый Hive. в CDP производительность лучше, чем у старого Hive в CDH. Вот основные три области, которые могут привести к снижению производительности:
1. Подтвердите конфигурацию планировщика емкости YARN. Если в очереди неправильно настроен верхний предел доступных пользователю ресурсов, это повлияет на производительность запросов. Поэтому вам нужно сосредоточиться на коэффициенте ограничения пользователей, проценте минимального ограничения пользователей и максимальной емкости.
2. Проверьте предохранительные клапаны Hive и Hive на Tez (значения не по умолчанию для конфигураций Hive и HiveServer2) и удалите все старые или просроченные конфигурации.
3. Определите, что работает медленно, например задачи сопоставления, сокращения задач и объединения.
Прежде чем изменять какую-либо конфигурацию, мы должны понять внутреннюю работу Tez, например, как Tez определяет количество карт и редукторов. Вот несколько статей, которые помогут вам понять и изучить:
https://cwiki.apache.org/confluence/display/TEZ/How+initial+task+parallelism+works
https://cwiki.apache.org/confluence/display/TEZ/How+does+ShuffleVertexManager+%28Auto+Reduce+Parallelism%29+work
Tez использует исходные входные данные задания, чтобы определить количество задач картографа. В Tez количество задач определяется разделением по группам, что эквивалентно разделению входных данных, определяющему количество картографов в задании MapReduce.
1.tez.grouping.min-size
и tez.grouping.max-size
Определить количество картографов, минимальный размер Значение по умолчанию: 16 MB,max-size Значение по умолчанию: 1 GB。
2. После того как Tez подтвердит количество задач картографа, он также обеспечит данные и группировку каждой задачи. max/min Тот же размер, уменьшить tez.grouping.max-size
Увеличится количество картографических задач, увеличится tez.grouping.max-size
Сократится количество задач.
3. Примеры следующие:
tez.grouping.max-size
от 1 GB уменьшено до 100 МБ, то количество мапперов можно увеличить до 15 индивидуальный,оти улучшитьодновременнои улучшитьпроизводительность。Выше приведен простой пример. Файлы формата ORC или Parquet часто используются в производственных средах. Окончательное количество картографов также будет определяться на основе типа хранилища, файла политики разделения и границы блока HDFS.
Примечание. Высокий уровень параллелизма, соответствующий большому количеству преобразователей или преобразователей, не обязательно означает более высокую производительность, поскольку это может привести к меньшему количеству ресурсов для каждой задачи и пустой трате ресурсов из-за чрезмерных накладных расходов на задачу.
Tez использует несколько механизмов для подтверждения количества редукторов:
1.Tez автоматически рассчитывает количество редукторов в зависимости от объема обрабатываемых данных;
2. Если hive.tez.auto.reducer.parallelism
установлен на true,hive Он оценит размер данных и установит предполагаемый параллелизм. Tez оценит источник. Выходной размер вершины выбирается, и оценка корректируется во время выполнения по мере необходимости.
3. По умолчанию,максимумизreduceКоличество1009(hive.exec.reducers.max
)
4.Hive on Tez использует следующую формулу для оценки количества редукторов, а затем планирует Tez DAG:
Max(1, Min(hive.exec.reducers.max [1009], ReducerStage estimate/hive.exec.reducers.bytes.per.reducer)) x hive.tez.max.partition.factor [2]
5. Вы можете настроить следующие три параметра, чтобы увеличить или уменьшить количество сокращений:
hive.exec.reducers.bytes.per.reducer
:Каждыйиндивидуальныйreducerизsize,Сокращение может увеличить параллелизм,Увеличение может уменьшить параллелизм.,Значение по умолчанию — 256 МБ.,т. е. если размер ввода да1 ГБ,Будет использован 4индивидуальный редуктор.tez.min.partition.factor
,Значение по умолчанию — 0,25.tez.max.partition.factor
,Значение по умолчанию — 2,0.,Увеличение приведет к еще большему сокращению,уменьшить меньше уменьшить6.Можно использоватьmapred.reduce.tasks
Ручная настройкаreducerизколичество,Но это не рекомендуется.
предположение:
В этой главе описывается, как настроить параллелизм Hive в сеансах Tez, например запуск нескольких контейнеров Tez AM. Вы можете настроить следующие свойства.
hive.server2.tez.default.queues
:список значений, разделенных запятыми,Соответствует необходимости поддержания пула Тезсессия изYARNочередь;hive.server2.tez.sessions.per.default.queue
:Каждыйиндивидуальный YARN очередьсуществовать Обслуживание бассейнаиз Tez сессия (DAGAppMaster) количество.hive.server2.tez.initialize.default.sessions
:Если включено,HiveServer2 существовать При запускесуществоватьобозначениеиз default.queues Запустите все необходимое из Tez сессия для удовлетворения session.per.default.queue Требовать.Если перечисленные выше свойства определены, HiveServer2 создаст Tez Application Master (AM) для каждой очереди по умолчанию, умноженный на количество сеансов при запуске службы HiveServer2, поэтому:
(Tez Sessions)total = HiveServer2instances x (default.queues) x (sessions.per.default.queue)
Пример:
Hiveserver2 создаст 4 Tez AM (2 для очереди 1 и 2 для очереди 2).
Примечание. Сеансы Tez в пуле будут выполняться всегда, даже в простаивающем кластере. Если использовался HiveServer2, эти Tez AM будут продолжать работать, но если HS2 простаивает, Tez AM будут прекращены по истечении времени ожидания, определенного tez.session.am.dag.submit.timeout.secs.
Случай 1: имя очереди не указано.
tez.queue.name
),Запрос будет использовать пул только до его инициализации.изTez AM, в данном случае HiveServer2 Подберу свободный из или доступный Тез AM, случайно выбранная очередь.Случай 2. Укажите имя очереди.
предположение:
hive.server2.tez.initialize.default.sessions
установлен на false, что может уменьшить конфликты на HiveServer2 и повысить производительность запросов.hive.server2.tez.sessions.per.default.queue
увеличитьsessionколичество.tez.am.container.reuse.enabled
установлен на true, чтобы решить проблему, связанную с тем, что контейнеру каждый раз требуется время для запуска, что экономит время на взаимодействие с YARN, поэтому контейнер всегда сохраняет строку существования и пропускает YARN. queue。При работе с проблемами производительности запросов Hive on Tez вы можете сначала проверить следующие параметры:
1.hive.cbo.enable
установлен natrue обеспечивает оптимизацию на основе затрат (CBO),CBO да Hive Часть механической обработки запросов на базе Calcite Обеспечьте поддержку CBO. Создавайте эффективные планы запросов, проверяя указанные условия таблицы в запросе.,В конечном итоге сокращается время выполнения запросов и улучшается использование ресурсов.
2.hive.auto.convert.join
установлен на true позволять Hive Включить объединение на основе размера входного файла Преобразовать в mapjoin оптимизация.
3.hive.auto.convert.join.noconditionaltask.size
Хотите, чтобы существующий запрос выполнял как можно больше изmapjoin,Пользователь управляет размером таблицы, которую можно разместить в памяти, устанавливая этот размер.,этотиндивидуальный Таблица представления значений Преобразовать Общий размер hashmap, хранящийся в памяти, рекомендуется сохранить его установленным. на hive.tez.container.size большой или маленький ⅓。
4.tez.runtime.io.sort.mb
сортировать при сортировке вывода размер буфера, рекомендуется установить это значение на hive.tez.container.size из 40%, максимум 2 ГБ, как правило, не выше этого значения.
5.tez.runtime.unordered.output.buffer.size-mb
Когда вывод не требует сортировки по памяти,Если не записано непосредственно на диск,Он будет использовать размер буфера. Рекомендуется поставить его на hive.tez.container.size из 10%。
6.hive.exec.parallel
Это свойство поддерживает Hive query этаппараллельного исполнения,По умолчаниюfalse,установленный на true помогает на этапе параллельного независимого запроса,оти улучшитьобщийпроизводительность。
7.hive.vectorized.execution.enabled
Выполнение векторизованного запроса может значительно снизить стоимость типичных операций запроса, таких как сканирование, фильтрация, агрегирование и объединение.
8.hive.merge.tezfiles
По умолчанию false,установлен на true сольется Tez файл. Это свойство может увеличивать или уменьшать время выполнения запроса.,Это зависит от размера данных или количества файлов, которые вы хотите объединить.
9.hive.merge.size.per.task
Относится к общему размеру файла в конце задания.
10.hive.merge.smallfiles.avgsize
Если средний размер выходного файла задания меньше этого числа, Hive запускает дополнительные MapReduce Задание объединяет выходные файлы в файл большего размера, значение По умолчаниюдля16MB。
Hive on Анализ производительности запросов Tez на первом этапе проверки Hive и Hive on Tez Служитьизкакой-то ключ Конфигурация,Затем для некоторых заданий SQL-запросов обычно необходимо установить некоторые параметры для конкретной настройки производительности.,Большинство параметров существования перечислены в этой статье.,Может использоваться как ссылка. Для некоторой сложной настройки SQL,Или эксплуатационные сбои часто требуют корректировки метода записи SQL.
Оригинальная ссылка:
https://blog.cloudera.com/optimizing-hive-on-tez-performance/