yarn产生的背景
mapreduce本身存在一些问题
- jobTracker单点故障问题,如果Hadoop集群的jobTracker挂掉,则整个分布式集群都不能使用了
- jobTracker承受的访问压力大,影响系统的性能,扩展性
- 不支持mapreduce之外的计算框架,比如storm、spark、flink等
YARN定义
yarn是hadoop2.0版本新引入的资源管理系统
YRAN的基本架构

yarn的两个组件
ResourceManager
负责整个集群的资源管理和调度
处理客户端请求
启动和监控ApplicationMaster
监控nodemanager
NodeManager
管理yarn集群中的每个节点
管理单个节点上的资源
处理来自ResourceManager的命令
处理来自ApplicationMaster的命令
ApplicationMaster
工作模式
yarn的工作模式属于master/slave模式,ResourceManager是yarn的master,NodeManager是yarn中的slave,ApplicationMaster则相当于二者之间的媒介,ResourceManager下达命令给ApplicationMaster,ApplicationMaster将命令传输给NodeManager执行
ApplicationMaster:负责应用程序相关事务
主要作用:负责数据的切分,为应用程序申请资源并分配给内部的任务、任务的监管与容错
Continer
对多任务运行环境的抽象,包括cpu、内存等多维度资源以及环境变量,启动命令等任务的相关环境
YARN的工作流程

- mapreduce程序提交到客户端所在的节点。
- Yarnrunner 向 Resourcemanager 申请一个 Application。
- Resourcemanager 将该应用程序的资源路径(存储切片、jar程序的位置)和jobId返回给 yarnrunner。
- 该程序将运行所需资源提交到 HDFS 上。
- 程序资源提交完毕后,申请运行 mrAppMaster。
- RM 将用户的请求初始化成一个 task。
- 其中一个 NodeManager 领取到 task 任务。
- 该 NodeManager 创建容器 Container,并产生 MRAppmaster。
- Container 从 HDFS 上拷贝资源到本地。
- MRAppmaster 向 RM 申请运行 maptask 资源。
- RM 将运行 maptask 任务分配给另外两个 NodeManager,另两个 NodeManager 分
别领取任务并创建容器。
- MR 向两个接收到任务的 NodeManager 发送程序启动脚本,这两个 NodeManager
分别启动 maptask,maptask 对数据分区排序。
- MrAppMaster 等待所有 maptask 运行完毕后,向 RM 申请容器,运行 reduce task。
- reduce task 向 maptask 获取相应分区的数据。
- 程序运行完毕后,MR 会向 RM 申请注销自己。

