MR优化总结

优化前
1.熟知业务要求
2.熟知数据分布状态(是否倾斜、是否是多个小文件等),可以使用采样来了解数据
通用型优化策略
1.文件存储格式
使用更加优化的格式的文件,例如Parquet、ORC,综合来说,ORC最优。
2.文件压缩
可以在mr各阶段启用压缩,例如:数据块可以被压缩(reduce输出可以被压缩)、map输出数据可以被压缩(减少shuffle过程中传输的数据量)
3.shuffle优化
核心思想:减少磁盘IO。可以通过调节一下几个方面来达到效果:
1.增加环形缓冲区大小
2.增大merge过程一次可以合并的溢写文件的数量(注意:量力(内存)而行)
3.增大溢写的第一级门槛
4.在能使用Combiner的业务场景下,尽可能的使用Combiner
5.合理设置Combiner的阈值
6.map输出的k、v尽量小
专用型优化策略
减少不必要的消耗
1.使用更加优化的数据格式文件,例如ORC
2.map端join(省去shuffle过程)
3.countall 或 topn场景下合理使用cleanup方法(减少shuffle过程中的数据传输量)
4.排序操作尽量使用shuffle内置的排序机制而不要自己手动排序
合理进行任务分配
数据本身不均衡
数据倾斜
通过自定义业务k,均分分散倾斜的数据,要实现同等效果还可以自定义Partitioner
大量小文件
1.当MR程序的输入是一堆小文件时,可以先将小文件合并,然后在再进行处理
2.使用Uber模式
数据本身均衡
1.合理设置ReduceTask的数量,假定map总输出的键值对的大小是10GB(并且去重后的key的数量远大于ReduceTask的数量),而一个ReduceTask所用的Continer的内存为1GB,那么合理的ReduceTask的数量为10÷(1*0.7)≈15(这里需要采用进1法);
2.为具体的任务设置合适的Continer大小,无论是MapTask还是ReduceTask,只要是cpu密集型的,其所使用的Continer就应该由较多的cpu和合适的内存所组成。同样的,如果任务是IO密集型的,其所使用的Continer就应该改由合适的cpu和较大的内存所组成。这个一般不全局调节。
优化最佳实践
在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值