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

У нас есть простой запрос к таблице/представлению размером примерно 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

person akash sharma    schedule 08.01.2019    source источник


Ответы (1)


Используйте статический раздел, если в целевой таблице уже много разделов, 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 стратегия разделения

person leftjoin    schedule 08.01.2019
comment
Большое спасибо за все эти предложения. Я начну работать над этим прямо сейчас и буду держать вас в курсе прогресса. - person akash sharma; 09.01.2019