Hadoop 系列(二)—— 集群资源管理器 YARN

一、hadoop yarn 简介

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

<div align="center"> <img width="600px" src="https://raw.githubusercontent.com/heibaiying/BigData-Notes/master/pictures/yarn-base.png"/&gt; </div>

二、YARN架构

1. ResourceManager

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

2. NodeManager

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

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

3. ApplicationMaster

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

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

4. Contain

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

三、YARN工作原理简述

<div align="center"> <img src="https://raw.githubusercontent.com/heibaiying/BigData-Notes/master/pictures/yarn工作原理简图.png"/&gt; </div>

  1. Client 提交作业到 YARN 上;
  2. Resource Manager 选择一个 Node Manager,启动一个 Container 并运行 Application Master 实例;
  3. Application Master 根据实际需要向 Resource Manager 请求更多的 Container 资源(如果作业很小, 应用管理器会选择在其自己的 JVM 中运行任务);
  4. Application Master 通过获取到的 Container 资源执行分布式计算。

四、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 的作业清理方法也会被调用。作业的信息会被作业历史服务器存储以备之后用户核查。

五、提交作业到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 开源项目大数据入门指南

原文地址:https://blog.51cto.com/14183932/2437890

时间: 2024-12-28 00:46:34

Hadoop 系列(二)—— 集群资源管理器 YARN的相关文章

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

一.hadoop yarn 简介 二.YARN架构 ????????1. ResourceManager ????????2. NodeManager ????????3. ApplicationMaster ????????4. Contain 三.YARN工作原理简述 四.YARN工作原理详述 五.提交作业到YARN上运行 一.hadoop yarn 简介 Apache YARN (Yet Another Resource Negotiator) 是hadoop 2.0 引入的集群资源管理系

实时计算平台中的弹性集群资源管理

本文系微博运维数据平台(DIP)在实时计算平台的研发过程中集群资源管理方面的一些经验总结和运用,主要关注以下几个问题: 异构资源如何整合? 实时计算应用之间的物理资源如何隔离? 集群资源利用率如何提高? 集群运维成本如何降低? 1. 背景 这是我们初期的一个实时计算架构,大致划分为三个部分: (1)日志收集: 使用Rsynlog.Flume.Scribe汇聚各个业务方发送过来的日志数据:如果条件允许,业务方也可以直接将数据写入Kafka. (2)日志传输: 使用Kafka作为日志收集组件与实时应

Spark集群管理器介绍

Spark可以运行在各种集群管理器上,并通过集群管理器访问集群中的其他机器.Spark主要有三种集群管理器,如果只是想让spark运行起来,可以采用spark自带的独立集群管理器,采用独立部署的模式:如果是想让Spark部署在其他集群上,各应用共享集群的话,可以采取两种集群管理器:Hadoop Yarn 或 Apache Mesos. 一.独立集群管理器 Spark独立集群管理器提供的在集群上运行应用的简单方法.要使用集群启动脚本,按照以下步骤执行即可:1.将编译好的Spark发送到集群的其他节

基于 ZooKeeper 搭建 Hadoop 高可用集群

一.高可用简介 二.集群规划 三.前置条件 四.集群配置 五.启动集群 六.查看集群 七.集群的二次启动 一.高可用简介 Hadoop 高可用 (High Availability) 分为 HDFS 高可用和 YARN 高可用,两者的实现基本类似,但 HDFS NameNode 对数据存储及其一致性的要求比 YARN ResourceManger 高得多,所以它的实现也更加复杂,故下面先进行讲解: 1.1 高可用整体架构 HDFS 高可用架构如下: 图片引用自:https://www.edure

Hadoop1.1 和Hadoop 2.4 集群安装版

目录 1 环境准备... 4 1.1 硬件配置... 4 1.2 软件... 4 1.3 网络拓扑结构... 4 1.4 系统分区... 5 1.5 虚拟机配置... 5 1.6 SSH免密码登录... 5 1.7 JDK安装... 7 2 Hadoop1.2.1安装及配置... 8 2.1 下载Hadoop安装介质... 8 2.2 解压Hadoop安装介质... 9 2.3 Hadoop配置文件... 9 2.4 复制Hadoop安装介质... 10 2.5 配置HADOOP_HOME. 1

集群资源管理与调度概要

背景知识: 很多互联网公司会有各种类型的工作任务,比如对外提供各种服务,内部的挖掘与数据管理系统. 即使内部数据系统也可能需要多种不同类型的计算系统:适应实时计算的挖掘系统.适合交互查询的系统 或者典型的批处理任务,面对多种各具特性的计算系统与框架,比较传统的资源管理方式采用的是静态资源划分方法. 静态划分优点:简单,固定的硬件资源给固定的计算框架使用,各个框架各行其是,互补干扰. 缺点:整体资源利用率不高,经常出现集群计算系统资源不足 所以需要动态的集群资源管理与调度,这方面的研究呢处于摸索期

Spark的集群管理器

上篇文章谈到Driver节点和Executor节点,但是如果想要运行Driver节点和Executor节点,就不能不说spark的集群管理器.spark的集群管理器大致有三种,一种是自带的standalone独立集群管理器,一种是依赖于Hadoop的资源调度器YARN,还有一种就是Apache项目的Mesos集群管理器. Spark 依赖于集群管理器来启动Executor节点,有时候也会依赖集群管理器来启动Driver节点.集群管理器是 Spark 中的可插拔式组件. 在集群管理器中有着主节点(

hadoop及hbase集群启停的几种方式

1.生产环境集群 2.web管理页面 hadoop web管理页面(主备) http://192.168.10.101:50070 http://192.168.10.102:50070 hbase web管理页面(主备) http://192.168.10.101:16010 http://192.168.10.102:16010 3.启动和停止服务 3.1.启动顺序 Hadoop及hbase集群启动顺序 zookeepeer->hadoop->hbase Hadoop及hbase集群关闭顺

Hadoop伪分布式集群的安装部署

一.如何为虚拟机做快照? 1.什么是快照? 快照就是对当前的虚拟机状态进行拍照,保留虚拟机当前状态的操作信息. 2.为什么要为虚拟机做快照? 第一:为克隆不同状态的虚拟机提前做准备. 第二:当对虚拟机的某些操作执行错误而且改正比较麻烦的时候,可以切换到之前正常的虚拟机状态重新进行相关的操作. 3.如何为虚拟机做快照? (1)选择要克隆的虚拟机,然后“右键”,选择“快照”,然后选择“拍摄快照”. (2)可以为快照取个名称,也可以为虚拟机当前的状态做个描述,然后点击“拍摄快照”. 4.如何转到某一特