Hadoop Yarn学习笔记(2)

Yarn的任务提交流程与状态机

任务提交流程(1)
来自:链接:https://www.jianshu.com/p/254d01eaf884
在这里插入图片描述
1、job client向ResourceManager提交执行job申请。
2、ResourceManager接收job请求, 生成job id, 返回job id, staging工作目录等信息给job client。
3、Client把资源jar等拷贝到staging工作目录(hdfs /tmp/xxx/yarn-staging/jobId)
4、ResourceManager把job放入工作队列。
5、NodeManager从ResourceManager队列中领取任务。
6、ResourceManager根据job和NodeManager情况, 计算出资源大小,并创建Container。
7、创建MRAppMaster(如果计算框架是MR),运行在Container上。
8、MRAppMaster向ResourceManager注册,向ResourceManager轮询资源。
9、MRAppMaster创建Map, Reduce task任务进程(yarn child)。
10、Map/Reduce任务完成, 然后向ResourceManager注销MRAppMaster进程。

任务提交流程(2)
来自:https://blog.csdn.net/u011331430/article/details/79042329
在这里插入图片描述
从第5步开始没有讲的很清楚

任务提交流程(3)
来自:https://blog.csdn.net/u010039929/article/details/74171927
在这里插入图片描述
上面这个图是Client向RM提交任务时第一次请求的流程图:
(1) Client通过New Application Request来通知RM中的AsM组件需要提交任务;
(2) AsM一般会返回一个新生成的全局唯一ID,除此之外,传递的信息还有集群的资源状况,这样Client就可 以在需要时请求资源来运行任务的第一个container即AM。
(3) 之后,Client就可以构造并发送ASC了。ASC中包括了调度队列,优先级,用户认证信息,除了这些基本的信息之外,还包括用来启动AM的CLC信息,一个CLC中包括jar包、任务文件、安全token、资源请求以及运行任务过程中需要的其他文件。

经过上面这三步,一个Client就完成了一次任务的请求。之后,Client可以直接通过RM查询任务的状态,在必要时,可以要求RM杀死这个应用。

在这里插入图片描述
(1) AM向RM注册,这个过程包括handshaking过程,并且传递一些信息,包括AM监听的RPC端口、用于监测任务运行状态的URL等。
(2) RM中的Scheduler部件做回应。这个过程会传递AM所需的信息,比如这个集群的最大与最小资源使用情况等。AM利用这些信息来计算并请求任务所需的资源。
(3) 这个过程是AM向RM请求资源。传递的信息主要包含请求container的列表,还有可能包含这个AM已经释放的container的列表。
(4) 在AM经过(3)请求资源之后,在稍微晚些时候,会把心跳包与任务进度信息发送给RM
(5) Scheduler在收到AM的资源请求后,会根据调度策略,来分配container以满足AM的请求。
(6) 在任务完成后,AM会给RM发送一个结束消息,然后退出。

在上面(5)与(6)之间,AM在收到RM返回的container列表后,会与每个container所在机器的NM通信,来启动这个container,下面就说说这个过程。
在这里插入图片描述
(1) AM向container所在机器的NM发送CLC来启动container
(2)(3) 在container运行过程中,AM可以查询它的运行状态

通过上面的描述,开发者在开发YARN上的应用时主要需要关注以下接口:

ApplicationClientProtocol

Client使用这个协议来与RM通信,来启动一个新应用,检查任务的运行状态或杀死任务

ApplicationMasterProtocol

AM使用这个协议来向RM注册/撤销,请求资源来运行任务。

ContainerManagementProtocol

AM使用这个协议来与NM通信,来启动/停止container,查询container的状态

Job和Applicaiton的状态:

public enum JobStateInternal {
  NEW,
  SETUP,
  INITED,
  RUNNING,
  COMMITTING,
  SUCCEEDED,
  FAIL_WAIT,
  FAIL_ABORT,
  FAILED,
  KILL_WAIT,
  KILL_ABORT,
  KILLED,
  ERROR,
  REBOOT
}
public enum RMAppState {
  NEW,
  NEW_SAVING,
  SUBMITTED,
  ACCEPTED,
  RUNNING,
  FINAL_SAVING,
  FINISHING,
  FINISHED,
  FAILED,
  KILLING,
  KILLED
}
发布了12 篇原创文章 · 获赞 0 · 访问量 570

猜你喜欢

转载自blog.csdn.net/weixin_42305433/article/details/90255839