Редукторы Hive Tez работают очень медленно - PullRequest
0 голосов
/ 02 февраля 2019

Я присоединился к нескольким таблицам, и общее количество строк составляет около 25 миллиардов.Кроме того, я занимаюсь агрегацией.Вот мои настройки улья, как показано ниже, которые я использую для получения окончательного результата.Я не совсем уверен, как настроить запрос и сделать его быстрее.В настоящее время я занимаюсь методом проб и ошибок и проверяю, может ли это привести к каким-то результатам, но это, похоже, не работает. Мапперы работают быстрее, но редукторам требуется вечность, чтобы закончить.Кто-нибудь может поделиться своими мыслями по этому поводу?Спасибо.

    SET hive.execution.engine=tez;
    SET hive.exec.dynamic.partition.mode=nonstrict;
    SET hive.qubole.cleanup.partial.data.on.failure=true;
    SET hive.tez.container.size=8192;
    SET tez.task.resource.memory.mb=8192;
    SET tez.task.resource.cpu.vcores=2;
    SET hive.mapred.mode=nonstrict;
    SET hive.qubole.dynpart.use.prefix=true;
    SET hive.vectorized.execution.enabled=true;
    SET hive.vectorized.execution.reduce.enabled =true;
    SET hive.cbo.enable=true;
    SET hive.compute.query.using.stats=true;
    SET hive.stats.fetch.column.stats=true;
    SET hive.stats.fetch.partition.stats=true;
    SET mapred.reduce.tasks = -1;
    SET hive.auto.convert.join.noconditionaltask.size=2730;
    SET hive.auto.convert.join=true;
    SET hive.auto.convert.join.noconditionaltask=true;
    SET hive.auto.convert.join.noconditionaltask.size=8053063680;
    SET hive.compute.query.using.stats=true;
    SET hive.stats.fetch.column.stats=true;
    SET hive.stats.fetch.partition.stats=true;
    SET mapreduce.job.reduce.slowstart.completedmaps=0.8;
    set hive.tez.auto.reducer.parallelism = true;
    set hive.exec.reducers.max=100;
    set hive.exec.reducers.bytes.per.reducer=1024000000;

SQL:

SELECT D.d
      ,D.b
      ,COUNT(DISTINCT A.x)  AS cnt
      ,SUM(c)               AS sum
 FROM A
LEFT JOIN
       B
ON A.a = B.b
LEFT JOIN
       C 
ON B.b = C.c
JOIN
       D
 ON A.a >= D.d
AND A.a <= D.d
GROUP BY 1,2
CLUSTER BY D.d;

1 Ответ

0 голосов
/ 02 февраля 2019

У вас еще нет плана запросов, так что, возможно, есть что-то еще, но эти параметры определенно ограничивают параллелизм редукторов:

set hive.exec.reducers.max=100;
set hive.exec.reducers.bytes.per.reducer=1024000000;

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

set hive.exec.reducers.max=5000; 
set hive.exec.reducers.bytes.per.reducer=67108864;

Также Hive 1.2.0+ обеспечивает автоматическую перезапись оптимизация для подсчета (различается) .Проверьте эту настройку, она должна быть true по умолчанию:

hive.optimize.distinct.rewrite=true;

И если вы запросите зависание на последних нескольких редукторах, тогда в ключах соединения будет перекос

...