hadoop 2.0 yarn Capacity Scheduler 初探

当前yarn(hadoop 2.0.2-alpha)上的调度器

clip_image001

ResourceManager初始化时创建scheduler, 默认使用FifoScheduler(现在默认调度器已经改为capacity scheduler)

protected ResourceScheduler createScheduler() {
    return ReflectionUtils.newInstance(this.conf.getClass(
        YarnConfiguration.RM_SCHEDULER, FifoScheduler.class,
        ResourceScheduler.class), this.conf);
  }

Capacity Scheduler

官网的介绍:

http://hadoop.apache.org/docs/r0.23.0/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html

目的: 一个用在hadoop中插件试的调度器, 允许多种租户安全的共享一个大集群, 以此使他们的应用能在约束条件下及时到分配资源, 设计于共享, 多用户, 操作友好, 最大化集群吞吐量和利用率

Capacity调度器的配置

在 etc/hadoop/capacity-scheduler.xml增加配置.

组分层信息解释: 顶层为root, 每个节点下的子节点和为100, 百分比的意思.

配置a,b,c组, a组下有a1组和a2组:

        <property>
        <name>yarn.scheduler.capacity.root.capacity</name>
        <value>100</value>
        </property>
        <property>
        <name>yarn.scheduler.capacity.root.a.capacity</name>
        <value>30</value>
        </property>
        <property>
        <name>yarn.scheduler.capacity.root.a.a1.capacity</name>
        <value>30</value>
        </property>
        <property>
        <name>yarn.scheduler.capacity.root.a.a2.capacity</name>
        <value>70</value>
        </property>
        <property>
        <name>yarn.scheduler.capacity.root.b.capacity</name>
        <value>30</value>
        </property>
        <property>
        <name>yarn.scheduler.capacity.root.c.capacity</name>
        <value>40</value>
        </property>
        <property>
        <name>yarn.scheduler.capacity.root.queues</name>
        <value>a,b,c</value>
        <description>The queues at the this level (root is the root queue).
        </description>
        </property>
        <property>
        <name>yarn.scheduler.capacity.root.a.queues</name>
        <value>a1,a2</value>
        <description>The queues at the this level (root is the root queue).
        </description>
        </property>

 

客户端配置在 etc/hadoop/mapred-site.xml中配置组信息:

        <property>
        <name>mapreduce.job.queuename</name>
        <value>a1</value>
        <source>mapred-default.xml</source>
        </property>

 

默认组为default,

提交作业: bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-0.23.3.jar teragen 100 /in. 作业会运行在a1下.

下图是对配置文件的图形解释:

                                            clip_image001[5]

ParentQueue: root, a

LeafQueue: b,c,a1,a2

 

下图RM网页上显示了组关系:

image

Capacity Scheduler包:

clip_image007

其中接口CSQueue(Capacity Scheduler Queue)接口, 定义了一个组结点(树形)应该提供的方法, 它的两个实现LeafQueue(叶子组)和ParentQueue(双亲组), 客户端提交的作业需要提交到叶子组.

Capacity初始化期间读取配置组信息, 维护queue队列, 提交作业时运行handle方法, 状态为APP_ADDED, 在addApplication方法中通过配置的组名获取组信息,如果为null则报错. 然后判断是否能提交到该组(queue.submitApplication LeafQueue).

判断流程:

1. HasAccess, queue初始化的时候更新acl信息, 然后通过它判断某用户是否能使用该组资源

2. 该组是否处于running状态

3. Maxapplication, 组是否超过, 用户是否超过, 即支持设置每个组(用户)能运行的最多App数, 资源比例.

转载请注明出处!(http://www.cnblogs.com/shenh062326/archive/2012/11/20/yarn_capacity_scheduler.html)

posted @ 2012-11-20 12:01  南国故人(Wall)  阅读(2049)  评论(0编辑  收藏  举报