Hadoop Yarn内存使用优化配置

第一部分Hadoop Yarn内存使用优化配置

    Hadoop2.0, YARN负责管理MapReduce中的资源(内存, CPU)并且将其打包成Container. 这样可以精简MapReduce, 使之专注于其擅长的数据处理任务将无需考虑资源调度。

    YARN会管理集群中所有机器的可用计算资源基于这些资源YARN会调度应用(比如MapReduce)发来的资源请求然后YARN会通过分配Container来给每个应用提供处理能力, ContainerYARN中处理能力的基本单元是对内存, CPU等的封装。

    Yarn架构做资源管理,在每个节点上面运行NodeManager负责节点资源的分配,在Yarn上面Container是资源的分配的最小单元。

    Yarn集群的内存分配配置在yarn-site.xml文件中配置:

  1. <property>  
  2.     <name>yarn.nodemanager.resource.memory-mb</name>  
  3.     <value>8192</value>  
  4.     <discription>每个节点可用内存,单位MB</discription>  
  5. </property>  
  6.   
  7. <property>  
  8.     <name>yarn.scheduler.minimum-allocation-mb</name>  
  9.     <value>1024</value>  
  10.     <discription>单个任务可申请最少内存,默认1024MB</discription>  
  11. </property>  
  12.   
  13. <property>  
  14.     <name>yarn.scheduler.maximum-allocation-mb</name>  
  15.     <value>8192</value>  
  16.     <discription>单个任务可申请最大内存,默认8192MB</discription>  
  17. </property> 

    Mapreduce的任务的内存配置:

  1. <property> 
  2. <name>mapreduce.map.memory.mb</name> 
  3. <value>1024</value> 
  4. <description>每个Map任务的物理内存限制</description> 
  5. </property> 
  6.  
  7. <property> 
  8. <name>mapreduce.reduce.memory.mb</name> 
  9. <value>1024</value> 
  10. <description>每个Reduce任务的物理内存限制</description> 
  11. </property> 
  12.  
  13. <property> 
  14. <name>mapred.child.java.opts</name> 
  15. <value>-Xmx1024m</value> 
  16. </property> 

    其中mapreduce.map.memory.mb配置每个map任务的内存,应该是大于或者等于Container的最小内存。  

    按照上面的配置:每个slave可以运行map的数据<= yarn.nodemanager.resource.memory-mb/mapreduce.map.memory.mb

reduce任务的数量<=yarn.nodemanager.resource.memory-mb/mapreduce.reduce.memory.mb

 

 

第二部分Hadoop YARN配置参数剖析

