YARNRunner的运行原理总结

之前看了那么些源码, 大致对整个Yarn的运行过程有了一个了解, 总结一下

首先每个Yarn集群都有一个Resource Manager 以及若干个NodeManager

Resource Manager主要有两个对象, 一个就是Scheduler, 还有一个就是Applications Manager ASM

Scheduler有FIFO和Fair等, 主要作用就是根据Node Manager的资源使用状况来分配container。
当然还有一种Uber模式, 具体就是满足7个条件后就会只用一个container去跑整个Job

Applications Manager主要是管理所有的Application Master的, AM创建后就和ASM注册, 后面有各种资源的请求都会通过ASM来进行

NodeManager上面会运行AppMaster, 其实AM就是一个特殊的Container, Job提交后会先创建一个AM的container, 之后通过这个AM Container去协调整个Job的运行。
NM会和Resource Manger进行心跳, 这样RM就知道每个NM的资源状况, 当有container的申请的时候就会找对应的NM去分配container, 其顺序为:
1.data所在的NM优先
2.如果1没有, 那么找同一个机架 (rack)上的NM
3.如果1,2 都没有, 那么就在集群上面随机寻找一个

ApplicationMaster是为每个Job创建的一个管理container。 他对这个Job的情况进行资源申请, container的管理, 任务的管理(和NM通信进行启动停止重跑等)
他也会和RM通信, 去要求分配各种资源

container本身的话其实就是在Node Manager上面的一个资源包, 由 Resource Manager来分配由AM来启动, 在NM上面运行。

整个YarnRunner的运行过程用下面的图来说明一下 (借用网络用图):


1.Client 提交Job Resource Manager接收
2.Resource Manager启动第一个Container--Application Master, 用来管理整个Job 以及后续的资源申请,任务控制
3.Application Master启动后向ASM注册
4.AM计算所需要的资源量, 通过ASM向RM进行申请
5.RM提供所有container的location后, AM去要求NM启动所有的container
6.NM启动container
7.每个任务向AM汇报运行情况与状态
8.Job运行完后AM向ASM注销关闭

猜你喜欢

转载自humingminghz.iteye.com/blog/2333137