1.数据输入小文件处理
a.合并小文件:对小文件进行归档、自定义inputFormat将小文件存储成sequenceFile文件
b.采用CombineFileInputFormat来作为输入,解决输入端大量小文件场景
c.对于大量小文件job,可以开启JVM重用
2.map阶段
a.增大环形缓冲区大小,由100M扩大到200M
b.增大环形缓冲区溢写的比例,由80%扩大到90%
c.减少对溢写文件的merge次数
d.不影响实际业务的前提下,采用combiner提前合并,减少IO
3.reduce阶段
a.合理设置map和reduce数:两个都不能设置太多或者太少。太少,会导致task等待,延长处理时间;太多,会导致map、reduce任务间竞争资源,造成处理超时等错误。
b.设置map、reduce共存:调整slowstart、completedmaps参数,使map运行到一定程度后,reduce也开始运行,减少reduce的等待时间。
c.规避使用reduce,因为reduce在用于连接数据集的时候会产生大量的网络消耗
d.增加每个reduce去map中拿数据的并行数
e.集群性能可以的前提下,增大reduce端存储数据内存的大小
4.IO传输
a.采用数据压缩的方式,减少网络IO的时间。安装snappy和lzo压缩编码器
b.使用sequenceFile二进制文件
5.整体
a.map task默认内存为1G,可以增加map task内存大小为4-5G
b.reduce task默认内存大小为1G,可以增加reduce task内存大小为4-5G
c.可以增加maptask的CPU核数,增加reduce task的CPU核数
d.增加每个container的CPU核数和内存大小
e.调整每个map task和reduce task最大重试次数
网友评论