Hadoop- yarn notes

Yarn基础架构

1 YARN产生背景

最早的hadoop是由hdfs和mr组成的,hdfs负责存储,mr负责计算。

1.1 MRv1的局限性

  • 扩展性差:mr中的jobTracker同时负责资源管理和作业控制两个功能,成为瓶颈。
  • 可靠性差:mr中的master是单点的
  • 资源利用率低:基于槽的资源分配模型,通常一个任务不会用完一个槽位,并且Map slot和Reduce slot无法共享
  • 无法支持多种计算框架

1.2 Yarn的诞生

传统的MR已经无法满足通用的计算需求,新的计算框架层出不穷,对于一家公司来说,希望能有一个统一的资源平台,在上面跑各种类型的计算任务,YARN就诞生了。

YARN(Yet Another Resource Negotiator,另一种资源协调者)是一种新的Hadoop资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率资源统一管理数据共享等方面带来了巨大好处。

  • MRv1和MRv2的区别
    • MRv1和MRv2有相同的编程模型和数据处理引擎
    • 最主要的不同是运行时环境的不同,MRv2跑在yarn上面,MRv1不被yarn管理

2 YARN的基本架构

yarn是hadoop 2.x的资源管理系统,基本思想是将MRv1中的JobTracker拆分成两个独立的服务:

  • ResourceManager:管理全局资源
  • ApplicationMaster:每个应用自己的管理器

Yarn相当于是在物理机和计算引擎之间增加了一个资源抽象层。

Tip: 在计算机领域,通过恰当的增加一层基本上可以解决任何问题

2.1 YARN基本组成

Yarn依然是Master/Slave的结构:

  • 在资源架构层面,ResourceManager是Master,NodeManager是Slave
  • 在应用运行期间,ApplicationMaster是Master,各个Container是Slave

整个Yarn基本上由以下这些角色组成:

ResourceManager(RM),RM是全局的资源管理器,负责整个系统的资源管理和分配。由以下两部分组成:

  • 调度器:根据容量、队列限制条件将系统资源分配给各个应用
    • 资源分配的单位是container,container是一个动态资源单位,它将内存、CPU、磁盘、网络等资源封装在一起,从而限定了资源使用量。
    • 调度器是一个可插拔的组件,用户可以自己定制,也可以选择Fair或Capacity调度器
  • 应用程序管理器:负责管理所有应用程序的以下内容:
    • 应用提交
    • 与调度器协商资源以启动AM
    • 监控AM运行状态并在失败时重启它

ApplicationMaster(AM),用户提交的每个应用程序都需要包含一个AM,它的主要功能包括:

  • 与RM调度器协商以获取资源(以container为资源单位)
  • 将得到的任务进一步分配给内部的任务
  • 与NM通信以启动/停止任务
  • 监控所有任务运行状态,并在失败时重新为任务申请资源以重启任务

Tips : 当前Yarn已经实现了两个AM:

- DistributedShell:分布式的运行shell命令
- MRAppMaster:MapReduce应用的AM

NodeManager(NM),是每个节点上的资源和任务管理器

  • 定时向RM汇报本节点上的资源使用情况和各个container运行状态
  • 接收并处理来自AM的container启动/停止等请求

Container,是Yarn中的资源抽象

  • 它封装了节点上多个维度的资源(目前Yarn只支持CPU和内存两种资源)
  • 它与slot的不同之处在于,slot是静态的(每个slot的资源相同),container是动态的(每个container的资源可以不同)。

2.2 Yarn通信协议

RPC是一个分布式系统的大动脉,徐鹏建议我们,想了解YARN,先从RPC协议开始,了解角色之间通信了哪些内容。

在Yarn中的所有RPC协议,通信双方均有一端是client,另一端是Server,并且Client总是连接Server的。

Yarn中的RPC共有以下5种,分别看一下:

  • client与RM:(ApplicationClientProtocol)
    • JobClient通过该RPC提交应用程序、查询应用程序状态等
    • 源码位置:hadoop-dev/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/ApplicationClientProtocol.java
  • admin与RM:(ResourceManagerAdministrationProtocol)
    • Admin通过该RPC更新系统配置文件,比如节点黑白名单、用户队列权限等
    • 源码位置:hadoop-dev/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/server/api/ResourceManagerAdministrationProtocol.java
  • AM与RM:(ApplicationMasterProtocol)
    • AM通过该RPC向RM注册和注销自己,并为各个任务申请资源
    • 源码位置:hadoop-dev/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/ApplicationMasterProtocol.java
  • AM与NM:(ContainerManagementProtocol)
    • AM通过该RPC要求NM启动或停止Container,获取各个container的状态等信息
    • 源码位置:hadoop-dev/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/ContainerManagementProtocol.java
  • NM与RM:(ResourceTracker)
    • NM通过该RPC协议向RM注册,并定时发送心跳汇报当前节点的资源使用情况和Container运行情况
    • 源码位置:hadoop-dev/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/api/ResourceTracker.java

