总结了一下MR优化问题,涉及到hadoop1.0和2.0的调优
1. 从集群的性能方面:
集群能够同时运行Map或者Reduce任务的最大任务数
假设一台机器最多能同时运行10个Map任务和5个Reduce任务,
这个集群有100台服务器,那么map的任务槽就是1000,Reduce的任务槽就是500
合理的设置Map和Reduce任务数:
map:具体根据每个运行的时间设置,调整分片的大小,使每个map任务运行1分钟左右比较合适
reduce: 一般为Reduce任务槽的0.95或者1.75倍,可以在程序中设定
2. 从网络I/O方面:
1)进行本地聚合:combine()函数
合并重复的数据减少网络传输的数据量
2)进行压缩:对Map的中间结果进行压缩,也能减少传输的数据量
但是压缩数据也需要消耗CPU时间,所以需要权衡
3. 从计算方面:
自定义Key:创建比较函数(实现Rawcomparator接口),比较Key的时候不用创建对象
直接比较字节
4. 在shuffle阶段:
较少IO操作,无论是map端和中间结果输出,还是reduce端的输出都涉及到落磁盘的操作
可以通过设置属性可以减少IO次数(具体查看配置文件)
5. JVM重用:
在默认的情况下,每个task任务都需要一个JVM虚拟机来运行,虚拟机的启动时需要消耗时间的
可以通过虚拟机重用,使多个task在同一个JVM上排队执行!通过更改配置文件设置
可能总结有误,欢迎指正!
MapReduce优化问题
最新推荐文章于 2023-02-25 21:14:08 发布