yarn 集群资源设置资源

(1)yarn.nodemanager.resource.memory-mb

配置nodemanager节点的可用物理内存,默认是8192(MB) ,如这台服务器有16G 可以考虑分配12G给nodemanager,留下4g给系统内存或者其他程序。

(2)yarn.nodemanager.resource.cpu-vcores

表示该节点上YARN可使用的虚拟CPU个数,默认是8,如果这台服务器有32个物理cpu核,则可以考虑分配28个nodemanager。如果你的节点CPU核数不够8个,则需要调减小这个值,而YARN不会智能的探测节点的物理CPU总数。

(3)yarn.nodemanager.vmem-pmem-ratio

任务每使用1MB物理内存,最多可使用虚拟内存量,默认是2.1。

(4) yarn.nodemanager.pmem-check-enabled

是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true。

(5) yarn.nodemanager.vmem-check-enabled

是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true。

(6)yarn.scheduler.minimum-allocation-mb

Container包含的最小内存,单位MB  可设置1024(生产可以调

(9)yarn.scheduler.maximum-allocation-mb

Container包含的最大内存,单位MB  可设置8192(生产可以调

(10)yarn.scheduler.maximum-allocation-vcores

Container包含的最大cpu核数,默认32(生产可以调

(11)yarn.scheduler.minimum-allocation-vcores

Container包含的最小cpu核数,默认1(生产可以调

(12)mapreduce.map.memory.mb 

分配给map Container的内存大小,默认1024MB(生产可以调

(13):mapreduce.reduce.memory.mb

 分配给reduce Container的内存大小,默认1024MB(生产可以调

(14)yarn.app.mapreduce.am.resource.mb

 分配给ApplicationMaster Container的内存大小,默认1024MB(生产可以调

(15) mapreduce.map.cpu.vcores

分配给map Container的cpu核数,默认1(生产可以调

(16) mapreduce.reduce.cpu.vcores

分配给reduceContainer的cpu核数,默认1(生产可以调

(17) yarn.app.mapreduce.am.resource.cpu-vcores

分配给ApplicationMaster Container的cpu核数,默认1(生产可以调

(18) mapreduce.map.java.opts 

运行map任务的jvm参数,java堆内存,可在启动的时候改变 如-Xmx,-Xms等选项

(19) mapreduce.reduce.java.opts 

运行reduce任务的jvm参数,java堆内存,可在启动的时候改变 如-Xmx,-Xms等选项

(20) mapred.map.child.java.opts

map中开启子线程使用的堆大小。

(21) mapred.reduce.child.java.opts

reduce中开启子线程使用的堆大小。

这些参数可以在代码,客户端,服务器端设置。生效的顺序为 代码里面 > 客户端 > 服务器端

具体的可以在 8088 页面上查看每个job的configure 选项。

yarn队列资源不足 yarn配置多队列_ci

 还可以在hadoop-env.sh中来设置namenode的内存大小:

yarn队列资源不足 yarn配置多队列_yarn队列资源不足_02

具体可参考:

yarn队列配置

yarn调度器有三种 FIFO Scheduler,Capacity Scheduler, Fair Scheduler,可以为后面两种调度器设置队列,可以实现yarn的资源隔离或者优先分配。

Fair Scheduler:公平调度器

1. 配置文件yarn-site.xml

(1) yarn.scheduler.fair.allocation.file :自定义XML配置文件所在位置,该文件主要用于描述各个队列的属性,比如资源量、权重等,具体配置格式将在后面介绍。

(2)  yarn.scheduler.fair.user-as-default-queue:当应用程序未指定队列名时,是否指定用户名作为应用程序所在的队列名。如果设置为false或者未设置,所有未知队列的应用程序将被提交到default队列中,默认值为true。

(3)  yarn.scheduler.fair.sizebasedweight:在一个队列内部分配资源时,默认情况下,采用公平轮询的方法将资源分配各各个应用程序,而该参数则提供了另外一种资源分配方式:按照应用程序资源需求数目分配资源,即需求资源数量越多,分配的资源越多。默认情况下,该参数值为false。

(4)  yarn.scheduler.assignmultiple是否启动批量分配功能。当一个节点出现大量资源时,可以一次分配完成,也可以多次分配完成。默认情况下,该参数值为false。

(5)  yarn.scheduler.fair.max.assign:如果开启批量分配功能,可指定一次分配的container数目。默认情况下,该参数值为-1,表示不限制。

(6)  yarn.scheduler.fair.locality.threshold.rack:当应用程序请求某个机架上资源时,它可以接受的可跳过的最大资源调度机会。

(7)  yarn.scheduler.increment-allocation-mb:内存规整化单位,默认是1024,这意味着,如果一个Container请求资源是1.5GB,则将被调度器规整化为ceiling(1.5 GB / 1GB) * 1G=2GB。

(8)  yarn.scheduler.increment-allocation-vcores:虚拟CPU规整化单位,默认是1,含义与内存规整化单位类似。

2. 自定义配置文件

Fair Scheduler允许用户将队列信息专门放到一个配置文件(默认是fair-scheduler.xml),对于每个队列,管理员可配置以下几个选项:

(1)  minResources :最少资源保证量,设置格式为“X mb, Y vcores”,当一个队列的最少资源保证量未满足时,它将优先于其他同级队列获得资源,对于不同的调度策略,最少资源保证量的含义不同,对于fair策略,则只考虑内存资源,即如果一个队列使用的内存资源超过了它的最少资源量,则认为它已得到了满足;对于drf策略,则考虑主资源使用的资源量,即如果一个队列的主资源量超过它的最少资源量,则认为它已得到了满足。

(2)  maxResources最多可以使用的资源量,fair scheduler会保证每个队列使用的资源量不会超过该队列的最多可使用资源量。

(3)  maxRunningApps最多同时运行的应用程序数目。通过限制该数目,可防止超量Map Task同时运行时产生的中间输出结果撑爆磁盘。

(4)  minSharePreemptionTimeout最小共享量抢占时间。如果一个资源池在该时间内使用的资源量一直低于最小资源量,则开始抢占资源。

(5)  schedulingMode/schedulingPolicy:队列采用的调度模式,可以是fifo、fair或者drf。

(6)  aclSubmitApps可向队列中提交应用程序的Linux用户或用户组列表,默认情况下为“*”,表示任何用户均可以向该队列提交应用程序。需要注意的是,该属性具有继承性,即子队列的列表会继承父队列的列表。配置该属性时,用户之间或用户组之间用“,”分割,用户和用户组之间用空格分割,比如“user1, user2 group1,group2”。

(7)  aclAdministerApps:该队列的管理员列表。一个队列的管理员可管理该队列中的资源和应用程序,比如可杀死任意应用程序。

管理员也可为单个用户添加maxRunningJobs属性限制其最多同时运行的应用程序数目。此外,管理员也可通过以下参数设置以上属性的默认值:

(1)  userMaxJobsDefault:用户的maxRunningJobs属性的默认值。

(2) defaultMinSharePreemptionTimeout :队列的minSharePreemptionTimeout属性的默认值。

(3)  defaultPoolSchedulingMode:队列的schedulingMode属性的默认值。

(4)  fairSharePreemptionTimeout:公平共享量抢占时间。如果一个资源池在该时间内使用资源量一直低于公平共享量的一半,则开始抢占资源。

<allocations>
  <queue name=”aaa”>
    <minResources>10 mb, 10 vcores</minResources>
    <maxResources>150 mb, 150 vcores</maxResources>
    <maxRunningApps>200</maxRunningApps>
    <minSharePreemptionTimeout>300</minSharePreemptionTimeout>
    <weight>1.0</weight>
  </queue>
  <user name=”xxx”>
    <maxRunningApps>200</maxRunningApps>
  </user>
  <userMaxAppsDefault>20</userMaxAppsDefault>
  <fairSharePreemptionTimeout>6000</fairSharePreemptionTimeout>
</allocations>

参考了董的博客: http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-configurations-fair-scheduler/ 

Capacity Scheduler : 抢占调度器

1.  资源分配相关参数

(1)  capacity:队列的资源容量(百分比)。 当系统非常繁忙时,应保证每个队列的容量得到满足,而如果每个队列应用程序较少,可将剩余资源共享给其他队列。注意,所有队列的容量之和应小于100。

(2)  maximum-capacity:队列的资源使用上限(百分比)。由于存在资源共享,因此一个队列使用的资源量可能超过其容量,而最多使用资源量可通过该参数限制。

(3)  minimum-user-limit-percent:每个用户最低资源保障(百分比)。任何时刻,一个队列中每个用户可使用的资源量均有一定的限制。当一个队列中同时运行多个用户的应用程序时中,每个用户的使用资源量在一个最小值和最大值之间浮动,其中,最小值取决于正在运行的应用程序数目,而最大值则由minimum-user-limit-percent决定。比如,假设minimum-user-limit-percent为25。当两个用户向该队列提交应用程序时,每个用户可使用资源量不能超过50%,如果三个用户提交应用程序,则每个用户可使用资源量不能超多33%,如果四个或者更多用户提交应用程序,则每个用户可用资源量不能超过25%。

(4)  user-limit-factor:每个用户最多可使用的资源量(百分比)。比如,假设该值为30,则任何时刻,每个用户使用的资源量不能超过该队列容量的30%。

2.  限制应用程序数目相关参数

(1)  maximum-applications :集群或者队列中同时处于等待和运行状态的应用程序数目上限,这是一个强限制,一旦集群中应用程序数目超过该上限,后续提交的应用程序将被拒绝,默认值为10000。所有队列的数目上限可通过参数yarn.scheduler.capacity.maximum-applications设置(可看做默认值),而单个队列可通过参数yarn.scheduler.capacity.<queue-path>.maximum-applications设置适合自己的值。

(2)  maximum-am-resource-percent:集群中用于运行应用程序ApplicationMaster的资源比例上限,该参数通常用于限制处于活动状态的应用程序数目。该参数类型为浮点型,默认是0.1,表示10%。所有队列的ApplicationMaster资源比例上限可通过参数yarn.scheduler.capacity. maximum-am-resource-percent设置(可看做默认值),而单个队列可通过参数yarn.scheduler.capacity.<queue-path>. maximum-am-resource-percent设置适合自己的值。

3.  队列访问和权限控制参数

(1)  state 队列状态可以为STOPPED或者RUNNING,如果一个队列处于STOPPED状态,用户不可以将应用程序提交到该队列或者它的子队列中,类似的,如果ROOT队列处于STOPPED状态,用户不可以向集群中提交应用程序,但正在运行的应用程序仍可以正常运行结束,以便队列可以优雅地退出。

(2)  acl_submit_applications:限定哪些Linux用户/用户组可向给定队列中提交应用程序。需要注意的是,该属性具有继承性,即如果一个用户可以向某个队列中提交应用程序,则它可以向它的所有子队列中提交应用程序。配置该属性时,用户之间或用户组之间用“,”分割,用户和用户组之间用空格分割,比如“user1, user2 group1,group2”。

(3)  acl_administer_queue:为队列指定一个管理员,该管理员可控制该队列的所有应用程序,比如杀死任意一个应用程序等。同样,该属性具有继承性,如果一个用户可以向某个队列中提交应用程序,则它可以向它的所有子队列中提交应用程序。

具体参考董的博客http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-configurations-capacity-scheduler/