YarnRPC协议图

img

3 Yarn工作流程

当用户向YARN中提交一个应用程序之后,Yarn分两大阶段运行该应用:

  • 第一个阶段是启动AM
  • 第二个阶段是由AM创建应用程序,为它申请资源,并监控运行过程,直到运行结束

下面介绍一下包括这两大阶段的完整流程:

  • 步骤1:用户向YARN提交应用,其中包括AM、启动AM的命令、用户程序等
  • 步骤2:RM为该应用分配第一个Container,并与对应的NM通信,要求它在这个Container中启动应用的AM
  • 步骤3:AM向RM注册,这样用户可以通过RM查看应用的状态。然后AM为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复以下步骤4~7
  • 步骤4:AM采用轮询的方式通过RPC协议向RM申请和领取资源
  • 步骤5:一旦AM获得资源,便与对应的NM通信,要求它启动任务
  • 步骤6:NM为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过该脚本启动任务
  • 步骤7:各个任务通过某个RPC协议向AM汇报自己的状态和进度,以让AM随时掌握状态,从而可以在任务失败时重启任务
  • 步骤8:应用程序运行完成后,AM向RM申请注销并关闭自己。

以上这些步骤只是文字版本的描述,后续介绍状态机时,会再重新梳理每个步骤对应的状态改变,目前只是有个逻辑概念即可。

Yarn应用工作流程

img

ApplicationMaster

交互过程:

提交一个请求到resourceManager开始。ApplicationMaster启动向ResourceManager注册。ApplicationMaster向ResourceManager请求Container执行世纪的工作,讲分配的Container告知NodeManager以便ApplicationMaster使用。计算过程在Container中进行。这些Container讲和AppplicationMaster保持通信,并告知任务过程。当应用程序完成后,container被停止。ApplicationMaster从ResourceManager中注销。

主要职责:

  • 初始化向ResourceManager报告自己活跃信息的进程
  • 计算用用程序的资源需求
  • 讲需求转换成Yarn调度器可以理解的ResourceRequest
  • 与调度器协商申请资源
  • 与NodeManager合作使用分配的container
  • 跟踪正在运行的container的状态,监控他们的进程
  • 对container或节点失败的情况进行处理。

主要过程:

  • ApplicationMaster注册
    ApplicationMaster<------> ResourceManager
  1. 发送注册请求 ,包括IPC address 和URL等信息
  2. 响应注册,返回可用信息,包括Yarn接受的资源大小返回,ACL
  • ApplicationMaster注册成功
    ApplicationMaster<------> ResourceManager
  1. 心跳通信,确认他的活跃和健康状况
  • 资源请求
    ApplicationMaster<------> ResourceManager
  1. 请求格式:ResourceRequest
    <请求优先级,资源分配位置,资源大小即每个container要求的大小,container数目,relaxLocality参数>
  2. 返回数据,返回可用资源列表
  • Container启动
    ApplicationMaster<------> NodeManager
  1. 构建ContainerLaunchContext对象,然后和NodeManager交互,启动Container。
  2. 返回成功启动的Container列表,<失败的StartContaineerrequest Container ID, 异常>映射列表,allServicesMetaData映射。
  • Container停止
    ApplicationMaster<------> NodeManager
  1. ApplicationMaster发送StopContainersRequest请求到NodeManager。 参数:ContainerID
  2. NodeManager通过StopContainersResponse进行回应。
  • Container完成
    Resourcemanager<------>ApplicationMaster
  1. container结束时,ResourceManager以事件的形式告知master。
  • ApplicationMaster的失败和恢复
    当失败的时候,ResourceManager 简单的重新启动一个新的ApplicationMaster来启动应用程序。

  • 协调和输出提交

ApplicationMaster的任务包含协调Container如果支持多个container争夺共享资源或提交输出。 那么AM应该保证只允许一个输出或者访问资源。其他终止或者等待。

Container

Yarn中的container代表在应用中的一个工作单元。Container被影射到底层操作系统的进程。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271