MapReduce 프로그램에 대한 WordCount 문제를 고려하십시오. (우리는 감속기의 no로 2 지정 없음) 안녕하세요 1 세계 1 안녕하세요 1 하둡 1 안녕하세요 1 하둡을 1 그것은 파티션 프로그램으로 이동MapReduce에서 Merge가 먼저 발생하거나 결합자가 먼저 발생합니다.
:
다음과 같이 우리가 매퍼 출력이 생각해 보자 1
안녕하세요에게
안녕하세요 1
안녕하세요 1
2 부 : 세계 1 하둡 1 하둡 감속기에서 이후 1
: 우리가 입력을받을 안녕하세요 [1,1,1]
세계 [1]
하둡 [1 , 1]
이 병합 값이 발생할 때 명확히하십시오. MapReduce에 대한 -> (매퍼 O/P) K2, V2 -> (정렬 및 셔플) K3 [V3] - K1, V1> (감속기 O/P) K4, V4
내 검색어 인 이 병합 값이 발생하면 Combiner 실행 전 또는 Combiner 실행 후 (정렬 및 셔플 중). 또는 감속기 수준에서 감속기에 입력하기 전에 값의 병합이 발생합니다.
내 이해에 따라 : Mapper 출력은 mapreduce.task.io.sort.mb의 임계 값을 초과하면 먼저 메모리로 이동하지만 로컬 디스크로 스필되지만 스필링 데이터는 파티션별로 정렬되기 전에 각 파티션 내에서 크기를 줄이기 위해 Sort Combiner가 호출 된 후 키에 의해 정렬됩니다. Mapper가 완료되면 spill 파일이 병합되고 min.num.spills.for.combine 값에 따라 결합자가 호출됩니다.
워드 카운트 문제 때문에 감속기는 각 특정 키에 대해 반복 가능한 모든 값의 누적을 수행하고 출력 키와 값의 합계를 작성합니다.
Combiner는 미니 감속기이기 때문에 결합 자에 대해 동일한 감속기 클래스를 지정합니다. Job.setCombinerClass (Reduce.class);
다음 정렬 및 셔플 병합 또는 내 이해가 적절하지 않은 전에 합병하기 전에 Combiner 호출하십시오. 내게 알려주십시오