zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    实现三栏布局
    Element对象
    React中组件间通信的方式
    CSS实现展开动画
    Vue中组件间通信的方式
    java面试一日一题:mysql执行delete数据真的被删除了吗
    java面试一日一题:讲对mysql的MVCC的理解
    java面试一日一题:讲下mysql中的锁
    java面试一日一题:如何优化sql
    java面试一日一题:在创建微服务时,是用RPC还是http
  • 原文地址:https://www.cnblogs.com/shenh062326/p/yarn_capacity_scheduler.html
Copyright © 2011-2022 走看看