Hadoop MR 基本运维参数

前言

在前面的章节内, 我们主要讲解了Hadoop MR的相关知识. 本章, 主要讲解Hadoop中主要的参数. 通常的程序的性能调优都和这些参数无不关系.

本文相关代码, 可在我的Github项目 https://github.com/SeanYanxml/bigdata/ 目录下可以找到. PS: (如果觉得项目不错, 可以给我一个Star.)


相关参数

本地MR参数
  • mapreduce.map.memory.mb: 一个Map Task可以使用的资源上限(单位 MB), 默认为1024MB. 如果Map Task实际使用的资源量超过该值, 则会被强制杀死.
  • mapreduce.reduce.memory.mb: 一个Reduce Task可以使用的资源上限(单位 MB), 默认为1024MB. 如果实际使用的资源量超过该值, 则会被强制杀死.
  • mapreduce.map.java.opts: MapTask的JVM参数, 你可以设置默认的 java.heap.size.(eg. -Xmx1024m -verbose:gc -Xloggc:/tmp/@[email protected] (@[email protected]会被Hadoop框架自动转换为对应的taskid)). 默认值为“”.
  • mapreduce.reduce.java.opts: Reduce Task的JVM参数, 你可以在此配置默认的java.heap.size等参数.(eg. -Xmx1024m -verbose:gc -Xloggc:/tmp/@[email protected] (@[email protected]会被Hadoop框架自动转换为对应的taskid)). 默认值为“”.
  • mapreduce.map.cpu.vcores: 每个MapTask 可以使用的最多的cpu core数目, 默认值为1.
  • mapreduce.reduce.cpu.vcores: 每个Reduce Task可以使用的最多cpu core数目, 默认值为1.
在Yarn启动之前 配置在服务器的配置文件中.
  • yarn.scheduler.minimum-allocation-mb: 1024 (给应用程序container分配的最小内存.)
  • yarn.scheduler.maximum-allocation-mb: 8192 (最大内存)
  • yarn.schedulr.minimum-allocation-ycores 1
  • yarn.schedulr.maximum-allocation-ycores 32
  • yarn.nodemanager.resource.memory-mb 8192 (总内存)
Shuffle 性能优化参数 在Yarn启动之前配置好
  • mapreduce.task.io.sort.mb 100 (shuffle内环形缓冲区的大小 默认为100m)
  • mapreduce.map.sort.spill.percent 0.8 (环形缓冲区溢出的阈值, 默认80%)
容错相关参数
  • mapreduce.map.maxattempts: 每个Map Task最大重试次数. 一旦重试超过该值, 则认为Map Task运行失败. 默认为4.
  • mapreduce.reduce.maxattempts: 每个Reduce Task的最大重试次数, 一旦超过该值, 则认为Reduce Task运行失败. 默认为4.
  • mapreduce.map.failures.maxpercent: 当失败的MapTask失败比例超过该值, 整个作业则失败. 默认值为0. 如果你的程序允许丢失部分数据, 则该值设为一个大于0的数字.(比如5,表示如果有低于5%的MapTask失败).
  • mapreduce.reduce.failures.maxpercent: Reduce Task的相关数据, 同上.
  • mapreduce.task.timeout: Task超过时间,经常需要设置一个参数,该参数表达的意思为:如果一个task在一定时间内没有任何进入,即不会读取新的数据,也没有输出数据,则认为该task处于block专题,也许是临时卡住,也许是永久卡住.为了防止用户永远block住不退出,则强制设置一个超时时间,默认为300000(毫秒).如果你的程序每条数据的输入时间过长(比如访问数据库,网络延迟).建议将参数调大.(相关异常AttemptID:attempt_142xxx_xxx-m_0000_0 Timed out after 300 secsContainer killed by the ApplicationMaster. )

开发相关

我们在开发过程中有时会将这些配置文件放入ClassPath下, 随打包一起打入包内.
上文所说的本地MR参数就可通过这样进行修改. 当然你也可以创建一个Configuration类, 并使用conf.set(key,value)方式进行修改.
Hadoop MR 基本运维参数