Yet Another Resource Negotiator

Apache Hadoop YARN 是新一代资源管理调度框架,主要针对 Hadoop MapReduce 1.0 的缺陷做出了改进

MapReduce 1.0 的缺陷

MapReduce 1.0 采用 Master/Slave 架构设计,包括一个 JobTracker 和若干个 TaskTracker

前者负责作业调度和资源管理,后者负责执行 JobTracker 指派的具体任务

这种架构设计有以下的缺陷

  1. 单点故障问题(single point of failure),单一的 JobTracker 负责所有 MapReduce 作业的调度

  2. JobTracker 负载过重,JobTracker 既要负责作业调度和失败回复,又要负责资源管理分配,导致一旦 MapReduce 任务过多,JobTracker 需要的内存开销就过大,容易引起 JobTracker 失败,因此 MapReduce 1.0 支持的主机数目的上限仅约为 4000 个

  3. TaskTracker 的内存溢出,在 TaskTracker 端,资源的分配并不考虑 CPU 和内存的实际使用情况,而是根据 MapReduce 任务的个数来分配资源,当两个具有较大内存消耗的任务分配到同一个 TaskTracker 上时,容易发生内存溢出

  4. 资源的不合理划分,CPU 和内存的资源被强制等量划分成多个插槽(slot),插槽又被进一步划分为 Map 插槽和 Reduce 插槽两种,分别提供给 Map 任务和 Reduce 任务使用,彼此之间不能使用分配给对方的插槽。这会导致当 Map 任务已经用完 Map 插槽时,即使系统中还有大量空闲的 Reduce 插槽,也不能拿来运行 Map 任务,反之亦然。从而当系统中一种任务满负荷,另一种几乎空闲时,会造成资源的浪费

YARN 的设计思路

YARN 的基本设计思路是放权,即通过把原 JobTracker 的三个主要功能,资源管理,任务调度和任务监控进行拆分,分别交给不同的新组件去管理,来改变原来 JobTracker 负担过重的情况

YARN 包括 ResourceManager,ApplicationMaster 和 NodeManager

ResourceManager 负责资源管理,ApplicationMaster 负责任务调度和监控,NodeManager 负责具体执行任务

此前在 Hadoop 1.0 中,MapReduce 1.0 既是一个计算框架,也是一个资源管理调度框架,到了 Hadoop 2.0 以后,MapReduce 1.0 的资源管理调度功能分离重构为 YARN,YARN 是一个纯粹的资源管理调度框架,而原来的 MapReduce 变为 MapReduce 2.0,是一个运行在 YARN 上的纯粹计算框架,不再自己负责资源管理调度,转而由 YARN 提供资源管理调度服务

YARN 的体系结构

组件(Component) 功能
ResourceManager ①处理客户端请求 ②启动/监控 ApplicationMaster ③监控 NodeManager ④资源分配与调度
ApplicationMaster ①申请资源给应用程序,并把内部任务分配给应用程序 ②任务的调度,监控和容错
NodeManager ①单个节点上的资源管理 ②处理来自 ResourceManager 的命令 ③处理来自 ApplicationMaster 的命令

YARN 中以容器(Container)作为动态资源分配单位,相比 MapReduce 1.0 使用基于任务数目的插槽,容器内封装了一定数量的 CPU,内存和磁盘等资源,从而限定每个应用程序可以使用的资源量

YARN 的工作流程

下面以在 YARN 框架中执行一个 MapReduce 程序,从提交到完成作为例子

  1. 用户编写客户端应用程序,向 YARN 提交应用程序,提交的内容包括 ApplicationMaster 程序,启动 ApplicationMaster 的命令和用户程序等

  2. YARN 中的 ResourceManager 负责接收和处理来自客户端的请求,接到客户端应用程序请求后,ResourceManager 里面的调度器回味应用程序分配一个容器。同时,ResourceManager 的应用程序管理器会与该容器所在的 NodeManager 通信,为该应用程序在该容器中启动一个 ApplicationMaster

  3. ApplicationMaster 被创建后首先向 ResourceManager 注册,从而使得用户可以通过 ResourceManager 来直接查看应用程序的运行状态,步骤 4 到 7 是应用程序的执行步骤

  4. ApplicationMaster 采用轮询的方式通过 RPC(remote procedure call)协议向 ResourceManager 申请资源

  5. ResourceManager 以容器的形式向提出申请的 ApplicationMaster 分配资源,ApplicationMaster 申请到资源后,与该容器所在的 NodeManager 通信,要求它启动任务

  6. 当 ApplicationMaster 要求容器启动任务时,ApplicationMaster 会为任务设置好运行环境,包括环境变量,jar 包和二进制程序等,然后将任务启动命令写到一个脚本中,最后通过在容器中运行该脚本来启动任务

  7. 各个任务通过某个 RPC 协议向 ApplicationMaster 汇报自己的状态和进度,让 ApplicationMaster 随时掌握任务运行状态,以便在任务失败时重启任务

  8. 应用程序运行完成后,ApplicationMaster 向 ResourceManager 的应用程序管理器注销并关闭自己

