hadoop-yarn资源分配介绍-以及推荐常用优化参数

	根据网上的学习,结合工作进行的一个整理。如果有什么不正确的欢迎大家一起交流学习~

Yarn前言

作为Hadoop 2.x 的一部分,YARN采用MapReduce中的资源管理功能并对其进行打包,以便新引擎可以使用它们。 这也简化了MapReduce,使其能够做到最好,处理数据。 使用YARN,您现在可以在Hadoop中运行多个应用程序,所有应用程序都共享一个公共资源管理。

那资源是有限的,YARN如何识别资源并按需分配大小呢?
yarn运行流程图

应用程序的运行过程

在学习Container之前,大家应先了解YARN的基本架构、工作流程。比如,大家应该了解一个应用程序的运行过程如下:
步骤1:用户将应用程序提交到ResourceManager上;
步骤2:ResourceManager为应用程序ApplicationMaster申请资源,并与某个NodeManager通信,以启动ApplicationMaster;
步骤3:ApplicationMaster与ResourceManager通信,为内部要执行的任务申请资源,一旦得到资源后,将于NodeManager通信,以启动对应的任务。
步骤4:所有任务运行完成后,ApplicationMaster向ResourceManager注销,整个应用程序运行结束。
上述步骤中,步骤2~3涉及到资源申请与使用,而这正是Container出现的地方

认识Container

(1) Container是YARN中资源的抽象,它封装了某个节点上一定量的资源(CPU和内存两类资源)。它跟Linux Container没有任何关系,仅仅是YARN提出的一个概念(从实现上看,可看做一个可序列化/反序列化的Java类)。
(2) Container由ApplicationMaster向ResourceManager申请的,由ResouceManager中的资源调度器异步分配给ApplicationMaster;
(3) Container的运行是由ApplicationMaster向资源所在的NodeManager发起的,Container运行时需提供内部执行的任务命令(可以使任何命令,比如java、Python、C++进程启动命令均可)以及该命令执行所需的环境变量和外部资源(比如词典文件、可执行文件、jar包等)。

一个应用程序所需的Container分为两大类,如下:
(1) 运行ApplicationMaster的Container:这是由ResourceManager(向内部的资源调度器)申请和启动的,用户提交应用程序时,可指定唯一的ApplicationMaster所需的资源;
(2) 运行各类任务的Container:这是由ApplicationMaster向ResourceManager申请的,并由ApplicationMaster与NodeManager通信以启动之。

Yarn参数

1.yarn.scheduler.minimum-allocation-mb
解释:The minimum allocation for every container request at the RM, in MBs. Memory requests lower than this won’t take effect, and the specified value will get allocated at minimum.
最小的container申请
2.yarn.nodemanager.resource.memory-mb
解释:Amount of physical memory, in MB, that can be allocated for containers.
总共可以分配的内存大小给container
3.mapreduce.map.memory.mb
解释:The amount of memory to request from the scheduler for each map task.
一个map调用的内存大小
4.mapreduce.reduce.memory.mb
解释:The amount of memory to request from the scheduler for each reduce task.
一个reduce调用的内存的大小

YARN实例 资源分配

总内存比如48GB。 留给操作系统8GB
1-2个containers,per disk and per core gives the best balance for cluster utilization.
一个node:12个盘+12个core,分20个containers比较合适

1.剩下的可使用的内存设置:yarn-site.xml
yarn.nodemanager.resource.memory-mb value值设置40960

2.引导YARN使用分配这些内存:yarn-site.xml
40GB/20 containers = 2GB
yarn.scheduler.minimum-allocation-mb value值设置2048
(YARN will allocate Containers with RAM amounts greater than the yarn.scheduler.minimum-allocation-mb.)

3.配置MAPREDUCE2:MR2运行于YARN之上,使用YARN容器来安排和执行Map、reduce任务。
a.实际内存限制每个Map和Reduce任务
b.JVM heap size 限制每个任务
c.每个任务都会有虚拟内存(yarn.nodemanager.vmem-pmem-ratio默认2.1)
3.1 map参数设置:mapred-site.xml
你可以定义每个Map/Reduce需要多少内存,因为每个Map/Reduce运行在分离的Container上,所以设置的这个内存大小要等于或者大于yarn.scheduler.minimum-allocation-mb=2GB
mapreduce.map.memory.mb value值设置4096
3.2 reduce参数设置:(一般reduce是map 内存2倍)
mapreduce.reduce.memory.mb value值设置8192

4.设置JVMs参数:mapred-site.xml
每个container跑Map/Reduce任务会运行启动JVMs,这个JVM heap size参数应该设置低于上面的map.memory/reduce.memory.
mapreduce.map.java.opts value值设置 -Xmx3072m
mapreduce.reduce.java.opts value值设置 -Xmx6144m

以上总结:每个Map任务资源
1.实际RAM=4GB
2.JVM heap 上限3GB
3.虚拟内存上限 4*2.1=8.2GB
–以上每个节点将会最多有10个mapper(40/4)或者5个reduces(40/8),或者组合形式。

推荐优化的点:

