'combiner'에 해당되는 글 1건

  1. 2013.04.06 [Hadoop] WordCount 에 Combiner 를 적용
반응형

Combiner는 Map 프로그램에서 나온 출력에 대해서 리듀스로 보내기 위한 셔플링/소팅이 발생하기 전에 리듀서를 적용하는 것으로 Mini-Reducer 라고 하기도 한다. Combiner는 Map-Reduce 에서 필수적으로 필요한 것은 아니지만 Combiner를 적용하면 성능 개선이 가능하다.

 

리듀서로 출력을 보내기 전에 맵 출력단에서 리듀서 프로그램을 적용하여 리듀서로 가는 데이터의 크기를 줄이는게 가능하다.

 

 

http://alnova2.tistory.com/776 의 WordCount의 Main 함수에 다음과 같이 Combiner를 지정해 보자.

 

  public static void main(String[] args) throws Exception {
    Configuration conf = new Configuration();
    Job job = new Job(conf, "WordCount");

    job.setJarByClass(WordCount.class);
    job.setMapperClass(MyMapper.class);
    job.setCombinerClass(MyReducer.class);
    job.setReducerClass(MyReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(LongWritable.class);
    job.setInputFormatClass(TextInputFormat.class);
    job.setOutputFormatClass(TextOutputFormat.class);

    FileInputFormat.addInputPath(job, new Path(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));

    job.waitForCompletion(true);
 }

 

실제 실행해 보면 http://alnova2.tistory.com/776 에서의 출력 결과가 다음과 같이 달라진다.

 

Combiner 적용 전   Combiner 적용 후

Map-Reduce Framework
Map output materialized bytes=6566558428
Map input records=2099659
Reduce shuffle bytes=6390767894
Spilled Records=1925455582
Map output bytes=5745757790
CPU time spent (ms)=2282210
Total committed heap usage (bytes)=7602372608
Combine input records=0
SPLIT_RAW_BYTES=4180
Reduce input records=410399472
Reduce input groups=7094943
Combine output records=0
Physical memory (bytes) snapshot=8841273344
Reduce output records=7094943
Virtual memory (bytes) snapshot=26300866560
Map output records=410399472

Map-Reduce Framework
Map output materialized bytes=337557364
Map input records=2099659
Reduce shuffle bytes=328482946
Spilled Records=122860130
Map output bytes=5745757790
CPU time spent (ms)=1102410
Total committed heap usage (bytes)=7865761792
Combine input records=475839838
SPLIT_RAW_BYTES=4180
Reduce input records=11053415
Reduce input groups=7094943
Combine output records=76493781
Physical memory (bytes) snapshot=9413738496
Reduce output records=7094943
Virtual memory (bytes) snapshot=26577494016
Map output records=410399472

 

Map의 출력단과 리듀스의 입력이 상당한 차이를 보이고 네트워크 상에서의 전송을 생각할때 성능 개산선이 꽤 이루어질 것으로 예상된다.

반응형
Posted by alias
,