Hadoop Yarn内存使用优化配置
在Hadoop2.0中, YARN负责管理MapReduce中的资源(内存, CPU等)并且将其打包成Container. 这样可以精简MapReduce, 使之专注于其擅长的数据处理任务, 将无需考虑资源调度。
YARN会管理集群中所有机器的可用计算资源. 基于这些资源YARN会调度应用(比如MapReduce)发来的资源请求, 然后YARN会通过分配Container来给每个应用提供处理能力, Container是YARN中处理能力的基本单元, 是对内存, 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配置参数剖析
RM与NM相关参数(yarn-site.xml)
1、ResourceManager相关配置参数
1)yarn.resourcemanager.address
ResourceManager 对客户端暴露的地址。客户端通过该地址向RM提交应用程序,杀死应用程序等。
${yarn.resourcemanager.hostname}:8032
2)yarn.resourcemanager.scheduler.address
ResourceManager 对ApplicationMaster暴露的访问地址。ApplicationMaster通过该地址向RM申请资源、释放资源等。
${yarn.resourcemanager.hostname}:8030
3)yarn.resourcemanager.resource-tracker.address
ResourceManager 对NodeManager暴露的地址.。NodeManager通过该地址向RM汇报心跳,领取任务等。
${yarn.resourcemanager.hostname}:8031
4)yarn.resourcemanager.admin.address
ResourceManager 对管理员暴露的访问地址。管理员通过该地址向RM发送管理命令等。
${yarn.resourcemanager.hostname}:8033
5)yarn.resourcemanager.webapp.address
ResourceManager对外web ui地址。用户可通过该地址在浏览器中查看集群各类信息。
${yarn.resourcemanager.hostname}:8088
6)yarn.resourcemanager.scheduler.class
FIFO、Capacity Scheduler和Fair Scheduler。
org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
7)yarn.resourcemanager.resource-tracker.client.thread-count
NodeManager的RPC请求的Handler数目。
50
8)yarn.resourcemanager.scheduler.client.thread-count
ApplicationMaster的RPC请求的Handler数目。
50
9)yarn.scheduler.minimum-allocation-mb/yarn.scheduler.maximum-allocation-mb
/最大内存资源量。比如设置为1024和3072,则运行MapRedce作业时,每个Task最少可申请1024MB内存,最多可申请3072MB内存。
1024/8192
10)yarn.scheduler.minimum-allocation-vcores/yarn.scheduler.maximum-allocation-vcores
/最大虚拟CPU个数。比如设置为1和4,则运行MapRedce作业时,每个Task最少可申请1个虚拟CPU,最多可申请4个虚拟CPU。什么是虚拟CPU,可阅读我的这篇文章:“YARN 资源调度器剖析”。
1/32
11)yarn.resourcemanager.nodes.include-path /yarn.resourcemanager.nodes.exclude-path
NodeManager黑白名单。如果发现若干个NodeManager存在问题,比如故障率很高,任务运行失败率高,则可以将之加入黑名单中。注意,这两个配置参数可以动态生效。(调用一个refresh命令即可)
“”
12)yarn.resourcemanager.nodemanagers.heartbeat-interval-ms
NodeManager心跳间隔
1000(毫秒)
2、NodeManager相关配置参数
1)yarn.nodemanager.resource.memory-mb
NodeManager总的可用物理内存。注意,该参数是不可修改的,一旦设置,整个运行过程中不可动态修改。另外,该参数的默认值是8192MB,即使你的机器内存不够8192MB,YARN也会按照这些内存来使用(傻不傻?),因此,这个值通过一定要配置。不过,Apache已经正在尝试将该参数做成可动态修改的。
8192
2)yarn.nodemanager.vmem-pmem-ratio
1MB物理内存,最多可用的虚拟内存数。
2.1
3)yarn.nodemanager.resource.cpu-vcores
NodeManager总的可用虚拟CPU个数。
8
4)yarn.nodemanager.local-dirs
1.0中的mapred.local.dir。注意,这个参数通常会配置多个目录,已分摊磁盘IO负载。
${hadoop.tmp.dir}/nm-local-dir
5)yarn.nodemanager.log-dirs
参数解释:日志存放地址(可配置多个目录)。
${yarn.log.dir}/userlogs
6)yarn.nodemanager.log.retain-seconds
NodeManager上日志最多存放时间(不启用日志聚集功能时有效)。
10800(3小时)
7)yarn.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上,如果启用日志聚集功能需要额外的配置。
1)yarn.log-aggregation-enable
参数解释:是否启用日志聚集功能。
false
2)yarn.log-aggregation.retain-seconds
HDFS上聚集的日志最多保存多长时间。
-1
3)yarn.log-aggregation.retain-check-interval-seconds
0或者负数,则为上一个值的1/10。
-1
4)yarn.nodemanager.remote-app-log-dir
HDFS目录(启用日志聚集功能时有效)。
/tmp/logs
5)yarn.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中设置。
1、MapReduce JobHistory相关配置参数
在JobHistory所在节点的mapred-site.xml中配置。
1)mapreduce.jobhistory.address
MapReduce JobHistory Server地址。
0.0.0.0:10020
2)mapreduce.jobhistory.webapp.address
MapReduce JobHistory Server Web UI地址。
0.0.0.0:19888
3)mapreduce.jobhistory.intermediate-done-dir
MapReduce作业产生的日志存放位置。
/mr-history/tmp
4)mapreduce.jobhistory.done-dir
MR JobHistory Server管理的日志的存放位置。
/mr-history/done
2、MapReduce作业配置参数
可在客户端的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新旧参数对照表可参考Java类org.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 Scheduler是YARN中默认的资源调度器。
参考:http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-configurations-capacity-scheduler/