core-site.xml
在这里插入图片描述
hadoop.tmp.dir
hadoop文件系统依赖的基本配置,很多配置路径都依赖它。存放运行时临时文件。
为保证磁盘IO负载均衡,最好提供几个路径且每个路径都对应一个单独的磁盘。
线上环境需要根据业务量进行计算大小

推荐值: file:///opt/tmp

其他(分配多个路径,负载io):file:///mountpath1/tmp,file:///mountpath2/tmp,file:///mountpath3/tmp

根据实际情况修改.尽可能配置3-4个磁盘路径

mapred-site.xml
在这里插入图片描述
mapreduce.map.memory.mb
“map任务的内存限制。单位:MB
一般设置2G或者4G” 值:4096 根据物理内存调整

mapreduce.map.java.opts
“map的子jvms最大堆大小。
Map.memory.mb=4G时,java.opts设置-Xmx2048M
map.memory.mb=2G时,java.opts设置-Xmx1024M” 值:-Xmx2048M 根据map.memory.mb调整

mapreduce.reduce.memory.mb
“reduce任务的内存限制。单位:MB
一般设置4G或者8G” 值:8192 根据物理内存调整

mapreduce.reduce.java.opts
“reduce的子jvms最大堆大小。
reduce.memory.mb=4G时,java.opts设置-Xmx3276M
ma.memory.mb=8G时,java.opts设置-Xmx6144M” 值:-Xmx6144M 根据reduce.memory.mb调整

mapreduce.map.cpu.vcores 每个map任务需要的CPU核数。 值:1

mapreduce.reduce.cpu.vcores 每个reduce任务需要的CPU核数。 值:1

mapreduce.task.io.sort.mb “默认是:100M
数据排序缓存区的大小。单位:MB。” 推荐值:512 使用推荐值

mapreduce.task.io.sort.factor “默认是:10
文件排序时可一次合并的流。” 推荐值:64 使用推荐值

mapreduce.job.split.metainfo.maxsize “默认:10000000
分割metainfo文件的最大允许大小。MapReduce应用程序管理器不会尝试读取大于此配置值的已提交拆分metainfo文件。如果设置为-1,则没有限制。” “推荐值:-1
(无限制)” 使用推荐值

mapreduce.map.output.compress 设置在网络中发送映射输出信息前是否要对其进行压缩。使用SequenceFile压缩。 值:true 使用压缩

mapreduce.map.output.compress.codec 映射输出信息的压缩编码(org.apache.hadoop.io.compress.SnappyCodec等)

org.apache.hadoop.io.compress.SnappyCodec 没特殊需求无需更改

mapreduce.output.fileoutputformat.compress 设置是否压缩job输出信息 值:false 没特殊需求无需更改

mapreduce.output.fileoutputformat.compress.type 要压缩为SequenceFile的job输出信息的压缩类型 值:RECORD 没特殊需求无需更改

mapreduce.output.fileoutputformat.compress.codec job输出信息的压缩编码

org.apache.hadoop.io.compress.SnappyCodec 没特殊需求无需更改

mapreduce.reduce.shuffle.parallelcopies Reduce任务运行的用于从大量map中取回输出信息的 默认:10 默认即可

mapreduce.reduce.shuffle.merge.percent 发起内存合并的使用率阈值,表示为分配给映射输出信息的内存的比例(是由mapreduce.reduce.shuffle.input.buffer.percent设置的)。 默认:0.66 默认即可

mapreduce.reduce.shuffle.input.buffer.percent shuffle过程中分配给映射输出信息的内存占最大堆大小的比例。 默认:0.70 默认即可

mapreduce.framework.name 运行mapreduce程序的框架 yarn 无需修改

yarn-site.xml
在这里插入图片描述
yarn.nodemanager.resource.memory-mb 表示该节点上YARN可使用的物理内存总量,默认为8192,单位M。建议配置成节点物理内存总量的50%-90%。若该节点有其他业务的常驻进程,请降低此参数值给该进程预留足够运行资源。 机器内存*75%左右 根据节点可分配内存进行调整此值大小

yarn.nodemanager.resource.cpu-vcores 可分配给container的CPU核数。根据机器空余cpu进行分配此值 机器cpu*90%左右 比如节点cpu核数32,此处可以设置为30

yarn.nodemanager.vmem-pmem-ratio 为容器设置内存限制时虚拟内存跟物理内存的比值。容器分配值使用物理内存表示的,虚拟内存使用率超过分配值的比例不允许大于当前这个比例。 推荐值:5 使用推荐值

yarn.scheduler.minimum-allocation-mb 为ResourceManager中每个container请求分配的最小内存。单位:MB。如果请求的内存量很少,将分配该参数设置的内存量。 推荐值:512 使用推荐值

yarn.scheduler.maximum-allocation-mb “为ResourceManager中每个container请求分配的最大内存。单位:MB。如果请求的内存量很多,将分配该参数设置的内存量。
必须大于等于map.memory.mb、reduce.memory.mb值” 推荐值:65536 使用推荐值

yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage 磁盘空间利用率的最大百分比,在该百分比之后,磁盘被标记为坏。值的范围从0.0到100.0。如果该值大于或等于100,nodemanager将检查磁盘是否已满。这适用于
yarn.nodemanger.local-dirs和yarn.nodemanger.log-dirs。 推荐值:95 使用推荐值

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值