Hadoop 三剑客之 —— 集群资源管理器 YARN

1、hadoop yarn 简介

Apache YARN (Yet Another Resource Negotiator) 是hadoop 2.0 引入的集群资源管理系统。用户能够将各类服务框架部署在YARN上,由YARN进行统一地管理和资源分配。html

2、YARN架构

1. ResourceManager

ResourceManager一般在独立的机器上之后台进程的形式运行,它是整个集群资源的主要协调者和管理者。ResourceManager负责给用户提交的全部应用程序分配资源,它根据应用程序优先级、队列容量、ACLs、数据位置等信息,作出决策,而后以共享的、安全的、多租户的方式制定分配策略,调度集群资源。node

2. NodeManager

NodeManager是YARN集群中的每一个具体节点的管理者。主要负责该节点内全部容器的生命周期的管理,监视资源和跟踪节点健康。具体以下:git

  • 启动时向ResourceManager注册并定时发送心跳消息,等待ResourceManager的指令;
  • 维护Container的生命周期,监控Container的资源使用状况;
  • 管理任务运行时的相关依赖,根据ApplicationMaster的须要,在启动Container以前将须要的程序及其依赖拷贝到本地。

3. ApplicationMaster

在用户提交一个应用程序时,YARN会启动一个轻量级的进程ApplicationMasterApplicationMaster负责协调来自 ResourceManager的资源,并经过NodeManager 监视容器内资源的使用状况,同时还负责任务的监控与容错。具体以下:github

  • 根据应用的运行状态来决定动态计算资源需求;
  • ResourceManager申请资源,监控申请的资源的使用状况;
  • 跟踪任务状态和进度,报告资源的使用状况和应用的进度信息;
  • 负责任务的容错。

4. Contain

Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。当AM向RM申请资源时,RM为AM返回的资源是用Container表示的。YARN会为每一个任务分配一个Container,该任务只能使用该Container中描述的资源。ApplicationMaster可在Container内运行任何类型的任务。例如,MapReduce ApplicationMaster请求一个容器来启动 map 或 reduce 任务,而Giraph ApplicationMaster请求一个容器来运行 Giraph 任务。shell

3、YARN工做原理简述

  1. Client提交做业到YARN上;apache

  2. Resource Manager选择一个Node Manager,启动一个Container并运行Application Master实例;缓存

  3. Application Master根据实际须要向Resource Manager请求更多的Container资源(若是做业很小, 应用管理器会选择在其本身的JVM中运行任务);安全

  4. Application Master经过获取到的Container资源执行分布式计算。服务器

4、YARN工做原理详述

1. 做业提交

client调用job.waitForCompletion方法,向整个集群提交MapReduce做业 (第1步) 。新的做业ID(应用ID)由资源管理器分配(第2步)。做业的client核实做业的输出, 计算输入的split, 将做业的资源(包括Jar包,配置文件, split信息)拷贝给HDFS(第3步)。 最后, 经过调用资源管理器的submitApplication()来提交做业(第4步)。网络

2. 做业初始化

当资源管理器收到submitApplciation()的请求时, 就将该请求发给调度器(scheduler), 调度器分配container, 而后资源管理器在该container内启动应用管理器进程, 由节点管理器监控(第5步)。

MapReduce做业的应用管理器是一个主类为MRAppMaster的Java应用,其经过创造一些bookkeeping对象来监控做业的进度, 获得任务的进度和完成报告(第6步)。而后其经过分布式文件系统获得由客户端计算好的输入split(第7步),而后为每一个输入split建立一个map任务, 根据mapreduce.job.reduces建立reduce任务对象。

3. 任务分配

若是做业很小, 应用管理器会选择在其本身的JVM中运行任务。

若是不是小做业, 那么应用管理器向资源管理器请求container来运行全部的map和reduce任务(第8步)。这些请求是经过心跳来传输的, 包括每一个map任务的数据位置,好比存放输入split的主机名和机架(rack),调度器利用这些信息来调度任务,尽可能将任务分配给存储数据的节点, 或者分配给和存放输入split的节点相同机架的节点。

4. 任务运行

当一个任务由资源管理器的调度器分配给一个container后,应用管理器经过联系节点管理器来启动container(第9步)。任务由一个主类为YarnChild的Java应用执行, 在运行任务以前首先本地化任务须要的资源,好比做业配置,JAR文件, 以及分布式缓存的全部文件(第10步。 最后, 运行map或reduce任务(第11步)。

YarnChild运行在一个专用的JVM中, 可是YARN不支持JVM重用。

5. 进度和状态更新

YARN中的任务将其进度和状态(包括counter)返回给应用管理器, 客户端每秒(通mapreduce.client.progressmonitor.pollinterval设置)向应用管理器请求进度更新, 展现给用户。

6. 做业完成

除了向应用管理器请求做业进度外, 客户端每5分钟都会经过调用waitForCompletion()来检查做业是否完成,时间间隔能够经过mapreduce.client.completion.pollinterval来设置。做业完成以后, 应用管理器和container会清理工做状态, OutputCommiter的做业清理方法也会被调用。做业的信息会被做业历史服务器存储以备以后用户核查。

5、提交做业到YARN上运行

这里以提交Hadoop Examples中计算Pi的MApReduce程序为例,相关Jar包在Hadoop安装目录的share/hadoop/mapreduce目录下:

# 提交格式: hadoop jar jar包路径 主类名称 主类参数
# hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.15.2.jar pi 3 3

参考资料

  1. 初步掌握Yarn的架构及原理

  2. Apache Hadoop 2.9.2 > Apache Hadoop YARN

更多大数据系列文章能够参见我的 GitHub 开源项目: 大数据入门指南

相关文章
相关标签/搜索