yarn的组件及功能(个人理解,如有错误欢迎指出)
1、ResourceManager 的主要职责在于调度,即在竞争的应用程序之间分配系统中的可用资源。
2、NodeManger 负责管理每个计算机节点的资源调度。
3、ApplicationManger 负责管理某个job
4、ResourceSchedule负责协调集群中各个应用的资源分配,保证整个集群的运行效率。
5、Container执行某个作业的容器
6、ApplicationMaster 负责与ResourceManager协商资源,并和NodeManager协同来执行和监控Container
工作流程大致分为四个阶段:
作业提交阶段:
client提交job向ResourceManger申请一个job_id,
ResourceManger收到请求后返回job_id以及资源路径(staging-dir,位于hdfs的temp中)
client收到上述信息之后,上传jar包到ResourceManger指定的位置。
client发送完jar包之后向ResourceManger汇报提交成功,并发送执行作业请求,
ResourceManger随后开始创建一个ApplicationManger来管理这个Job
作业初始化阶段:
ApplicationManger将job添加到ResourceSchedule中
当轮到job执行的时候,ResourceSchedule会通知ApplicationManger有空闲的NodeManger分配出来执行任务,
ApplicationManger调用分配给他的NodeManger开辟一个Container(容器),并在容器中启动需要执行任务的ApplicationMaster
ApplicationMaster获取client提交的作业(jar包,staging-dir),并根据分片信息生成Task(map/reduce task)
作业分配阶段:
ApplicationMaster向ResourceManger申请运行资源,ResourceManger将任务分配给空闲的NodeManger,NodeManger创建执行Task的Container(容器)。
任务运行阶段
ApplicationMaster通知所有接受到任务的NodeManger启动计算
NodeManger启动任务计算
如果这一批任务计算完成后还有新的task需要计算,则再次向ResourceManger申请新的Container进行计算,直到所有task执行完成
所有任务执行完毕后ApplicationMaster会向ResouceManger申请注销自己