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. Matlab实用技巧

    1  Matlab Cell 编程模式 在一个长长的脚本m文件中,可能需要对其中的一段反复修改,查看执行效果,这时,cell模式就非常有用了.cell模式相当于将其中的代码拷贝到命令窗口中运行.两个% ...

  2. java_多线程4种实现方式

    为了34月份回学校春招,不得不复习一下线程的四种实现方式,希望春招时能找到更好的公司,加油! 1.继承Thread类 class MyThread extends Thread{ private in ...

  3. 康盛(discuz )牛逼的PHP加解密算法函数

    1.前言 康盛的 authcode 函数很牛叉,是一个具有有效期的加解密函数,同一个字符每次加密所产生的结果都是不一致的,并且可以自定义设置过期时间. 设计原理:authcode 是使用异或运算进行加 ...

  4. OpenStreetMap数据清洗(SQL&MonogoDB版本)

    目标:通过网上下载的OpenStreetMap.xml数据格式,将该文件的格式进行统计,清洗,并导出成CSV格式的文件,最后倒入到SQLite中 本案例中所需的包 import csv import ...

  5. Power shell 重启IIS

    最近根据项目需要写了一段power shell的代码 ,主要功能是批量重启IIS 具体的 Power shell 服务如下: write-output 'Restarting IIS servers ...

  6. php应用pack函数转unicode为utf8

    因为时常用到json_encode去处理数据,json_encode在处理字符串遇上中文时,会把中文转换成\u5371这种格式的字符串,如果想让它能正常显示中文,则可以用pack打包函数进行处理. 以 ...

  7. AOP 切面编程------JoinPoint ---- log日志

    AOP 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件 ...

  8. canvas-海底气泡(面向对象编程)

    需求:自动生成若干气泡,从海底往上浮: 1.基本的HTML结构: <!DOCTYPE html> <html> <head lang="en"> ...

  9. Go笔记-函数

    [函数定义]         func function_name([parameter1 type,parameter2 type])[return_value1 return_type1,retu ...

  10. 编程岗位电话面试问答Top 50[转]

    原文链接:http://blog.jobbole.com/84618/ 1. 从哈希表,二叉树和链表中取元素的时间复杂度?如果你有数百万记录呢? 哈希表的时间复杂度为O(1),二叉树为O(logN) ...