- 简介
- 重要概念
- 执行过程
- YARN的高可用
简介
Yarn 是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而 MapReduce 等运算程序则相当于运行于操作系统之上的应用程序
重要概念
- yarn 并不清楚用户提交的程序的运行机制
- yarn 只提供运算资源的调度(用户向 yarn 申请资源,yarn 就负责分配资源)
- yarn 中的主管角色叫 ResourceManager
- yarn 中具体提供运算资源的角色叫 NodeManager
- yarn 于运行用户程序完全解耦,意味着 yarn 上可以运行各种类型的分布式运算程序(MapReduce 只是其中一种)
- spark 等运算框架都可以整合在 yarn 上运行,只要他们各自的框架中有符合 yarn 规范的资源请求机制即可
执行过程
- 客户端通过 YarnRunner 向 RM 提交 job 任务。申请运行一个 MR 程序,RM 返回一个 job id,资源提交路径
- 客户端提交 MR 相关的资源文件:job.xml,job.jar,job.split,job.splitmateinfo
- 客户端通知 RM 资源提交完毕,RM 初始化任务创建一个 Container,RM 随机在一台 NM 上启动一个 MRAppMaster,MRAppMaster 向 RM 申请资源分配容器(CPU,RAM,job 等资源)
- 在 NM 上启动 MapTask,Task 在执行的时候会向 MRAppMaster 汇报进度和状态,MRAppMaster 会向 RM 注册,用户可以通过 RM 查看当前作业的状态
- MRAppMaster 会向 RM 为各个任务申请资源,并监控状态直到任务完成
- MRAppMaster 等待所有 MapTask 执行完毕,再启动 ReduceTask
- 所有任务完成后,MRAppMaster 通知 RM 回收资源
YARN的高可用
ResourceManager:基于 Zookeeper 实现高可用机制,避免单节点故障
NodeManager:执行失败后,ResourceManager 将失败任务告诉对应的 ApplicationMaster,由 ApplicationMaster 来决定如何处理失败的任务
ApplicationMaster:执行失败后,由 ResourceManager 负责重启;ApplicationMaster 需处理内部的容错问题,并保存已经运行完成的 Task,重启后无需重新运行