YARN的组成部分
YARN共有ResourceManager、NodeManager、JobHistoryServer、Containers、Application Master、job、Task、Client组成。
Resource Manager: 一个Cluster 只有一个,负责资源调度、资源分配等工作。
JobHistory Server: 负责查询job运行进度及元数据管理。
nodemanager:运行在datanode节点,负责启动Application和对资源的管理。
Containers: Container通过ResourceManager分配。包括容器的cpu、内存等资源。
Application master:通俗来说Application master 相当于包工头,Resource Manager 相当于经理。Resource Manager 首先将任务给Application master,然后Application master 在将Resource manager的指示传达给各个 nodemanager(相当于工人)进行干活儿。每个application只有一个Applicationmaster,运行在node manager节点,Application master是由Resource manager指派的。
job:一个mapper、一个Reducer或一个进程的输入列表。job也可以叫做Application。
task:一个具体做mapper或Reducer的独立的工作单元。task运行在nodemanager 的Container中。
client:一个提交给Resource manager的一个Application程序。
提交一个job的工作流程
- 用户向YARN中提交程序/作业,其中包括Application Master启动、ApplicationMaster的命令及用户程序等;ResourceManager为作业分配第一个Container,并与对应的nodemanager通信,要求它在这个Container中启动改作业的Application master;Applicationmaster首先向Resourcemaster注册,这样用户可以直接通过Resourcemanager查询作业的运行状态,然后它将为各个人物申请资源并监控任务的运行状态,知道运行结束;Application通过RPC请求向Resourcemanager申请和领取资源。
- 然后Applicationmaster 要求指定的nodemanager 节点启动任务。
3. 启动之后,去干Resource Manager 指定的map tesk。
4. 等Map task干完之后,通知application master。然后application master 去告知resouce manager。接下来Resource manager 分配新的资源给application master,让它找人干其它的活儿。
5. 接下来Application master 通知nodemanager启动新的Container准备干活儿。该活儿的输入是map task结束的输出。
4. 开始干Reduce Task任务。
5. 等各个节点上的Reduce task 都干完了,将干活儿的nodemanager的任务结果进行同步。做最后的reduce任务。
6. 等都计算完了,最后将最终的结果输出到hdfs。任务完成。