Сокращение карт и редукторов для простого запроса к очень большой таблице / представлению в Hive - PullRequest
0 голосов
/ 08 января 2019

У нас есть простой запрос к таблице / представлению размером около 5 ТБ. Мы выполняем ETL и, наконец, добавляем данные в основную таблицу, добавляя раздел.

Но поскольку данные, которые мы обрабатываем, огромны, запрос порождает более 4000 мапперов и более 1000 редукторов. Запрос также выполняется в течение 40+ минут.

Как я могу улучшить / уменьшить использование ресурсов?

Запрос:

insert overwrite table dss.prblm_mtrc partition (LOAD_DT) select *, '2019-01-02' as LOAD_DT from dss.v_prblm_mtrc_stg_etl

1 Ответ

0 голосов
/ 08 января 2019

Используйте статический раздел, если в целевой таблице уже много разделов, Hive будет сканировать их быстрее перед окончательной загрузкой, см. Также: Советы по динамическому разделению HIVE

insert overwrite table dss.prblm_mtrc partition (LOAD_DT='2019-01-02') select * from dss.v_prblm_mtrc_stg_etl

Если в исходной таблице слишком много маленьких файлов, попробуйте уменьшить их, используйте сцепление для файлов orc или используйте слияние при загрузке исходной таблицы

Используйте векторизацию, настройку мапперов и параллелизм редукторов: https://stackoverflow.com/a/48487306/2700344

set hive.vectorized.execution.enabled = true;
set hive.vectorized.execution.reduce.enabled = true;

Все настройки векторизации здесь .

И если ваша целевая таблица содержит много уже загруженных разделов, попробуйте отключить автоматический сбор статистики, этот параметр может ускорить загрузку:

set hive.stats.autogather=false;

Кроме того, если ваша исходная таблица имеет формат orc и расчет разбиения занимает слишком много времени, попробуйте этот параметр:

hive.exec.orc.split.strategy=BI;

Подробнее о стратегии ORC: Стратегия разделения ORC

...