Mapreduce参数调节

http://blog.javachen.com/2014/06/24/tuning-in-mapreduce/

本文主要记录Hadoop 2.x版本中MapReduce参数调优,不涉及Yarn的调优。

Hadoop的默认配置文件(以cdh5.0.1为例):

说明:

在hadoop2中有些参数名称过时了,例如原来的mapred.reduce.tasks改名为mapreduce.job.reduces了,当然,这两个参数你都可以使用,只是第一个参数过时了。

1. 操作系统调优

  • 增大打开文件数据和网络连接上限,调整内核参数net.core.somaxconn,提高读写速度和网络带宽使用率
  • 适当调整epoll的文件描述符上限,提高Hadoop RPC并发
  • 关闭swap。如果进程内存不足,系统会将内存中的部分数据暂时写入磁盘,当需要时再将磁盘上的数据动态换置到内存中,这样会降低进程执行效率
  • 增加预读缓存区大小。预读可以减少磁盘寻道次数和I/O等待时间
  • 设置openfile

2. Hdfs参数调优

2.1 core-default.xml:

hadoop.tmp.dir

  • 默认值: /tmp
  • 说明: 尽量手动配置这个选项,否则的话都默认存在了里系统的默认临时文件/tmp里。并且手动配置的时候,如果服务器是多磁盘的,每个磁盘都设置一个临时文件目录,这样便于mapreduce或者hdfs等使用的时候提高磁盘IO效率。

fs.trash.interval

  • 默认值: 0
  • 说明: 这个是开启hdfs文件删除自动转移到垃圾箱的选项,值为垃圾箱文件清除时间。一般开启这个会比较好,以防错误删除重要文件。单位是分钟。

io.file.buffer.size

  • 默认值:4096
  • 说明:SequenceFiles在读写中可以使用的缓存大小,可减少 I/O 次数。在大型的 Hadoop cluster,建议可设定为 65536 到 131072。

2.2 hdfs-default.xml:

dfs.blocksize

  • 默认值:134217728
  • 说明: 这个就是hdfs里一个文件块的大小了,CDH5中默认128M。太大的话会有较少map同时计算,太小的话也浪费可用map个数资源,而且文件太小namenode就浪费内存多。根据需要进行设置。

dfs.namenode.handler.count

  • 默认值:10
  • 说明:设定 namenode server threads 的数量,这些 threads 會用 RPC 跟其他的 datanodes 沟通。当 datanodes 数量太多时会发現很容易出現 RPC timeout,解決方法是提升网络速度或提高这个值,但要注意的是 thread 数量多也表示 namenode 消耗的内存也随着增加

3. MapReduce参数调优

包括以下节点:

  • 合理设置槽位数目
  • 调整心跳配置
  • 磁盘块配置
  • 设置RPC和线程数目
  • 启用批量任务调度

3.1 mapred-default.xml:

mapred.reduce.tasksmapreduce.job.reduces):

  • 默认值:1
  • 说明:默认启动的reduce数。通过该参数可以手动修改reduce的个数。

mapreduce.task.io.sort.factor

  • 默认值:10
  • 说明:Reduce Task中合并小文件时,一次合并的文件数据,每次合并的时候选择最小的前10进行合并。

mapreduce.task.io.sort.mb

  • 默认值:100
  • 说明: Map Task缓冲区所占内存大小。

mapred.child.java.opts

  • 默认值:-Xmx200m
  • 说明:jvm启动的子线程可以使用的最大内存。建议值-XX:-UseGCOverheadLimit -Xms512m -Xmx2048m -verbose:gc -Xloggc:/tmp/@[email protected]

mapreduce.jobtracker.handler.count

  • 默认值:10
  • 说明:JobTracker可以启动的线程数,一般为tasktracker节点的4%。

mapreduce.reduce.shuffle.parallelcopies

  • 默认值:5
  • 说明:reuduce shuffle阶段并行传输数据的数量。这里改为10。集群大可以增大。

mapreduce.tasktracker.http.threads

  • 默认值:40
  • 说明:map和reduce是通过http进行数据传输的,这个是设置传输的并行线程数。

mapreduce.map.output.compress

  • 默认值:false
  • 说明: map输出是否进行压缩,如果压缩就会多耗cpu,但是减少传输时间,如果不压缩,就需要较多的传输带宽。配合 mapreduce.map.output.compress.codec使用,默认是 org.apache.hadoop.io.compress.DefaultCodec,可以根据需要设定数据压缩方式。

mapreduce.reduce.shuffle.merge.percent

  • 默认值: 0.66
  • 说明:reduce归并接收map的输出数据可占用的内存配置百分比。类似mapreduce.reduce.shuffle.input.buffer.percen属性。

mapreduce.reduce.shuffle.memory.limit.percent

  • 默认值: 0.25
  • 说明:一个单一的shuffle的最大内存使用限制。

mapreduce.jobtracker.handler.count

  • 默认值: 10
  • 说明:可并发处理来自tasktracker的RPC请求数,默认值10。

mapred.job.reuse.jvm.num.tasksmapreduce.job.jvm.numtasks):

  • 默认值: 1
  • 说明:一个jvm可连续启动多个同类型任务,默认值1,若为-1表示不受限制。

mapreduce.tasktracker.tasks.reduce.maximum

  • 默认值: 2
  • 说明:一个tasktracker并发执行的reduce数,建议为cpu核数

4. 系统优化

4.1 避免排序