一、RMNM相关参数(yarn-site.xml

1ResourceManager相关配置参数

1yarn.resourcemanager.address

参数解释:ResourceManager 对客户端暴露的地址。客户端通过该地址向RM提交应用程序,杀死应用程序等。

默认值:${yarn.resourcemanager.hostname}:8032

2yarn.resourcemanager.scheduler.address

参数解释:ResourceManager ApplicationMaster暴露的访问地址。ApplicationMaster通过该地址向RM申请资源、释放资源等。

默认值:${yarn.resourcemanager.hostname}:8030

3yarn.resourcemanager.resource-tracker.address

参数解释:ResourceManager NodeManager暴露的地址.NodeManager通过该地址向RM汇报心跳,领取任务等。

默认值:${yarn.resourcemanager.hostname}:8031

4yarn.resourcemanager.admin.address

参数解释:ResourceManager 对管理员暴露的访问地址。管理员通过该地址向RM发送管理命令等。

默认值:${yarn.resourcemanager.hostname}:8033

5yarn.resourcemanager.webapp.address

参数解释:ResourceManager对外web ui地址。用户可通过该地址在浏览器中查看集群各类信息。

默认值:${yarn.resourcemanager.hostname}:8088

6yarn.resourcemanager.scheduler.class

参数解释:启用的资源调度器主类。目前可用的有FIFOCapacity SchedulerFair Scheduler

默认值:org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler

7yarn.resourcemanager.resource-tracker.client.thread-count

参数解释:处理来自NodeManagerRPC请求的Handler数目。

默认值:50

8yarn.resourcemanager.scheduler.client.thread-count

参数解释:处理来自ApplicationMasterRPC请求的Handler数目。

默认值:50

9yarn.scheduler.minimum-allocation-mb/yarn.scheduler.maximum-allocation-mb

参数解释:单个可申请的最小/最大内存资源量。比如设置为10243072,则运行MapRedce作业时,每个Task最少可申请1024MB内存,最多可申请3072MB内存。

默认值:1024/8192

10yarn.scheduler.minimum-allocation-vcores/yarn.scheduler.maximum-allocation-vcores

参数解释:单个可申请的最小/最大虚拟CPU个数。比如设置为14,则运行MapRedce作业时,每个Task最少可申请1个虚拟CPU,最多可申请4个虚拟CPU。什么是虚拟CPU,可阅读我的这篇文章:“YARN 资源调度器剖析

默认值:1/32

11yarn.resourcemanager.nodes.include-path /yarn.resourcemanager.nodes.exclude-path

参数解释:NodeManager黑白名单。如果发现若干个NodeManager存在问题,比如故障率很高,任务运行失败率高,则可以将之加入黑名单中。注意,这两个配置参数可以动态生效。(调用一个refresh命令即可)

默认值:“”

12yarn.resourcemanager.nodemanagers.heartbeat-interval-ms

参数解释:NodeManager心跳间隔

默认值:1000(毫秒)

2NodeManager相关配置参数

1yarn.nodemanager.resource.memory-mb

参数解释:NodeManager总的可用物理内存。注意,该参数是不可修改的,一旦设置,整个运行过程中不可动态修改。另外,该参数的默认值是8192MB,即使你的机器内存不够8192MBYARN也会按照这些内存来使用(傻不傻?),因此,这个值通过一定要配置。不过,Apache已经正在尝试将该参数做成可动态修改的。

默认值:8192

2yarn.nodemanager.vmem-pmem-ratio

参数解释:每使用1MB物理内存,最多可用的虚拟内存数。

默认值:2.1

3yarn.nodemanager.resource.cpu-vcores

参数解释:NodeManager总的可用虚拟CPU个数。

默认值:8

4yarn.nodemanager.local-dirs

参数解释:中间结果存放位置,类似于1.0中的mapred.local.dir。注意,这个参数通常会配置多个目录,已分摊磁盘IO负载。

默认值:${hadoop.tmp.dir}/nm-local-dir

5yarn.nodemanager.log-dirs

参数解释:日志存放地址(可配置多个目录)。

默认值:${yarn.log.dir}/userlogs

6yarn.nodemanager.log.retain-seconds

参数解释:NodeManager上日志最多存放时间(不启用日志聚集功能时有效)。

默认值:108003小时)

7yarn.nodemanager.aux-services

参数解释:NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序

默认值:“”

二、权限与日志聚集相关参数(yarn-site.xml

1、权限相关配置参数

    这里的权限由三部分组成,分别是:(1)管理员和普通用户如何区分2)服务级别的权限,比如哪些用户可以向集群提交ResourceManager提交应用程序,(3)队列级别的权限,比如哪些用户可以向队列A提交作业等。

    管理员列表由参数yarn.admin.acl指定。

    服务级别的权限是通过配置hadoop-policy.xml实现的,这个与Hadoop 1.0类似。

    队列级别的权限是由对应的资源调度器内部配置的,比如Fair Scheduler或者Capacity Scheduler等,具体见后面。

2、日志聚集相关配置参数

    日志聚集是YARN提供的日志中央化管理功能,它能将运行完成的Container/任务日志上传到HDFS上,从而减轻NodeManager负载,且提供一个中央化存储和分析机制。默认情况下,Container/任务日志存在在各个NodeManager上,如果启用日志聚集功能需要额外的配置。

1yarn.log-aggregation-enable

参数解释:是否启用日志聚集功能。

默认值:false

2yarn.log-aggregation.retain-seconds

参数解释:在HDFS上聚集的日志最多保存多长时间。

默认值:-1

3yarn.log-aggregation.retain-check-interval-seconds

参数解释:多长时间检查一次日志,并将满足条件的删除,如果是0或者负数,则为上一个值的1/10

默认值:-1

4yarn.nodemanager.remote-app-log-dir

