2016-06-08 1 views
0

MapReduce 프로그램에 대한 WordCount 문제를 고려하십시오. (우리는 감속기의 no로 2 지정 없음) 안녕하세요 1 세계 1 안녕하세요 1 하둡 1 안녕하세요 1 하둡을 1 그것은 파티션 프로그램으로 이동MapReduce에서 Merge가 먼저 발생하거나 결합자가 먼저 발생합니다.

:

다음과 같이 우리가 매퍼 출력이 생각해 보자 1
안녕하세요에게
안녕하세요 1
안녕하세요 1

,369을 : 지금 mapoutput이 개 부분 PART1에 파티션을 얻을

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 호출하십시오. 내게 알려주십시오

답변

1

Mapper는 출력을 버퍼에 저장하기 시작하고 버퍼가 가득 차면 데이터가 디스크에 유출되기 전에 결합기가 실행되어 데이터 양을 줄입니다.

결합기는 데이터 양에 따라 0 번 (매퍼 출력 데이터 양이 버퍼 크기보다 작은 경우) 또는 1-N 번 실행될 수 있습니다.

귀하의 프로세스가 결합기에 의존해서는 안되며, 결합기는 네트워크에 의해 매퍼에서 축소기로 전송되는 데이터의 양을 줄이기위한 선택적인 최적화입니다.

이전 결합기 호출의 결과를 마지막 데이터와 다시 결합 할 수 있습니다. 결합기의 입력 및 출력이 호환 가능하다는 보증을해야합니다. 결합기의 출력은 감속기의 입력과 호환되어야합니다.

결합기는 데이터가 셔플 링되고 감속기로 전송되기 전에 단 하나의 매퍼에 대한 데이터를 결합하는 로컬 감속기와 같습니다.

관련 문제