Yarn通过两个 守护线程提供核心服务:ResourceManager,管理集群所有资源的切分以及作业的调度与监控;NodeManager,运行在集群所有节点上,启动并监控容器的运行状况,并负责向ResourceManager汇报。
在linux上,hadoop是通过cgroup技术实现container资源隔离的。
下面有两张图,都是一个作业在yarn中运行流程,不过 我觉得第二张图更加清晰易懂,第一张图来自于hadoop权威指南。
、
根据这两张图来说明下一个作业在yarn中运行流转过程。
在yarn上运行一个application:
1. client首先会连接RM,请求运行一个AM(ApplicationMaster负责单个应用程序的管理,监控task的执行) .
2. RM会寻找一个可以运行 AM的 容器的节点,并启动AM。
3. AM通过heartbeat向RM 申请资源。严格的讲,一个application只会运行一次AM。它可以在container简单的运行一个计算,也可以向RM申请更多的资源,运行分布式的计算。
4. 当AM申请到更多的资源时,便会与对应的NM通信,要求其启动任务。
5. 各个任务通过RPC协议向AM汇报自己的状态和进度。当程序运行完毕后,AM向RM注销并关闭自己。