这是我参与「第四届青训营 」笔记创作活动的第9天
Yarn的演化: Hadoop 2.0中,资源调度和任务控制解耦
任务运行生命周期核心流程:
-
Client向ResourceManager发起提交请求
-
ResourceManager收到Client端提交的请求之后,会返回给Client端一些信息,包括ApplicationID(任务在集群里的唯一ID),以及当前时刻集群最大能分配的资源量
-
Client端收到信息之后,会做一些准备的工作,会把需要的jar包信息、配置文件信息上传到HDFS
-
上传完成之后,会进行一些ApplicationMaster相关的初始化操作,准备完成之后,Client端就会把任务真正提交到ResourceManager
提交上来之后,ResourceManager就会根据一定的策略来为任务分配资源
-
分配好资源以后,会在一个固定的节点上把任务拉起起来。比如,提交了一个任务A,任务A分配到NodeA上,ResourceManager会和NodeA上的NodeManager进行通信,来拉起ApplicationMaster的进程
-
当NodeManager收到拉起请求之后,就会拉起对应的ApplicationMaster进程
ApplicationMaster就是一个任务的管理者,管理任务的生命周期
-
ApplicationMaster在拉起的过程中,会从HDFS里面来下载一些自身运行所需的jar包,并且会启动相关的进程,启动好之后,ApplicationMaster就启起来了
-
当ApplicationMaster启起来之后,立即向ResourceManager注册,告诉ResourceManager,现在我已经启动好了
注册好之后,ApplicationMaster会跟ResourceManager之间保持心跳,在心跳里面进行资源的申请
当ResourceManager收到资源的申请之后,会基于当前集群里的资源状态以及一些检测的逻辑为当前任务分配一些资源量
-
ResourceManager会把分配的资源量随心跳返回给对应的ApplicationMaster
-
当ApplicationMaster收到分配的资源之后,因为对于分配的资源里面,会标注这个容器是需要运行在哪个节点上边的,这时,ApplicationMaster就会跟对应的这个节点进行通信,让这个节点拉起对应的进程
-
当对应节点的NodeManager收到这个请求之后,就会进行容器进程的拉起
-
首先会从HDFS里面拉起一些容器启动所需要的jar包,有了jar包以后,容器就可以运行起来
-
在容器运行过程中,容器会和ApplicationMaster之间随时的保持通信,来上报自身的一些运行状态
-
当最终任务下面的容器都运行结束的时候,ApplicationMaster会主动向ResourceManager注销自己,表明任务已经运行结束了