一、Map阶段
- mapreduce.task.io.sort.mb增大环形缓冲区的大小。由100m扩大到200m.
- mapreduce.map.sort.spill.percent环形缓冲区的溢写阈值,默认80%,可以提高到90%。
- 增加每次Merge合并次数,以减少总的merge次数
- 不影响实际业务的前提下,采用Combiner提前合并,减少I/O。
- 可以采用Snappy或者LZO压缩,减少磁盘IO。
- mapreduce.map.memory.mb默认MapTask内存上限1G。如果数据量是128m,正常不需要调整内存;如果数据量大于128m可以增加MapTask的内存,按照128m对应1G的规则增加。最大可以增加到4-5G。
- map
二、Reduce阶段
- 合理设置Map和Reduce数:太少导致Task等待,太多导致Map、Reduce任务间竞争资源,造成处理超时等错误。
- 设置Map、Reduce共存:调整mapreduce.job.reduce.slowstart.completedmaps参数,使Map运行到一定程度后,Reduce也开始运行,减少Reduce的等待时间。默认为0.05。
- 规避使用Reduce,因为Reduce在用于连接数据集的时候会产生大量的网络消耗。
- 增加每个Reduce去Map拉取数据的并行数。默认5,可以提高到10。
- 集群性能支持的情况下,增大Reduce端存储数据的内存大小。默认0.7,可以提高到0.8。
三、IO传输
采用数据压缩可以减少网络IO的