hadoop - 하이브의 partitoned 테이블에 대해 얼마나 많은 매퍼와 reduce가 생성 될 것인가?



hive mapreduce (1)

매퍼 :

매퍼의 수는 노드, 입력 형식, 실행 엔진 및 구성 매개 변수간에 데이터가 분산되는 방식과 같은 다양한 요소에 따라 다릅니다. 여기에 또한보십시오 : https://cwiki.apache.org/confluence/display/TEZ/How+initial+task+parallelism+works

MR은 CombineInputFormat을 사용하고, Tez는 그룹화 된 분할을 사용합니다.

Tez :

set tez.grouping.min-size=16777216; -- 16 MB min split
set tez.grouping.max-size=1073741824; -- 1 GB max split

MapReduce :

set mapreduce.input.fileinputformat.split.minsize=16777216; -- 16 MB
set mapreduce.input.fileinputformat.split.minsize=1073741824; -- 1 GB

또한 매퍼는 데이터가있는 데이터 노드에서 실행되므로 매퍼 수를 수동으로 제어하는 ​​것이 쉬운 작업이 아니며 항상 입력을 결합 할 수있는 것은 아닙니다.

Reducers : 감속기 의 수를 제어하는 ​​것이 훨씬 쉽습니다. 에 따라 결정된 감속기의 수

mapreduce.job.reduces - 작업 당 축소 작업의 기본 수입니다. 일반적으로 사용 가능한 호스트 수에 가장 가까운 소수로 설정됩니다. mapred.job.tracker가 "local"인 경우 무시됩니다. Hadoop은 기본적으로이 값을 1로 설정하고 Hive는 기본값으로 -1을 사용합니다. 이 속성을 -1로 설정하면 Hive가 자동으로 축소 자 수를 결정합니다.

hive.exec.reducers.bytes.per.reducer - 하이브 0.14.0 및 이전 버전의 기본값은 1GB입니다.

또한 hive.exec.reducers.max - 사용할 감속기의 최대 수입니다. mapreduce.job.reduces 가 음수이면 Hive는 자동으로 감속기의 수를 결정할 때 이것을 최대 감속기의 수로 사용합니다.

따라서 감속기의 병렬 처리를 높이 hive.exec.reducers.max 늘리고 hive.exec.reducers.max 를 줄 hive.exec.reducers.bytes.per.reducer

하이브의 특정 작업에 대해 얼마나 많은 매퍼와 축소 효과가 생성되는지 항상 혼란 스럽습니다. 예를 들어 블록 크기가 128MB이고 365 개의 파일이있는 경우 각 파일은 1 년 (파일 크기 = 1MB 각각)의 날짜로 매핑됩니다. 날짜 열을 기반으로하는 파티션이 있습니다. 이 경우 데이터를로드하는 동안 얼마나 많은 매퍼와 축소 기가 실행됩니까?





mapper