복붙노트

[HADOOP] 결합기 입력 수가 맵의 출력 수보다 많은 이유는 무엇입니까?

HADOOP

결합기 입력 수가 맵의 출력 수보다 많은 이유는 무엇입니까?

컴 바이 너는 매퍼 이후 및 리듀서 이전에 실행되며 지정된 노드에서 매퍼 인스턴스가 생성 한 모든 데이터를 입력으로 수신합니다. 그런 다음 감속기로 출력을 내 보냅니다. 따라서 결합기 입력의 레코드는 맵 출력보다 작아야합니다.

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

해결법

  1. ==============================

    1.나는 Combiner가 이전 Combine 단계의 출력에서 ​​실행될 수 있기 때문에, Combiner가 실행되고 새 레코드를 생성 한 다음 Mappers에서 나오는 다른 레코드와 결합되기 때문입니다. 또한 컴 바이 너가 실행 된 후 맵 출력 레코드가 계산 될 수 있습니다. 이는 일부가 결합 되었기 때문에 더 적은 레코드가 있음을 의미합니다.

    나는 Combiner가 이전 Combine 단계의 출력에서 ​​실행될 수 있기 때문에, Combiner가 실행되고 새 레코드를 생성 한 다음 Mappers에서 나오는 다른 레코드와 결합되기 때문입니다. 또한 컴 바이 너가 실행 된 후 맵 출력 레코드가 계산 될 수 있습니다. 이는 일부가 결합 되었기 때문에 더 적은 레코드가 있음을 의미합니다.

  2. from https://stackoverflow.com/questions/12171965/why-is-the-number-of-combiner-input-records-more-than-the-number-of-outputs-of-m by cc-by-sa and MIT license