9.3 从用户角度进行调优
Hadoop为用户作业提供了多种可配置的参数,以允许用户根据作业特点调整这些参数值使作业运行效率达到最优。
9.3.1 应用程序编写规范
尽管本章主要从参数配置方面介绍如何进行Hadoop调优,但从用户角度来看,除作业配置参数外,应用程序本身的编写方式对性能影响也是非常大的。在编写应用程序的过程中,谨记以下几条规则对提高作业性能是十分有帮助的。
(1)设置Combiner
对于一大批MapReduce应用程序,如果可以设置一个Combiner,那么对于提高作业性能是十分有帮助的。Combiner可减少Map Task中间输出结果,从而减少各个Reduce Task的远程拷贝数据量,最终表现为Map Task和Reduce Task执行时间缩短。
(2)选择合理的Writable类型
在MapReduce模型中,Map Task和Reduce Task的输入和输出数据类型均为Writable。Hadoop本身已经提供了很多Writable实现,包括IntWritable、FloatWritable。为应用程序处理的数据类型选择合适的Writable类型可大大提升性能。比如处理整型数据时,直接采用IntWritable比先以Text类型读入再转换成整型要高效。如果输出的整型大部分可用一个或者两个字节保存,那么可直接采用VIntWritable或者VLongWritable。它们采用了变长整型编码方式,可大大减少输出数据量。