Yarn概念
Yarn
是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式
的
操作系统平台
,而
MapReduce
等运算程序则相当于运行于
操作系统之上的应用程序
。
Yarn的四大组件
YARN 主要由
ResourceManager(整个集群资源的老大)
、
NodeManager(单个节点资源的老大)
、
ApplicationMaster(每个作业的老大)
和
Container(容器,负责运行MapTask、ReduceTask)
等组件构成。
ResourceManager(RM)
- 处理客户端请求,客户端请求提交一个任务,由RM来进行处理
- 监控NodeManager,监控所有节点的运行情况,有节点资源不足就进行处理
- 启动或监控ApplicationMaster,客户端提交了一个MR程序,对应启动一个ApplicationMaster,如果纸处理这个任务的节点挂了,就把这个任务交给别的节点去处理
- 资源的分配和调度
NodeManager
- 管理单个节点上的资源
- 处理来自RresourceManager的命令
- 处理来自ApplicationMaster的命令
ApplicationMaster
- 为应用程序申请资源并分配给内部任务
- 任务的监控与容错(MapTask、ReduceTask)
Container
是YARN中对资源的抽象,封装了节点上的资源(内存、CPU、磁盘、网络等),相当于一台小型计算机。
YARN工作机制
例子:我们提交一个MapReduce程序给集群进行WordCount单词统计。
1.客户端提交MapReduce程序
job.waitForCompletion(); -> 创建一个YarnRunnner ->
2.客户端向RM申请一个Application
3. RM给客户端返回一个集群路径 以及 一个应用id(Application_id)->
4. 客户端提交MapReduce作业需要的资源
- job.split,作业的切片信息
- job.xml 作业的配置参数信息
- wordcount.jar 用户的业务逻辑代码
5. 客户端告诉MR资源提交完毕,申请运行MRAppMaster
6.RM将客户端的请求初始化为一个Task
由于我们的客户端可能是多个,所以需要将每个客户端的Task都放到一个队列当中,一个一个执行。
7. NodeManager领取Task
NodeManager领取到Task后创建容器Container(任何Task都是在容器中执行)
Container启动一个MRAppMaster进程
8. 去集群上下载job运行需要的资源到本地
9. MRAppMaster再次向RM申请MapTask容器
10. MRAppMaster创建MapTask需要的容器
通过多个或一个NodeManager创建多个的容器,开启对应个数的MapTask(即使是多个MapTask也可能在同一个NodeManager的多个容器中)
11. MRAppMaster发送启动命令
MRAppMaster向新开启的NodeManager发送启动命令,启动对应的MapTask,一个MapTask对应一个YarnChild进程。
MapTask运行完毕,将数据持久化到磁盘
12. MRAppMaster创建ReduceTask需要的容器
MRAppMaster一直监控运行的执行情况,当检测到MapTask任务执行完毕之后,立即向RM申请相应数量的容器来执行ReduceTask程序,依旧是开启相应数量的容器,在容器中启动ReduceTask,这些ReduceTask对应的进程任然是YarnChild。
13. 作业完成释放资源
MRAppMaster检测到ReduceTask执行完毕,向RM申请注销自己,将资源(开启的所有NodeManager)全部释放