对于一些不需要排序的应用,比如hash join或者limit n,可以将排序变为可选环节,这样可以带来一些好处:

  • 在Map Collect阶段,不再需要同时比较partition和key,只需要比较partition,并可以使用更快的计数排序(O(n))代替快速排序(O(NlgN))
  • 在Map Combine阶段,不再需要进行归并排序,只需要按照字节合并数据块即可。
  • 去掉排序之后,Shuffle和Reduce可同时进行,这样就消除了Reduce Task的屏障(所有数据拷贝完成之后才能执行reduce()函数)。

4.2 Shuffle阶段内部优化

  1. Map端--用Netty代替Jetty
  2. Reduce端--批拷贝
  3. 将Shuffle阶段从Reduce Task中独立出来

5. 总结

在运行mapreduce任务中,经常调整的参数有:

  • mapred.reduce.tasks:手动设置reduce个数
  • mapreduce.map.output.compress:map输出结果是否压缩
    • mapreduce.map.output.compress.codec
  • mapreduce.output.fileoutputformat.compress:job输出结果是否压缩
    • mapreduce.output.fileoutputformat.compress.type
    • mapreduce.output.fileoutputformat.compress.codec
时间: 2025-01-17 19:08:10

Mapreduce参数调节的相关文章

inux IO 内核参数调优 之 参数调节和场景分析

http://backend.blog.163.com/blog/static/2022941262013112081215609/ http://blog.csdn.net/icycode/article/category/5966733 http://blog.sina.cn/dpool/blog/s/blog_b374c0f30102wboi.html 1. pdflush刷新脏数据条件 (linux IO 内核参数调优 之 原理和参数介绍)上一章节讲述了IO内核调优介个重要参数参数. 总

Yarn&Mapreduce参数的具体含义和配置参考

Yarn & Mapreduce 参数的具体含义和配置 http://zh.hortonworks.com/blog/how-to-plan-and-configure-yarn-in-hdp-2-0/

(转)linux IO 内核参数调优 之 参数调节和场景分析

1. pdflush刷新脏数据条件 (linux IO 内核参数调优 之 原理和参数介绍)上一章节讲述了IO内核调优介个重要参数参数. 总结可知cached中的脏数据满足如下几个条件中一个或者多个的时候就会被pdflush刷新到磁盘: (1)数据存在的时间超过了dirty_expire_centisecs(默认30s)时间 (2)脏数据所占内存 /(MemFree + Cached - Mapped) > dirty_background_ratio.也就是说当脏数据所占用的内存占(MemFre

通过swappiness内核参数调节swap使用

在linux中,可以通过修改swappiness内核参数,降低系统对swap的使用,从而提高系统的性能. 遇到的问题是这样的,新版本产品发布后,每小时对内存的使用会有一个尖峰.虽然这个峰值还远没有到达服务器的物理内存,但确发现内存使用达到峰值时系统开始使用swap.在swap的过程中系统性能会有所下降,表现为较大的服务延迟.对这种情况,可以通过调节swappiness内核参数降低系统对swap的使用,从而避免不必要的swap对性能造成的影响. 简单地说这个参数定义了系统对swap的使用倾向,默认

PID参数调节口诀

参数整定找最佳, 从小到大顺序查. 先是比例后积分, 最后再把微分加. 曲线振荡很频繁, 比例度盘要放大. 曲线漂浮绕大弯, 比例度盘往小扳. 曲线偏离回复慢, 积分时间往下降. 曲线波动周期长, 积分时间再加长. 曲线振荡频率快, 先把微分降下来. 动差大来波动慢, 微分时间应加长. 理想曲线两个波, 前高后低四比一. 一看二调多分析, 调节质量不会低.

Android Camera2 参数调节关键字翻译集合,常用关键字解析

https://blog.csdn.net/qq_29333911/article/details/79400617 black_level_lock黑电平补偿是否锁定当前值,或者可以自由更改.color_correction_aberration_mode色差校正算法的运算方式.color_correction_gains适用于拜尔原料色通道的白平衡.color_correction_mode模式控制选择图像数据从传感器的原始颜色为线性sRGB色彩转换.color_correction_tra

Hive调优(语法与参数层面优化)

一.简介 作为企业Hadoop应用的核心产品,Hive承载着FaceBook.淘宝等大佬 95%以上的离线统计,很多企业里的离线统计甚至全由Hive完成,如我所在的电商.Hive在企业云计算平台发挥的作用和影响愈来愈大,如何优化提速已经显得至关重要. 好的架构胜过任何优化,好的Hql同样会效率大增,修改Hive参数,有时也能起到很好的效果. 有了瓶颈才需要优化 1.Hadoop的主要性能瓶颈是IO负载,降IO负载是优化的重头戏. 2.对中间结果的压缩 3.合理设置分区,静态分区和动态分区 二.H

Hadoop MapReduce开发最佳实践(上篇)

body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI",Tahoma,Helvetica,Sans-Serif,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5;}

Unity之导航网格寻路相关参数

1.Object(物体)参数面板 Navigation Static:选中该复选框,则表示该游戏对象将参与导航网格的烘焙. Generate OffMeshLinks:选中该复选框,可以自动根据Drop Height(下落高度)和Jump Distance(跳跃距离)的参数设置用关系线来连接分离的网格(模型). NavigationArea:导航区域设置.在默认情况下分为Walkable(行走区域).Not Walkable(不可行走层)和Jump(跳跃层). 2.Bake(烘焙)参数面板 Ag