提高hadoop的mapreduce job效率笔记之二(尽量的用Combiner)

来源:互联网 发布:自己建一个淘宝秒杀群 编辑:程序博客网 时间:2024/06/06 06:37

job 运行中发现如下的现象,通常job是 可以优化的:

  • Job的运行过程中会有一系列的sort 的操作,并且reduce input groups的counter变量的值远远要小于reduce input records counter。
  • Job在 mapper完成以后,shuffle过程中传输了大量的中间结果文 件 (例如:每个slave上的map output bytes都好几个GB)
  • 在job 的webui上的counter中看到,job的spilled records的数量远远要大于map output records的数量。

如 果job的算法中涉及到许多的排序操作,可以尝试写一个Combiner 来 提高job性能。hadoop mapreduce框架中提供了Combiner来减少中间结 果对磁盘的写入和减少中间结果在mapper和reducer之间的传输,通常这两个方面都是非常影响作业性能的两个方面。

性 能对比:

修改wordcount程序,将setCombinerClass去掉,或者不去掉,两种方式对比 运行。去掉的结果是,让每一个mapper的运行时间由原先的33s变成了平均48s,并且shuffle过程中的中间数据 也由1G变成1.4GB,整个的job由原先的8分30 秒变成了15分42秒,将近两倍了。而且,这个测试还是在enable了map的output 压缩的情况下进行的,如果disable这个特性,性能的影响可能会更加大。

Ref: http://blog.csdn.net/ae86_fc/article/details/5284244

原创粉丝点击