参数解释:当应用程序运行结束后,日志被转移到的HDFS目录(启用日志聚集功能时有效)。

默认值:/tmp/logs

5yarn.log-aggregation.retain-seconds

参数解释:远程日志目录子目录名称(启用日志聚集功能时有效)。

默认值:日志将被转移到目录${yarn.nodemanager.remote-app-log-dir}/${user}/${thisParam}

三、MapReduce相关参数(mapred-site.xml

    MapReduce相关配置参数分为两部分,分别是JobHistory Server和应用程序参数,Job History可运行在一个独立节点上,而应用程序参数则可存放在mapred-site.xml中作为默认参数,也可以在提交应用程序时单独指定,注意,如果用户指定了参数,将覆盖掉默认参数。

    以下这些参数全部在mapred-site.xml中设置。

1MapReduce JobHistory相关配置参数

    JobHistory所在节点的mapred-site.xml中配置。

1mapreduce.jobhistory.address

参数解释:MapReduce JobHistory Server地址。

默认值: 0.0.0.0:10020

2mapreduce.jobhistory.webapp.address

参数解释:MapReduce JobHistory Server Web UI地址。

默认值: 0.0.0.0:19888

3mapreduce.jobhistory.intermediate-done-dir

参数解释:MapReduce作业产生的日志存放位置。

默认值: /mr-history/tmp

4mapreduce.jobhistory.done-dir

参数解释:MR JobHistory Server管理的日志的存放位置。

默认值: /mr-history/done

2MapReduce作业配置参数

    可在客户端的mapred-site.xml中配置,作为MapReduce作业的缺省配置参数。也可以在作业提交时,个性化指定这些参数。

参数名称

缺省值

说明

mapreduce.job.name


作业名称

mapreduce.job.priority

NORMAL

作业优先级

yarn.app.mapreduce.am.resource.mb

1536

MR ApplicationMaster占用的内存量

yarn.app.mapreduce.am.resource.cpu-vcores

1

MR ApplicationMaster占用的虚拟CPU个数

mapreduce.am.max-attempts

2

MR ApplicationMaster最大失败尝试次数

mapreduce.map.memory.mb

1024

每个Map Task需要的内存量

mapreduce.map.cpu.vcores

1

每个Map Task需要的虚拟CPU个数

mapreduce.map.maxattempts

4

Map Task最大失败尝试次数

mapreduce.reduce.memory.mb

1024

每个Reduce Task需要的内存量

mapreduce.reduce.cpu.vcores

1

每个Reduce Task需要的虚拟CPU个数

mapreduce.reduce.maxattempts

4

Reduce Task最大失败尝试次数

mapreduce.map.speculative

false

是否对Map Task启用推测执行机制

mapreduce.reduce.speculative

false

是否对Reduce Task启用推测执行机制

mapreduce.job.queuename

default

作业提交到的队列

mapreduce.task.io.sort.mb

100

任务内部排序缓冲区大小

mapreduce.map.sort.spill.percent

0.8

Map阶段溢写文件的阈值(排序缓冲区大小的百分比)

mapreduce.reduce.shuffle.parallelcopies

5

Reduce Task启动的并发拷贝数据的线程数目

    注意,MRv2重新命名了MRv1中的所有配置参数,但兼容MRv1中的旧参数,只不过会打印一条警告日志提示用户参数过期。MapReduce新旧参数对照表可参考Javaorg.apache.hadoop.mapreduce.util.ConfigUtil,举例如下:

过期参数名

新参数名

mapred.job.name

mapreduce.job.name

mapred.job.priority

mapreduce.job.priority

mapred.job.queue.name

mapreduce.job.queuename

mapred.map.tasks.speculative.execution

mapreduce.map.speculative

mapred.reduce.tasks.speculative.execution

mapreduce.reduce.speculative

io.sort.factor

mapreduce.task.io.sort.factor

io.sort.mb

mapreduce.task.io.sort.mb

四、Fair Scheduler相关参数

    参考:http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-configurations-fair-scheduler/

五、Capacity Scheduler相关参数

    Capacity SchedulerYARN中默认的资源调度器。

    参考:http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-configurations-capacity-scheduler/

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值