2012-08-29 2 views
4

Combiner는 Mapper 다음에 실행되고 Reducer보다 먼저 주어진 노드의 Mapper 인스턴스가 방출하는 모든 데이터를 입력으로받습니다. 그런 다음 Reducer에 출력을 내 보냅니다. 따라서 결합 자 입력에 대한 기록은지도보다 작아야합니다.왜 조합기 입력 레코드의 수가지도 출력 수보다 많습니까?

12/08/29 13:38:49 INFO mapred.JobClient: Map-Reduce Framework 

12/08/29 13:38:49 INFO mapred.JobClient:  Reduce input groups=8649 

12/08/29 13:38:49 INFO mapred.JobClient:  Map output materialized bytes=306210 

12/08/29 13:38:49 INFO mapred.JobClient:  Combine output records=859412 

12/08/29 13:38:49 INFO mapred.JobClient:  Map input records=457272 

12/08/29 13:38:49 INFO mapred.JobClient:  Reduce shuffle bytes=0 

12/08/29 13:38:49 INFO mapred.JobClient:  Reduce output records=8649 

12/08/29 13:38:49 INFO mapred.JobClient:  Spilled Records=1632334 

12/08/29 13:38:49 INFO mapred.JobClient:  Map output bytes=331837344 

12/08/29 13:38:49 INFO mapred.JobClient:  **Combine input records=26154506** 

12/08/29 13:38:49 INFO mapred.JobClient:  **Map output records=25312392** 

12/08/29 13:38:49 INFO mapred.JobClient:  SPLIT_RAW_BYTES=218 

12/08/29 13:38:49 INFO mapred.JobClient:  Reduce input records=17298 

답변

4

나는 그것이 컴은 또한 이전의 결합 단계의 출력에서 ​​실행할 수 있기 때문에 사용자의 컴 실행 이후의 다음 다른 기록이 매퍼에서 나오는와 결합되어 새로운 기록을 생산하고 생각합니다. 또한 Combiner가 실행 된 후에 Map 출력 레코드가 계산되므로 일부 레코드가 Combined이므로 레코드가 적을 수도 있습니다.

+0

네, 귀하의 요지에 동의합니다. 결합을 사용하고 사용하지 않는 대답은 같고 옳습니다. 따라서 결합에 폴링 프로세스가 있다고 생각합니다. – alex

+0

이것이 입력 레코드를 줄이는 것이 출력 레코드를 결합하는 것보다 훨씬 적은 이유이기도합니다 (중간 결과도 계산됩니다). – vefthym