MapReduce参数优化


资源相关参数

  • 这些参数都需要在mapred-site.xml中配置



    mapreduce.map.memory.mb

    一个 MapTask 可使用的资源上限(单位:MB),默认为1024

    如果 MapTask 实际使用的资源量超过该值,则会被强制杀死。



    mapreduce.reduce.memory.mb

    一个 ReduceTask 可使用的资源上限(单位:MB),默认为1024

    如果 ReduceTask 实际使用的资源量超过该值,则会被强制杀死。



    mapred.child.java.opts

    配置每个 map 或者 reduce 使用的内存的大小,默认是200M



    mapreduce.map.cpu.vcores

    每个 MapTask 可使用的最多 CPU Core 数目, 默认值: 1



    mapreduce.reduce.cpu.vcores

    每个 ReduceTask 可使用的最多 CPU Core 数目, 默认值: 1

    最后两个vcores指的是virtual core/虚拟核处理器



    剩下两个参数要在yarn集群启动之前配置

    mapreduce.task.io.sort.mb

    shuffle的环形缓冲区大小,默认 100M



    mapreduce.map.sort.spill.percent

    环形缓冲区溢出的阈值,默认 80%

  • 这些参数都需要在yarn-site.xml中配置(在yarn集群启动之前进行配置)



    yarn.scheduler.minimum-allocation-mb

    给应用程序container分配的最小内存,默认 1024M



    yarn.scheduler.maximum-allocation-mb

    给应用程序container分配的最大内存,默认 8192M



    yarn.scheduler.minimum-allocation-vcores

    container最小的虚拟内核的个数,默认 1



    yarn.scheduler.maximum-allocation-vcores

    container最大的虚拟内核的个数,默认 32



    yarn.nodemanager.resource.memory-mb

    给每个nodemanager的内存资源,默认 8192M


容错相关参数

  • mapreduce.map.maxattempts

    每个Map Task最大重试次数,一旦重试参数超过该值,则认为Map Task运行失败,默认值:4
  • mapreduce.reduce.maxattempts

    每个Reduce Task最大重试次数,一旦重试参数超过该值,则认为Map Task运行失败,默认值:4
  • mapreduce.job.maxtaskfailures.per.tracker

    当失败的 MapTask 失败比例超过该值时,整个作业则失败,默认值为 0

    如果你的应用程序允许丢弃部分输入数据,则该该值设为一个大于0的值。

    比如5,表示如果有低于5%的MapTask失败,整个作业仍认为成功。
  • mapreduce.task.timeout

    Task超时时间,默认值为600000毫秒(经常需要设置的一个参数)

    该参数表达的意思为:如果一个task在一定时间内没有任何进入,即不会读取新的数据,也没有输出数据,则认为该task处于block状态,可能是卡住了

    为了防止因为用户程序永远block住不退出,则强制设置了一个该超时时间。如果你的程序对每条输入数据的处理时间过长(比如会访问数据库,通过网络拉取数据等),建议将该参数调大.

    该参数过小常出现的错误提示AttemptID:attempt_14267829456721_123456_m_000224_0 Timed out after 300 secsContainer killed by the ApplicationMaster.
  • 一般一个任务长时间没有完成,可能是因为数据倾斜造成的

    数据倾斜:大量的数据都涌到同一个reduceTask里面去,造成一个reduceTask里面处理得数据量太大,迟迟不能完成。比如,reduceTakss完成80%就不动了,很有可能就是发生了数据倾斜。

效率和稳定性相关参数

  • mapreduce.map.speculative

    是否为Map Task打开推测执行机制,默认为true。

    如果Map执行时间比较长,那么集群就会推测这个Map已经卡住了,会重新启动同样的Map进行并行的执行,哪个先执行完了,就采取哪个的结果来作为最终结果
  • mapreduce.reduce.speculative

    是否为Reduce Task打开推测执行机制,默认为true。

    如果reduce执行时间比较长,那么集群就会推测这个reduce已经卡住了,会重新启动同样的reduce进行并行的执行,哪个先执行完了,就采取哪个的结果来作为最终结果

推测执行并不能解决数据倾斜的问题,反而会更加浪费内存资源,所以一般关掉

最新文章

  1. PHP简单 对象(object) 与 数组(array) 的转换
  2. ajax 异步加载显示等待效果
  3. BIEE使用技巧
  4. bzoj4318OSU &tyvj1952 Easy
  5. Hadoop 2.5.2 eclipse plugin 编译 win7 集成
  6. FileWriter和FileReader简单使用
  7. spring之aop概念和配置
  8. 物理CPU、物理核跟逻辑核的区分
  9. STL学习总结
  10. js获取tr,td内容并排序
  11. js 重载(overload)
  12. beta冲刺总结
  13. 北京工业大学耿丹学院2016下C作业学习总结
  14. 全文搜索引擎 ElasticSearch 还是 Solr?
  15. YOLOv3训练自己的数据
  16. SQLServer 2008 已成功与服务器建立连接,但是在登录前的握手期间发生错误。 (provider: SSL Provider, error: 0 - 等待的操作过时。
  17. Linq编程小趣味爱因斯坦谜题
  18. 逆向随笔 - switch 语句深入分析
  19. Learning Query and Document Similarities from Click-through Bipartite Graph with Metadata
  20. mybatis v jpa

热门文章

  1. stand up meeting 12-14
  2. PHP代码审计理解(二)----齐博CMS7.0文件覆盖
  3. SpringBoot与单元测试JUnit的结合
  4. SpringCloud(六)学习笔记之Zuul
  5. Ansible Facts 变量详解
  6. Java 中正则表达式使用
  7. ES6中对函数的扩展
  8. php正则验证手机、邮箱
  9. Docker安装yapi
  10. redis5.0.3配置文件详解