Apache Hadoop YARN (Yet AnotherResource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。
1 Hadoop2.0相对Hadoop1.0做的改进
(1) 针对Hadoop1.0单NameNode制约HDFS的扩展性问题,提出HDFS Federation,它让多个NameNode分管不同的目录进而实现访问隔离和横向扩展,同时解决了NameNode单点故障问题;
(2) 针对Hadoop1.0中的MapReduce在扩展性和多框架支持等方面的不足,它将JobTracker中的资源管理和作业控制分开,分别由ResourceManager(负责所有应用程序的资源分配)和ApplicationMaster(负责管理一个应用程序)实现,即引入了资源管理框架Yarn;
(3) hadoop2.0相对hadoop1.0没有JobTracker和TaskTracker进程,多了ResourceManager和NodeManager进程;
(4) Hadoop1.0里面,map和reduce任务必须提前申请到slot;Hadoop2.0里面,没有slot概念,统一变成container容器;
(5) MapReduce经历了完全重构,不再是Hadoop的核心组件,而成为Yarn上的一种应用框架(可替代:storm、spark。。。多种计算框架运行);
(6) 在Yarn中,Job的概念换成了application;
(7) 重构的根本思想:将JobTracker两个主要的功能分离成单独的组件,这两个功能是资源管理和任务调度/监控。
2 Yarn 特点
(1) 良好的扩展性、高可用;
(2) 对多种类型的应用进行统一管理和调度;
(3) 自带多种用户调度器,适合共享集群环境;
(4) 相比传统模式,提供了资源利用率、降低运维成本和数据共享成本。
3 系统架构
(1) ResourceManager(RM)
a) 接受客户端请求,资源分配分配;
b) 管理每一个Job所属的Application的各种状态;
c) 监控NN各种状态(NN心跳上报);
d) 有一个可插拔的调速器组件Scheduler,调度的资源就是Container;
e) scheduler不负责应用程序的监控和状态跟踪,不保证任务失败情况下对task的重启。
(2) ApplicationMaster(AM)
a) 是一个普通的Container的身份运行,不是实时都存在的;
b) 负责一个job生命周期内所有工作,job完成,AM消失;
c) 与RM协商实例所需的Container资源;
d) 与NN协商合适的Container,和进行Container监控;
e) AM可以是MapReduce任务、storm任务、spark任务等。
(3) NodeManager(NM)
a) 是slave进程,类似TaskTracker的角色,有多个;
b) 处理来自RM的任务请求;
c) 接收并处理来自ApplicationMaster的Container启动、停止等各种请求;
d) 负责启动应用程序的Container(执行应用程序的容器),并监控他们的资源使用情况(CPU、内存、磁盘和网络),并报告给RM;
e) 总的来说,在单节点上进行资源管理和任务管理。
(4) Container
a) 是任务运行环境的抽象封装;
b) Container只是使用NM上指定资源的权利;
c) AM必须向NM提供更多的信息来启动Container;
d) 描述任务的运行资源(节点、内存、cpu)、启动命令和运行环境。
4 执行流程
(1) Client请求ResourceManager运行一Application Master实例(step1)
(2) Resource Manager选择一个NodeManager,启动一个Container并运行Application Master实例(step 2a、step 2b)
(3) Application Master根据实际需要向ResourceManager请求更多的Container资源(step 3);
(4) Application Master通过获取到的Container资源执行分布式计算(step4a、step 4b);
(5) Application Master向NodeManager提供更多Container的信息;
(6) NodeManager启动Container。
5 容错
(1) RM挂掉
单点故障,新版本可以基于Zookeeper实现HA高可用集群,可通过配置进行设置准备RM,主提供服务,备同步主的信息,一旦主挂掉,备立即做切换接替进行服务
(2) NM挂掉
当NM挂了,会通过心跳方式通知RM,RM将情况通知对应AM,AM作进一步处理;
(3) AM挂掉
若挂掉,RM负责重启,其实RM上有一个RMApplicationMaster,是AM的AM,上面保存已经完成的task,若重启,无需重新运行已经完成的task。
6 Yarn调度器
(1) FIFO Scheduler:按提交顺序,最简单,大应用占用所有集群资源,不适合共享集群;
(2) Capacity Scheduler:专有队列运转小任务,预先占一定集群资源,导致大任务执行时间落后于FIFO;
(3) Fair Scheduler:不需要预占,动态调整,公平共享。