一、Map端可以进行的优化
1.合并小文件
采用CombineTextInputFormat切片规则
2.自定义分区,减少数据倾斜
定义类,实现Partitioner接口,重写getPartition方法
3.减少溢写次数
mapreduce.task.io.sort.mb(修改Shuffle环形缓冲区的大小,默认100M,可以提高到200m)
mapreduce.map.sort.spill.percent(修改环形缓冲区溢出的阈值,默认880%,可以提高到90)
4.增加每次Merge合并次数
mapreduce.task.io.sort.factor(默认10次,可以提高到20次)
5.在不影响业务结果的条件下可以采用Combiner
6.为了减少磁盘IO,可以采用Snappy或者LZO压缩
7.修改MapTask内存上限
mapreduce.map.memory.mb(默认是1024MB 可以根据128m数据对应1G的内存比例来提高)
8.修改MapTaskCPU核数
mapreduce.map.cpu.vcores(默认MapTask的Cpu核数是1)
9.异常重试次数
mapreduce.map.maxattempts(每个MapTask最大的异常重试