hadoop 2.6 YarnScheduler接口用到的类分析

YarnScheduler是Yarn所有调度器必须实现的接口,因此,分析它所用的类对于理解调度器的功能,为以后自定义调度器打下了基础。

1. QueueInfo

QueueInfo 报告了一个队列在运行时的信息。
它包含以下信息:
队列名称。
队列中的容量。
队列的最大容量。
队列的当前容量。
子队列。
正在运行的程序。
队列的状态。


QueueState 是一个枚举类,有两个元素:

  STOPPED --Stopped状态不接受任何新程序。

 RUNNING --正常状态

public enum QueueState {
  /**
   * Stopped - Not accepting submissions of new applications.
   */
  STOPPED,
  
  /**
   * Running - normal operation.
   */
  RUNNING
}


QueueACL是一个枚举类,有两个元素:

  SUBMIT_APPLICATIONS -- 可以把程序提交到这个队列的ACL。

  ADMINISTER_QUEUE -- 管理这个队列的ACL。

public enum QueueACL {
  /**
   * ACL to submit applications to the queue.
   */
  SUBMIT_APPLICATIONS,
  
  /**
   * ACL to administer the queue.
   */
  ADMINISTER_QUEUE,
}

ApplicationAttemptId 就是ApplicationMaster的一次运行尝试,有两个成员,一个是ApplicationId,一个是int attemptId。


ApplicationId代表一个应用的全局唯一标识,标识的字符串内容为:appIdStrPrefix + this.getClusterTimestamp() + "_"    + appIdFormat.get().format(getId());

其中:appIdStrPrefix = "application_";

          cluster timestamp = start-time of theResourceManager

          getId() 返回当前程序的ID,程序的ID用一个单向递增的计数器生成,然后再格式化成最少4位数的字符串。

         

allocate方法是最重要的方法,定义如下所示:

  Allocation 
  allocate(ApplicationAttemptId appAttemptId, 
      List<ResourceRequest> ask,
      List<ContainerId> release, 
      List<String> blacklistAdditions, 
      List<String> blacklistRemovals);

ResourceRequest: 代表一个应用程序向ResourceManager申请获得各种Container的请求。它包含

  Priority: request的优先级(Priority )

  Location: 所需要容器所在的服务器或者机架的位置。‘*’代表任何服务器都可以。

  Resource: 以上条件下的容器的数量。

  RelaxLocality: 是否可以宽松本地化,默认为true。

ContainerId: 代表一个容器在集群中的全局唯一标识, 包括ApplicationAttemptId appAttemptId,      long containerId


SchedulerNodeReport getNodeReport(NodeId nodeId);

NodeId 是一个结点的唯一标识,包括结点的主机名称和端口。

SchedulerNodeReport有三个字段,第一个是已经使用了的资源,第二个是未分配的资源,第三个是正在运行的容器数量。

SchedulerAppReport有三个字段,第一个是正在使用的资源,第二个是保留的资源,第三个是是否处于暂停状态。

ApplicationResourceUsageReport 有以下字段:

    numUsedContainers:已经使用了的容器数量。

    numReservedContainers:已经保留了的容器数量。

    usedResources:已经使用了的资源。

   reservedResources:保留的资源。

   neededResources: 需要的资源。

   memory_seconds:程序分配的内存乘以运行的时间(以秒计)。

  vcore_seconds:程序分配的cpu数乘以运行的时间(以秒计)。

public enum RMContainerState {
  NEW, 
  RESERVED, 
  ALLOCATED, 
  ACQUIRED, 
  RUNNING, 
  COMPLETED, 
  EXPIRED, 
  RELEASED, 
  KILLED
}
Container代表一个集群中分配了的资源。ResourceManager有对应用分配容器的唯一权威。分配的Container总是在单个结点上,并且有唯一的ContainerId.它有一定量的资源。它包括以下内容:

  ContainerId:全局唯一。

  NodeId: 分配的结点。

  nodeHttpAddress:结点的uri.

  Resource:分配的资源。

  Priority:优先级

  Token:Container的Token.

  一般来说,在资源协商过程中,ApplicationMaster从ResourceManager接收Container,然后和NodeManager交互来启动或者停止Container.

 QueueEntitlement是队列的应得权益。 在FairScheduler中是weights,在CapacityScheduler中代表Capacity.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值