YARN之作业提交流程
Posted 大数据架构技术
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了YARN之作业提交流程相关的知识,希望对你有一定的参考价值。
本周开始陆续几期将介绍Yarn相关知识,重点会介绍Scheduler相关内容
约定:
所有内容都是基于HDP的hadoop-2.7.3
2,ResourceManger用RM来缩写,NodeManager用NM来缩写,ApplicationMaster用AM来缩写
Yarn的组件有很多,我这里只例举出了比较重要的几个
Yarn的启动过程非常复杂,涉及到多种状态机的转换,本文不会去讲状态机,所以忽略掉启动过程中各个状态机的转换,例如:RMApp,RMAppAttempt的状态机等等
一,Yarn组成
1),ResourceManager几个重要组成组件
ResourceScheduler:资源调度器(后续几周我会详细介绍)
NMLivelinessMonitor:监控NM的存活情况,yarn.nm.liveness-monitor.expiry-interval-ms时间内(默认10min)未汇报心跳,则RM认为此NM跪了,从集群中删除
NodesListManager:黑白名单节点列表管理
AMLivelinessMonitor:监控AM存活状态,yarn.am.liveness-monitor.expiry-interval-ms时间内(默认10min)未汇报心跳,则RM认为此AM跪了,RM会重新找一个NM来启动AM
RMAppManager:管理Yarn中app
2),ApplicationMaster
每一种job都会有一个AM,各个AM之间没有任何联系
负责和RM通信,向RM注册自己(机器host,port,url),申请资源和命令(释放资源,是否抢占等等)
将从RM处申请到的资源二次分发给内部的任务
跟NM通信来启动/停止Container,获取Container状态
监控所有Container运行状态,如果遇到失败的Container则重新申请资源来重启该Container
3),NodeManager几个重要组成组件
NodeHealthCheckerService:NM健康检查机制,一是脚本健康检查,一是本地目录健康检查
NodeStatusUpdater:yarn.resourcemanager.nodemanagers.heartbeat-interval-ms时间内(默认1s)跟RM进行心跳
运行和管理Container
4),Client
向RM提交job
上传job所需文件到hdfs
查询job信息
二,Yarn作业申请流程
1,Yarn各个组件之间通信协议
1)ApplicationClientProtocol
Client->RM通信
(1)获取一个appId
(2)提交job
(3)强制kill掉job,获取job信息等等
2)ApplicationMasterProtocol
AM->RM通信
(1)注册AM
(2)申请资源
(3)完成AM
3)ResourceTracker
NM->RM通信
(1)注册NM
(2)NM向RM汇报心跳
4)ContainerManagementProtocol
AM->NM通信
(1)启动Container
(2)停止Container
(3)查询Container状态
2,Yarn作业启动流程
Client通过ApplicationClientProtocol协议向RM申请一个jobId,这个jo bId很重要,后续所有作业的操作都是基于这个jobId来做
RM返回一个jobId给Client
Client申请到jobId后把作业所需要的文件,例如jar包,字典文件等上传到HDFS
Client提交job到RM,Client会传一些参数给RM以提交job,例如jobId, jobName,提交到哪个queue上,job优先级,启动AM所需要的资源 (core,memory),job失败最大尝试次数等等
RM收到Client提交job的请求后会向Scheduler申请运行AM所需要的资源 (具体的申请过程会在后续讲解Scheduler中讲解),申请到资源后RM会通 知AMLivelinessMonitor来监控AM,并通知某一台NM来启动一个Container,这个Container就是用来运行AM的,NM收到启动AM的命令后,如果这是第一次在本机启动该AM,则从HDFS上下载job文件,否则直接 启动
AM启动完成后通过ApplicationMasterProtocol向RM注册自己,并开始 申请资源,申请的内容有:资源优先级,资源所在的机器,需要申请的资 源数量,是否具有本地松弛性等,与此同时,AM还需要向RM汇报需要释 放的Container列表,哪些资源需要放入黑名单等。
RM收到AM的请求后会把请求交给Scheduler来处理,经过Scheduler一 系列的调度,把结果返回给AM,包括:完成的Container列表,申请好的 资源列表,当前集群可用资源,是否抢占等等
注意:AM会定时汇报心跳给AMLivelinessMonitor,避免自己被强制杀掉
AM收到RM的回复后,会首先清空已经完成的Container,然后通过ContainerManagementProtocol通知NM来启动申请下来的Container,如果 该NM是第一次启动该job的Container,则先从HDFS下载Container所需 要的文件,然后再启动Container,否则直接启动
NM会通过ResourceTracker定期向RM汇报心跳,心跳内容有:当前NM 上的Container状态,依旧存活的application状态,NM健康状态等,RM收 到心跳后会更新NMLivelinessMonitor,否则超过yarn.nm.liveness-mon itor.expiry-interval-ms时间RM就会认为NM跪了
RM回复给NM的内容有:需要清空的Container,需要清空的application 等
几点注意:
Container的启动除了AM的启动是RM命令NM启动外,其余的Container 都是由AM命令NM的
Container的清除的时候RM和AM都可以命令NM清除
Container的意外终止是NM通过心跳告诉RM,RM再告诉AM,至于AM 收到消息后如何处理,就由AM自己的逻辑控制,可以选择直接终止该 Container或者重启
NM和RM每次心跳都会触发一次资源分配,只不过这次资源分配完成后就会放入到一个数据结构中,等待下一次AM和RM心跳的时候再返回给AM
NM下载Container所需资源的时候并不是所有的Container都会去下载, 而是当下NM第一个启动的Container去下载,剩下的Container复用
以上是关于YARN之作业提交流程的主要内容,如果未能解决你的问题,请参考以下文章