1、什么是YARN?
YARN是"Yet Another Resource Negotiator"的缩写,顾名思义是Hadoop集群中资源管理的工具,属于Hadoop生态中的基础组件之一。其他的基础组件可以翻看下前两篇:Hadoop从入门到放弃系列------HDFS,Hadoop从入门到放弃系列------MapReduce
2、为什么引入YARN?
在Hadoop v1.0时代,作业调度全由MapReduce来完成,方式如下图:
刚开始没什么问题,但随着Hadoop集群的规模扩大和作业量的极具上升,这种模式中Job Tracker就成了瓶颈(IBM在一片论文中给出的Yahoo!的最佳实践是5000个节点集群和40000个作业的并发);并且这种模式计算资源的使用效率也不高。
为了解决上述这些问题,YARN应运而生,取代MapReduce部分功能:负责资源的管理和任务的调度;这一引入可不得了,使得整个Hadoop生态发生了革命性的变化,变得更加灵活、弹性和高效,原因下面会讲到。
2013年第一季度,Yahoo! 使用YARN后,集群规模由40,000所见到32,000个节点,但每月的作业并发量却实现了翻翻达到2600万
3、YARN简介
Hadoop v1.0 vs Hadoop v2.0
进入Hadoop v2.0时代后,除了MapReduce的计算框架,Hadoop能支持更多的其他框架了,例如:Spark实时计算框架,Hive类SQL框架,HBase noSQL框架等,这全归功于YARN,将资源管理和任务调度从MapReduce中剥离出来,Hadoop生态才开始变得开放、繁荣起来。
4、YARN组件
YARN的架构如下,包含Resource Manager,Node Manager,Application Master,Container四个组件
4.1 Resource Manager
-
资源分配的最高权威,一个Hadoop集群只会有一个acitve的Resource Manager
-
它本身并不处理请求,只是当收到请求后转给真正处理请求的相关节点
-
当出现资源争抢时,它是最终的仲裁者,决定可用资源的分配
-
根据一定的条件来优化整个集群资源的使用效率
Resource Manager有两个主要的组件
- Scheduler
只负责调度,监控及跟踪应用状态的活一概不干;(术业有专攻)
在出现硬件故障或任务跑失败时,它不保证会重跑任务;(任性,Application Manager帮忙)
目前提供两种可选插件:Capacity Scheduler和Fair Scheduler
- Application Manager
- 接收Client端提交的作业
- 为Application Master启动提供资源
- 管理在集群中运行的Application Master,并在任务失败时重新启动Application Master Container
4.2 Node Manager
-
Node Manager是YARN中每个节点上的代理,它管理Hadoop集群中单个计算节点
-
Node Manager会定期向Resource Manager发送心跳信息来更新node的健康状态
-
Container的全生命周期管理,监控Container中资源(cpu, mem等)的使用情况
-
管理日志
4.3 Application Master
- 每一个运行在YARN上的应用程序都被唯一的一个Application Master管理
- Application Master负责和Resource Manager Scheduler协商资源,和Node Manager一起工作来运行、管理相应的任务
- Resource Manager 为 Application Master分配Containers,这些Containers将会用来运行任务;Application Master也会追踪Containers的状态,监控Containers的运行进度
- 向Resource Manager发送自己的心跳信息来更新自己的健康状态和最新的资源需求
- 当Container运行完成, Application Master 将会向 Resource Manager注销这个容器;如果是整个作业运行完成,其也会向 Resource Manager 注销自己,这样这些资源就可以分配给其他的应用程序使用了
4.4 Container
- Container是某个节点上物理资源的集合,这些资源包括:内存, CPU核心和磁盘等
- Container授予 Application Master使用特定主机的特定数量资源的权限
- Application Master也是在Container中运行,其在应用程序分配的第一个容器中运行