关于hadoop:深入浅出-Yarn-架构与实现11-设计理念与基本架构

7次阅读

共计 1776 个字符,预计需要花费 5 分钟才能阅读完成。

一、Yarn 产生的背景

Hadoop2 之前是由 HDFS 和 MR 组成的,HDFS 负责存储,MR 负责计算。

一)MRv1 的问题

  • 耦合度高:MR 中的 jobTracker 同时负责资源管理和作业控制两个性能,互相制约。
  • 可靠性差:治理节点是单机的,有单点故障的问题。
  • 资源利用率低:基于 slot 的资源分配模型。机器会将资源划分成若干雷同大小的 slot,并划定哪些是 map slot、哪些是 reduce slot。
  • 无奈反对多种计算框架:限定了只能用于 MapReduce 程序。

    二)Yarn 的诞生

    因为之前 Hadoop 资源调度的种种问题,新的资源调度框架产生了 —— YARN(Yet Another Resource Negotiator)。

它是一个通用资源管理零碎,可为下层利用提供对立的资源管理和调度,它的引入为集群在利用率、资源对立治理和数据共享等方面带来了微小益处。

二、Yarn 的根本架构

一)Yarn 三大组件

  • ResourceManager
  • Nodemanager
  • ApplicationMaster
  • 在资源架构层面:RM 是 master、NM 是 slave
  • 在利用运行期间:AM 是 master、container 是 slave

    1、ResourceManager

    ResourceManager 次要由两个组件形成:
    调度器 (Scheduler)和应用程序管理器(Applications Manager,ASM)。

  • 调度器(Scheduler):

    • 依据容量、队列等限度条件(如每个队列调配肯定的资源,最多执行肯定数量的作业等),将零碎中的资源分配给各个正在运行的应用程序。
  • 应用程序管理器(Applications Manager):

    • 负责管理整个零碎中所有应用程序,包含应用程序提交、与调度器协商资源以启动 ApplicationMaster、监控 ApplicationMaster 运行状态并在失败时重新启动等。

    2、NodeManager

    NodeManager 是每个节点上的资源和工作管理器。

  • 定时地向 RM 汇报本节点上的资源应用状况和各个 Container 的运行状态;
  • 接管并解决来自 AM 的 Container 启动 / 进行等各种申请。

    3、ApplicationMaster

    ApplicationMaster 是一个工作最先启动的容器,用于治理当前任务的调度。

  • 与 RM 调度器协商以获取资源(用 Container 示意);
  • 将失去的工作进一步调配给外部的工作;
  • 与 NM 通信以启动 / 进行工作;
  • 监控所有工作运行状态,并在工作运行失败时从新为工作申请资源以重启工作。

    4、Container

    不属于 Yarn 三大组件,然而 yarn 中资源的形象。

  • 封装 NM 上的资源(hadoop2 仅反对 cpu 和内存,hadoop3 扩大网络、硬盘、GPU 等资源);
  • 不同于动态的 slot,container 能够依据须要动静划分。

二)Yarn 通信协议

通信协议共有 5 种如下图所示:

  • 分布式环境下,须要波及跨机器跨网络通信,YARN 底层应用 RPC 协定实现通信。
  • RPC 是近程过程调用(Remote Procedure Call)的缩写模式。基于 RPC 进行近程调用就像本地调用一样。
  • 在 RPC 协定中,通信单方有一端是 Client,另一端为 Server,且 Client 总是被动连贯 Server 的。因而,YARN 理论 上采纳的是拉式(pull-based)通信模型。

    三、Yarn 工作流程

  1. client 向 YARN 中提交应用程序,其中包含 AM 程序、启动 AM 的命令、用户程序等。
  2. RM 为该应用程序调配第一个 Container,并与对应的 NM 通信,要求它在这个 Container 中启动应用程序的 AM。
  3. AM 首先向 RM 注册,这样用户能够间接通过 RM 查看应用程序的运行状态,而后它将为各个工作申请资源,并监控它的运行状态,直到运行完结,即反复步骤 4~7。
  4. AM 通过 RPC 协定向 RM 申请和支付资源。
  5. —旦 AM 申请到资源后,便与对应的 NM 通信,要求它启动工作。
  6. NM 为工作设置好运行环境(包含环境变量、JAR 包、二进制程序等)后,将工作启动命令写到 一个脚本中,并通过运行该脚本启动工作。
  7. 各个工作通过 RPC 协定向 AM 汇报本人的状态和进度,以让 AM 随时把握各个工作的运行状态,从而能够在工作失政时重新启动工作。在利用程序运行过程中,用户可随时通过 RPC 向 AM 查问应用程序的以后运行状态。
  8. 利用程序运行实现后,AM 向 RM 登记并敞开本人。
正文完
 0