MapReduce优化

本文主要探讨了MapReduce在Map端和Reduce端的优化方法,包括合并小文件、自定义分区减少数据倾斜、调整内存参数、增加Merge次数、使用Combiner、优化压缩算法、调整重试次数以及调整ReduceTask的相关配置,旨在提升大数据处理效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 一、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最大的异常重试次数,一旦次数超过这个数值,则认为MapTask任务运行失败,默认值是4,可以根据情况适当提高)

二、reduce端可以进行的优化 

 1.修改每个ReduceTask去Map中拉取数据的并行数

        mapreduce.reduce.shuffle.parallelcopies(默认值是5.可以调高倒10)

2.修改Buffer占Reduce内存的比例

        mapreduce.reduce.shuffle.input.buffer.percent(默认值是0.7,可以提高到0.8)

3.Buffer中数据达到多少开始写入磁盘

        mapreduce.reduce.shuffle.merge.percent(默认值是0.66,可以提高到0.75)

4.修改reducetask内存的大小

        mapreduce.reduce.memory.mb(默认是1024,根据128对应1G 适当提高)

5.修改cpu核数

        mapreduce.reduce.cpu.vcores(默认核数是1,可以提高2-4)

6.失败重试次数

        mapreduce,reduce.maxattempts(失败次数超过该值,认为任务失败)

7.向MapTask给reduceTask申请资源

        mapreduce.job.reduce,slowstart.completedmaps(当MapTask完成的比例达到该值后才会为ReduceTask申请资源。默认是0.05)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值