Container分配与申请流程--Hadoop-2.6.0 社区版学习笔记

AM在NM上启动成功并向RM注册后,向RM请求资源(Container),该过程有以下两个阶段迭代循环:

         阶段1:AM汇报资源需求,并领取已经分配到的资源。

         阶段2:NM向RM汇报各个Container的运行状态,如果RM发现它上面有空闲的资源,则进行一次资源分配,并将分配的资源保存到对应的数据结构中,等待下一次AM发来心跳信息是获取(即阶段1)。
        

         Container分配与申请流程的具体步骤如下。

(1)      阶段1

步骤1. AM通过RPC函数ApplicationMasterProtocol#allocate向RM汇报资源请求(被周期性调用,也是AM的心跳),包括新的资源需求的描述,待释放的Container列表,请求加入黑名单的节点列表,请求移除黑名单的节点列表。

步骤2. RM的ApplicationMasterService负责处理来自AM的请求,一旦收到该请求,会向RMAttemptImpl发送RMAppAttemptEventType事件(STATUS_UPDATE)。RMAttemptImpl收到事件后,将跟新应用程序执行进度和AMLivenessMonitor的中的应用程序最近更新时间。
步骤3. ApplicationMasterService会调用RrsourceScheduler#allocate,将AM的资源需求汇报给ResourceSchedular。

步骤4. ResourceSchedular首先读取待释放的Container列表,依次向对应的RMContainerImpl发送RMContainerEvent事件(RELEASED),以杀死正在运行的Container(这个过程中会发送RMNodeCleanContainerEvent事件(CLEANUP_CONTAINER)给RMNodeImpl,RMNodeImpl把待释放Container放入释放集合)。然后分配资源,放入对应的数据结构并返回给应用程序。

(2)      阶段2

步骤1. NM通过RPC方法ResourceTracker#nodeHeartbeat向RM汇报各个Container的运行状态。

步骤2. RM的ResourceTrackerService处理这个请求,经过一系列检查,向RMNodeImpl发送RMNodeStatusEvent事件(STATUS_UPDATE)。RMNodeImpl收到事件后,将会更新各个Container的状态,并向ResourceScheduler发送SchedulerEventType事件(NODE_UPDATE)。

步骤3. ResourceScheduler收到后,如果该节点上有可分配的空闲资源,则会将资源分配给应用程序,分配后的资源仅仅是记录到对应的数据结构中,等待AM下次心跳来取。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值