hadoop 2.6 YarnScheduler接口用到的类分析

来源:互联网 发布:游戏锁定fps软件 编辑:程序博客网 时间:2024/06/09 13:57

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.


1 0
原创粉丝点击