[Note] Yet Another Resource Negotiator的更多相关文章

  1. Hadoop 2.0 中的资源管理框架 - YARN(Yet Another Resource Negotiator)

    1. Hadoop 2.0 中的资源管理 http://dongxicheng.org/mapreduce-nextgen/hadoop-1-and-2-resource-manage/ Hadoop ...

  2. YARN - Yet Another Resource Negotiator

    http://www.socc2013.org/home/program http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-ya ...

  3. spark 笔记 4:Apache Hadoop YARN: Yet Another Resource Negotiator

    spark支持YARN做资源调度器,所以YARN的原理还是应该知道的:http://www.socc2013.org/home/program/a5-vavilapalli.pdf    但总体来说, ...

  4. The Qt Resource System

    The Qt Resource System The Qt resource system is a platform-independent mechanism for storing binary ...

  5. Hadoop 3.1.2(HA)+Zookeeper3.4.13+Hbase1.4.9(HA)+Hive2.3.4+Spark2.4.0(HA)高可用集群搭建

    目录 目录 1.前言 1.1.什么是 Hadoop? 1.1.1.什么是 YARN? 1.2.什么是 Zookeeper? 1.3.什么是 Hbase? 1.4.什么是 Hive 1.5.什么是 Sp ...

  6. Migrating from MapReduce 1 (MRv1) to MapReduce 2 (MRv2, YARN)...

    This is a guide to migrating from Apache MapReduce 1 (MRv1) to the Next Generation MapReduce (MRv2 o ...

  7. YARN(MapReduce 2)运行MapReduce的过程-源码分析

    这是我的分析,当然查阅书籍和网络.如有什么不对的,请各位批评指正.以下的类有的并不完全,只列出重要的方法. 如要转载,请注上作者以及出处. 一.源码阅读环境 需要安装jdk1.7.0版本及其以上版本, ...

  8. Hadoop3.x 三大组件详解

    Hadoop Hadoop适合海量数据分布式存储和分布式计算 运行用户使用简单的编程模型实现跨机器集群对海量数据进行分布式计算处理 1. 概述 1.1 简介 Hadoop核心组件 HDFS (分布式文 ...

  9. Hadoop学习笔记—22.Hadoop2.x环境搭建与配置

    自从2015年花了2个多月时间把Hadoop1.x的学习教程学习了一遍,对Hadoop这个神奇的小象有了一个初步的了解,还对每次学习的内容进行了总结,也形成了我的一个博文系列<Hadoop学习笔 ...

随机推荐

  1. 《struts2》:指定多个配置文件和默认Action

    转载:http://m.blog.csdn.net/article/details?id=51212968

  2. PDO错误调试

    在服务器上用PDO操作数据库,怎么都获取不到数据,query语句返回null,但是同样的代码在本地运行无误.SO,开始找bug. <?php $host='localhost'; $dbname ...

  3. 【转】 SED多行模式空间

    1. sed执行模板=sed '模式{命令1;命令2}' 即逐行读入模式空间,执行命令,最后输出打印出来 2. 为方便下面,先说下p和P,p打印当前模式空间内容,追加到默认输出之后,P打印当前模式空间 ...

  4. ATS缓存数据结构

    ATS缓存数据结构 HttpTunnel类 数据传输驱动器(data transfer driver),包含一个生产者(producer)集合,每个生产者连接到一个或是多个消费者(comsumer). ...

  5. java web 整合开发王者归来学习总结

    第一章java web开发概述 胖客户端CS,瘦客户端BS(Browser) 网址请求---服务器处理响应-----返回结果-----浏览器显示 CGI可以动态生成页面,但是每个进程都要启动一个CGI ...

  6. SDP(4):ScalikeJDBC- JDBC-Engine:Updating

    在上一篇博文里我们把JDBC-Engine的读取操作部分分离出来进行了讨论,在这篇准备把更新Update部分功能介绍一下.当然,JDBC-Engine的功能是基于ScalikeJDBC的,所有的操作和 ...

  7. Storm 对 0.10.x 版 Kafka之commit offsets

    由于 0.10.x 版 Kafka 与 0.8.x 版有很大的变化,这种变化对下游 Storm 有非常大的影响,0.10.x 版的 Kafka 不但增加了权限管理的功能,而且还将 simple 和 h ...

  8. [Miller-Rabin & Pollard-rho]【学习笔记】

    Miller-Rabin & Pollard-rho 很久之前就学过了...今天重学一遍 利用费马小定理,但不能判断伪素数的情况 基于a的伪素数n: \(a^{n-1} \equiv 1 \p ...

  9. 用Spring Tools Suite(STS)开始一个RESTful Web Service

    spring.io官方提供的例子Building a RESTful Web Service提供了用Maven.Gradle.STS构建一个RESTFul Web Service,实际上采用STS构建 ...

  10. SDP(6):分布式数据库运算环境- Cassandra-Engine

    现代信息系统应该是避不开大数据处理的.作为一个通用的系统集成工具也必须具备大数据存储和读取能力.cassandra是一种分布式的数据库,具备了分布式数据库高可用性(high-availability) ...