복붙노트

[HADOOP] 하이브 TEZ 감속기는 슈퍼 슬로우 실행

HADOOP

하이브 TEZ 감속기는 슈퍼 슬로우 실행

나는 여러 테이블에 가입 한 행의 총 전혀은 약 250 억이다. 그 꼭대기에, 나는 집계를하고있는 중이 야. 여기에 내가 최종 출력을 생성하기 위해 사용하고 아래와 같이 내 하이브 설정이 있습니다. 나는 그것을 실행 속도 조정 방법 쿼리를 정말 모르겠습니다. 현재, 나는 시행 착오를하고 그것이 어떤 결과를 얻을 수 있지만 그 working.Mappers 빠르게 실행되지만 감속기 영원히 끝장 복용 될 것 같지 않습니다 있는지 확인하고 있습니다. 사람이에 대한 의견을 공유 할 수 있을까요? 감사합니다.

    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. ==============================

    1.그래서 아마 뭔가가있다, 그러나이 설정은 확실히 제한 감속기 병렬이며, 아직 쿼리 계획을하지 마십시오 :

    그래서 아마 뭔가가있다, 그러나이 설정은 확실히 제한 감속기 병렬이며, 아직 쿼리 계획을하지 마십시오 :

    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;
    

    또한 하이브 1.2.0+ 카운트 (별개의)에 대한 자동 재 작성 최적화를 제공합니다. 이 설정을 확인, 그것은 기본적으로 true해야한다 :

    hive.optimize.distinct.rewrite=true;
    

    쿼리가 마지막 감속기에 붙어 있다면, 다음 키를 가입에 스큐가

  2. from https://stackoverflow.com/questions/54491233/hive-tez-reducers-are-running-super-slow by cc-by-sa and MIT license