yarn 关于资源参数设置
来源:互联网 发布:淘宝进口零食推荐 知乎 编辑:程序博客网 时间:2024/06/04 18:00
yarn-site.xml
yarn.scheduler.minimum-allocation-mb
yarn.scheduler.maximum-allocation-mb
说明:单个容器可申请的最小与最大内存,应用在运行申请内存时不能超过最大值,小于最小值则分配最小值,从这个角度看,最小值有点想操作系统中的页。最小值还有另外一种用途,计算一个节点的最大container数目注:这两个值一经设定不能动态改变(此处所说的动态改变是指应用运行时)。
默认值:1024/8192
yarn.scheduler.minimum-allocation-vcores
yarn.scheduler.maximum-allocation-vcores
参数解释:单个可申请的最小/最大虚拟CPU个数。比如设置为1和4,则运行MapRedce作业时,每个Task最少可申请1个虚拟CPU,最多可申请4个虚拟CPU。
默认值:1/32
yarn.nodemanager.resource.memory-mb
yarn.nodemanager.vmem-pmem-ratio
说明:每个节点可用的最大内存,RM中的两个值不应该超过此值。此数值可以用于计算container最大数目,即:用此值除以RM中的最小容器内存。虚拟内存率,是占task所用内存的百分比,默认值为2.1倍;注意:第一个参数是不可修改的,一旦设置,整个运行过程中不可动态修改,且该值的默认大小是8G,即使计算机内存不足8G也会按着8G内存来使用。
默认值:8G /2.1
yarn.nodemanager.resource.cpu-vcores
参数解释:NodeManager总的可用虚拟CPU个数。
默认值:8
AM内存配置相关参数,此处以MapReduce为例进行说明(这两个值是AM特性,应在mapred-site.xml中配置),如下:
mapreduce.map.memory.mb
mapreduce.reduce.memory.mb
说明:这两个参数指定用于MapReduce的两个任务(Map and Reduce task)的内存大小,其值应该在RM中的最大最小container之间。如果没有配置则通过如下简单公式获得:
max(MIN_CONTAINER_SIZE, (Total Available RAM) / containers))
一般的reduce应该是map的2倍。注:这两个值可以在应用启动时通过参数改变;
AM中其它与内存相关的参数,还有JVM相关的参数,这些参数可以通过,如下选项配置:
mapreduce.map.java.opts
mapreduce.reduce.java.opts
说明:这两个参主要是为需要运行JVM程序(java、scala等)准备的,通过这两个设置可以向JVM中传递参数的,与内存有关的是,-Xmx,-Xms等选项。此数值大小,应该在AM中的map.mb和reduce.mb之间。
我们对上面的内容进行下总结,当配置Yarn内存的时候主要是配置如下三个方面:每个Map和Reduce可用物理内存限制;对于每个任务的JVM对大小的限制;虚拟内存的限制;
下面通过一个具体错误实例,进行内存相关说明,错误如下:
Container[pid=41884,containerID=container_1405950053048_0016_01_000284] is running beyond virtual memory limits. Current usage: 314.6 MB of 2.9 GB physical memory used; 8.7 GB of 6.2 GB virtual memory used. Killing container.
配置如下:
<property> <name>yarn.nodemanager.resource.memory-mb</name> <value>100000</value></property><property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>10000</value></property><property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>3000</value></property><property> <name>mapreduce.reduce.memory.mb</name> <value>2000</value></property>
通过配置我们看到,容器的最小内存和最大内存分别为:3000m和10000m,而reduce设置的默认值小于2000m,map没有设置,所以两个值均为3000m,也就是log中的“2.9 GB physical memory used”。而由于使用了默认虚拟内存率(也就是2.1倍),所以对于Map Task和Reduce Task总的虚拟内存为都为3000*2.1=6.2G。而应用的虚拟内存超过了这个数值,故报错 。解决办法:在启动Yarn是调节虚拟内存率或者应用运行时调节内存大小.
mapred-site.xml
参数名称缺省值说明mapreduce.job.name
作业名称mapreduce.job.priorityNORMAL作业优先级yarn.app.mapreduce.am.resource.mb1536MR ApplicationMaster占用的内存量yarn.app.mapreduce.am.resource.cpu-vcores1MR ApplicationMaster占用的虚拟CPU个数mapreduce.am.max-attempts2MR ApplicationMaster最大失败尝试次数mapreduce.map.memory.mb1024每个Map Task需要的内存量mapreduce.map.cpu.vcores1每个Map Task需要的虚拟CPU个数mapreduce.map.maxattempts4Map Task最大失败尝试次数mapreduce.reduce.memory.mb1024每个Reduce Task需要的内存量mapreduce.reduce.cpu.vcores1每个Reduce Task需要的虚拟CPU个数mapreduce.reduce.maxattempts4Reduce Task最大失败尝试次数mapreduce.map.speculativefalse是否对Map Task启用推测执行机制mapreduce.reduce.speculativefalse是否对Reduce Task启用推测执行机制mapreduce.job.queuenamedefault作业提交到的队列mapreduce.task.io.sort.mb100任务内部排序缓冲区大小mapreduce.map.sort.spill.percent0.8Map阶段溢写文件的阈值(排序缓冲区大小的百分比)mapreduce.reduce.shuffle.parallelcopies5Reduce Task启动的并发拷贝数据的线程数目
在上Yarn的框架管理中,无论是AM从RM申请资源,还是NM管理自己所在节点的资源,都是通过container进行的。Container是Yarn的资源抽象,此处的资源包括内存和cup等。下面对container,进行比较详细的介绍。为了是大家对container有个比较形象的认识,首先看下图:
ResourceRequest结构如下:
message ResourceRequestProto {optional PriorityProto priority = 1; // 资源优先级optional string resource_name = 2; // 期望资源所在的hostoptional ResourceProto capability = 3; // 资源量(mem、cpu)optional int32 num_containers = 4; // 满足条件container个数optional bool relax_locality = 5 ; //default = true; }
对上面结构进行简要按序号说明:
2:在提交申请时,期望从哪台主机上获得,但最终还是AM与RM协商决定;
3:只包含两种资源,即:内存和cpu,申请方式:
注:1、由于2与4并没有限制资源申请量,则AP在资源申请上是无限的。2、Yarn采用覆盖式资源申请方式,即:AM每次发出的资源请求会覆盖掉之前在同一节点且优先级相同的资源请求,也就是说同一节点中相同优先级的资源请求只能有一个。
container结构:
message ContainerProto {optional ContainerIdProto id = 1; //container idoptional NodeIdProto nodeId = 2; //container(资源)所在节点optional string node_http_address = 3;optional ResourceProto resource = 4; //分配的container数量optional PriorityProto priority = 5; //container的优先级optional hadoop.common.TokenProto container_token = 6; //container token,用于安全认证}
ContainerLaunchContext结构:
message ContainerLaunchContextProto {repeated StringLocalResourceMapProto localResources = 1; //该Container运行的程序所需的在资源,例如:jar包optional bytes tokens = 2;//Security模式下的SecurityTokensrepeated StringBytesMapProto service_data = 3;repeated StringStringMapProto environment = 4; //Container启动所需的环境变量repeated string command = 5; //该Container所运行程序的命令,比如运行的为java程序,即$JAVA_HOME/bin/java org.ourclassrepeated ApplicationACLMapProto application_ACLs = 6;//该Container所属的Application的访问控制列表}
申请一个新的ContainerLaunchContext:
ContainerLaunchContext ctx = Records.newRecord(ContainerLaunchContext.class); 填写必要的信息:ctx.setEnvironment(...);childRsrc.setResource(...);ctx.setLocalResources(...);ctx.setCommands(...);启动任务:startReq.setContainerLaunchContext(ctx);
最后对container进行如下总结:container是Yarn的资源抽象,封装了节点上的一些资源,主要是CPU与内存;container是AM向NM申请的,其运行是由AM向资源所在NM发起的,并最终运行
的。有两类container:一类是AM运行需要的container;另一类是AP为执行任务向RM申请的。
每个slave可以运行
map的数据<=yarn.nodemanager.resource.memory-mb/mapreduce.map.memory.mb,
reduce任务的数量<=yarn.nodemanager.resource.memory-mb/mapreduce.reduce.memory.mb
- yarn 关于资源参数设置
- 关于Yarn
- Yarn集群资源规划
- Yarn资源分配示例
- Yarn资源分配示例
- Yarn 资源调度策略
- Yarn 资源调度器
- yarn资源隔离
- YARN资源调度策略
- Yarn 资源隔离
- 资源调度框架YARN
- Yarn资源调度策略
- 关于JVM参数设置
- Hadoop YARN资源隔离技术
- yarn 资源调度问题排查
- yarn资源的任务队列
- yarn的cpu资源隔离
- Hadoop Yarn Container 资源分配
- 【笔记】PMBOK第4章项目整合管理
- CentOS 6.5 安装 Redis 执行 make #error "Newer version of jemalloc required"
- 二叉树详解及二叉树的前序、中序、后序遍历(递归和非递归)
- C#控制台 虚方法与多级继承的覆写方法
- 消息队列设计
- yarn 关于资源参数设置
- 浮点数陷阱
- 经典设计模式(x23)
- java线程池与五种常用线程池策略使用与解析
- 计算机的组成 —— 显示器
- 使用C写Python的模块
- 异步任务——AsyncTask
- 单机版五子棋【JAVA】
- NYOJ 19 擅长排列的小明 DFS