关于YARN
Apache YARN(Yet Another Resource Negotiator)是Hadoop的集群资源管理系统.YARN在Hadoop2版本后引入,原因在于Hadoop1版本的数据处理和资源调度主要依赖Map Reduce完成,JobTracker负责资源管理和程序调度,压力较大.即便YARN的最初目的是为了改善MapReduce的实现,但它具有足够的通用性,同样可以支持其他的分布式计算.
YARN提供请求和使用集群资源的API,但这些API很少直接用于用户代码.相反,用户代码中用的是分布式计算框架提供的更高层API,这些API建立在YARN上且向用户隐藏了资源管理细节.
YARN应用运行机制
YARN的基本架构核心组件:
- YARN的架构是master/slaves的主从架构:
(1)master:ResourceManager->全局资源管理
负责集群全局统一的资源管理、调度、分配
(2)slave:NodeManager->节点资源管理器
启动了NodeManager进程的节点
负责管理节点的资源及使用情况
-
YARN核心组件(包含ResourceManager和NodeManager)
(1)ApplicationMaster
(2)Container
-
YARN通过两类长期运行的守护进程提供自己的核心服务:管理集群上资源使用的资源管理器(resource manager),运行在集群中所有节点上且能够启动和监控容器(container)的节点管理器(node managger).
-
- ResouceManager
(1)ResourceManager组成
ResourceScheduler->资源调度器,根据节点的容量、队列情况,为应用程序分配资源
Application Manager->应用程序管理器,负责接受Client端传输的job请求
(2)ResourceManager功能
处理客户端请求
监控NodeManager
启动和监控ApplicationMaster,进行必要的重启
整个系统的资源分配和调度
-
- NodeManager
(1)NodeManager功能
本节点上的资源管理和任务管理
定时向ResourceManager汇报本节点上的资源使用情况和各个Container的运行情况
接收和处理来自ResourceManager的Container启动和停止的各种命令
处理来自ApplicationMaster的指令,比如启动MapTask和ReduceTask指令
-
- Container
Container是YARN中的资源抽象,封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等
Container类似于一个虚拟机,可以在上面执行任务
-
- ApplicationMaster
(1)ApplicationMaster功能
每个应用程序对应一个ApplicationMaster,负责单个应用程序的管理
负责数据切分
为应用程序向ResourceManager申请资源(Container),并分配内部任务(MapTask和ReduceTask)
与NodeManager通信来启动/停止任务,Task都是运行在Container中的
负责任务的监控和容错,当某些Task运行出错,进行容错处理
-
为了在YARN上运行一个应用,首先,客户端联系资源管理器,要求它运行一个application master 进程.然后,资源管理器找到一个能够在容器中启动application master的节点管理器.application master一旦运行起来后能做些什么依赖于应用本身.有可能是在所处的容器中简单地运行一个计算,并将结果返回给客户端;或者向资源管理器请求更多的容器,以用于运行一个分布式计算.
-
YARN上提交MapReduce程序
-
- 运行框架自带的MapReduce程序
(1)Jar位置
$HADOOP_HOME/share/hadoop/mapreduce
(2)Jar名称
hadoop-mapreduce-examples-2.6.0-cdh5.14.2.jar
- 运行框架自带的MapReduce程序
-
- 执行WordCount程序
hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.14.2.jar wordcount /user/data /user/out
-
- 使用YARN WebUI查看任务执行情况
YARN整体资源情况
Mapper运行情况详细信息
Reducer运行情况详细信息
任务历史信息
- 使用YARN WebUI查看任务执行情况
YARN与MapReduce1相比
MapReduce1指代Hadoop初始版本中的MapReduce分布式执行框架
MapReduce1中,有两类守护进程控制着作业执行过程:一个jobtracker及一个或多个tasktracker.jobtracker通过调度tasktracker上运行的任务来协调所有运行在系统上的作业.tasktracker在运行任务的同时将运行进度报告发送给jobtracker,jobtracker由此记录每项任务的整体进度情况.如果其中一个任务失败,jobtracker可以在另一个tasktracker节点上重新调度该任务.
- MapReduce1和Yarn在组成上的比较
MapReduce1 | YARN |
---|---|
Jobtracker | 资源管理器,application master,时间轴服务器 |
Tasktracker | 节点管理器 |
Slot | 容器 |
- YARN在解决MapReduce1的局限性的同时,使用YARN的好处包括:
(1).可扩展性(Scalability)
YARN可以在更大规模的集群上运行,主要利用了其资源管理器和application master分离的架构优点
(2).可用性(Avaliability)
当服务守护进程失败时,通过为另一个守护进程复制接管工作所需的状态以便其继续提供服务,从而可以获得高可用性(HA,High availability).
由于YARN中jobtracker在资源管理器和application master之间进行了职责划分,高可用的服务随之成为一个分而治之问题:先为资源管理器提供高可用性,再为YARN应用(针对每个应用)提供高可用性.
(3).利用率(Utilization)
YARN中,一个节点管理器管理一个资源池,而不是指定的固定数目的slot.YARN上运行的MapReduce不会出现由于集群中仅有map slot可用导致reduce任务必须等待的情况,而MapReduce1则会有这样的问题.更进一步,YARN中的资源时精细化管理,这样一个应用能够按需请求资源.
(4).多租户(Multitenancy)
在某种程度上,YARN的最大优点在于向MapReduce以外的其他类型的分布式应用开放了Hadoop.用户甚至可以在同一个YARN集群上运行不同版本的MapReduce,这使得升级MapReduce的过程更加好管理.
YARN中的调度
- 调度选项
FIFO:先进先出调度器
Capacity Scheduler:容量调度器
Fair Scheduler:公平调度器
FIFO调度器的优点是,简单易懂,不需要任何配置,但是不适合共享集群.大的应用会占用集群中的所有资源,所以每个应用必须等待直到轮到自己才行.
在一个共享集群中,更适合使用容量调度器或公平调度器.与FIFO调度器相比,容量调度器大作业执行的时间要长.
使用公平调度器时,不需要预留一定量的资源,因为调度器会在所有运行的作业之间动态平衡资源.
YARN常用命令
- 任务管理
(1)查看正在运行的任务
yarn application -list
(2)杀掉正在运行的任务
yarn application -kill 任务id - 节点管理
(1)查看节点列表
yarn node -list
(2)查看节点状态
yarn node -status 节点ID
(参考书目:Hadoop权威指南 第四版 Tom White著)