版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33054265/article/details/87388381
Hadoop优化策略
- 数据输入小文件处理:
(1)合并小文件:对小文件进行归档(har)、自定义inputFormat将小文件存储成sequenceFile文件。
(2)采用CombineFileInputFormat来作为输入,解决输入端大量小文件场景。
(3)对于大量小文件Job,可以开启JVM重用。 - map阶段:
(1)增大环形缓冲区大小,比如从默认的100m扩大到200m。
(2)增大环形缓冲区溢写比例,比如从默认的80%扩大到90%。
(3)减少对溢写文件的merge次数。
(4)在不影响实际业务的前提下,采用combiner提前合并,减少I/O。 - reduce阶段:
(1)合理设置map和reduce数量,太少会导致task等待,延长处理时间,太多会导致map、reduce任务间竞争资源,造成处理超时等错误。
(2)设置map、reduce共存,调整slowstart.completedmaps参数,使map运行到一定程度后,reduce也开始运行,减少reduce的等待时间。
(3)规避使用reduce,因为reduce在用于连接数据集的时候会产生大量的网络消耗。
(4)增加每个reduce去map中拿数据的并行数。
(5)增大reduce端存储数据内存的大小。 - IO传输:
(1)采用数据压缩的方式,减少网络IO的时间,如采用Snappy和LZO压缩方式。
(2)使用SequenceFile二进制文件。 - 其他:
(1)MapTask和ReduceTask默认内存大小为1G,可以适当增大,如4-5G。
(2)可以增加MapTask和ReduceTask的CPU核数。
(3)增加每个container的CPU核数和内存大小。
(4)调整每个MapTask和ReduceTask的最大重试次数。