深入理解 Hadoop (五)YARN核心工作机制浅析

概述

YARN 的核心设计理念是 服务化(Service)事件驱动(Event + EventHandler)。服务化 和 事件驱动 软件设计思想的引入,使得 YARN 具有低耦合、高内聚的特点,各个模块只需完成各自功能,而模块之间则采用事件联系起来,系统设计简单且维护方便。这种编程方式具有异步、并发等特点,更加高效,更适合大型分布式系统。

YARN Service 服务

对于生命周期较长的对象,YARN 采用了基于服务的对象管理模型对其进行管理,该模型主要有以下几个特点:
将每个被服务化的对象分为 4 个状态:NOTINITED(被创建)、INITED(已初始化)、STARTED(已启动)、STOPPED(已停止)
任何服务状态变化都可以触发另外一些动作。
可通过组合的方式对任意服务进行组合,以便进行统一管理。

public class ResourceManager extends CompositeService implements Recoverable, ResourceManagerMXBean {
}

public class NodeManager extends CompositeService implements EventHandler<NodeManagerEvent>, NodeManagerMXBean {
}

public class CompositeService extends AbstractService {
    // 服务集合
    private final List<Service> serviceList = new ArrayList<Service>();
}

public abstract class AbstractService implements Service {
}

ResourceManager 继承关系图

在这里插入图片描述

service 定义

Service 的主要逻辑位于 serviceInt()、serviceStart()、serviceStop() 等方法中。
Service 用到了组合模式 + 装饰者模式

public interface Service extends Closeable {
    public enum STATE {
        NOTINITED(0, "NOTINITED"),
        INITED(1, "INITED"),
        STARTED(2, "STARTED"),
        STOPPED(3, "STOPPED");
    }
    // 服务初始化
    void init(Configuration config);
    // 服务启动
    void start();
    // 服务停止
    void stop();
    // 服务关闭
    void close() throws IOException;
}

ResourceManager 的内部构成

在这里插入图片描述

NodeManager 的内部构成

在这里插入图片描述

YARN AsyncDispatcher 事件驱动机制详解

其他的组件提交事件到 这个 AsyncDispatcher,内部通过一个队列来缓冲,然后 AsyncDispatcher 的内部还有一个消费线程,获取队列中的事件,然后做分发到 事件 和 事件处理器 的注册表中,去根据事件找到事件处理器,调用 事件处理器 的 handle 方法来完成事件处理。
异步:这个异步组件的内部,必然包含一个 队列 和一个 消费线程。
AsyncDispatcher:异步事件驱动模型的中央事件调度器,所以它的内部,注册了很多的<Event + EventHandler> 事件处理二元组。
YARN 采用了基于事件驱动的异步通信模型,该模型能够大大增强并发性,从而提高系统整体性能。为了构建该模型,YARN 将各种处理逻辑抽象成事件和对应事件调度器,并将每类事件的处理过程分割成多个步骤,用有限状态机表示。
AsycDispatcher 是 YARN 的中央异步调度器/ 全局事件分发器。在 ResourceManager 中,几乎所有的事件都通过 AsyncDispatcher 进行事件的派发。当一个组件提交一个 事件给 AsyncDispatcher 的时候,AsyncDispatcher 负责给这个事件找到之前注册的 EventHandler 来完成响应的处理。某些特别的 EventHandler 可能是一个 StateMachine。
在这里插入图片描述
整个处理过程大致为:处理请求会作为事件进入系统,由中央异步调度器(AsyncDispatcher)负责传递给相应事件调度器(EventHandler)。该事件调度器可能将该事件转发给另外一个事件调度器,也可能交给一个带有有限状态机的事件处理器,其处理结果也以事件的形式输出给中央异步调度器。而新的事件会再次被中央异步调度器转发给下一个事件调度器,直至处理完成(达到终止条件)。

在 YARN 中,所有核心服务实际上都是一个中央异步调度器,包括 ResourceManager、NodeManager、MRAppMaster 等,它们维护了事先注册的事件与事件处理器,并根据接收的事件类型驱动服务的运行。以 MRAppMaster 为例,它内部包含一个中央异步调度器 AsyncDispatcher,并注册了 TaskAttemptEvent / TaskAttemptImpl、TaskEvent / TaskImpl、JobEvent / JobImpl 等一系列事件/事件处理器,由中央异步调度器统一管理和调度。

在 ResourceManager 或者 NodeManager 等组件中,都有一个 AsyncDispatcher 中央异步事件调度器。在初始化的时候,会将创建的 EventHandler 和对应的事件类型,注册到 AsyncDispatcher 中来,如果 AsyncDispatcher 接收到一个事件,由 GenericEventHandler 完成 eventQueue 的容量维护,并且将事件加入到 eventQueue 中,负责消费 eventQueue 的 eventHandlingThread 则从 eventDispatchers 获取注册的事件对应的 EventHandler 来完成处理。所以:这样子看,AsyncDispatcher 就是一个中央事件调度分发器。

YARN StateMachine 有限状态机

EventHandler 可以理解为简化版的策略模式。

class XXX implemnts EventHandler<>{
    private StateMachine machine;
}
// 1、XXX 是一个 EventHandler。
// 2、XXX 是一个有限状态机,这个 XXX 的状态变化比较复杂,通过一个有限状态机来维护。
// 3、XXX 称之状态机实体对象,维护了当前的状态信息。

在 YARN 中,每种状态转换(doTransition 方法去执行状态转换,addTransition 注册状态转换)由一个四元组表示,分别是转换前状态(preState)、转换后状态(postState)、事件(event)和回调函数/转换器(hook = Transition)。
连起来解释: 此时是 preState,接收到 event 之后,状态机转换表中获取到对应的 Transition 执行转换,得到一个新状态 postState。YARN 定义了三种状态转换方式,具体如下:

  • 一个初始状态、一个最终状态、一种事件:经过处理之后,无论如何,进入到一个唯一状态。
  • 一个初始状态、多个最终状态、一种事件:不同的逻辑处理结果,可能导致进入不同的状态。
  • 一个初始状态、一个最终状态、多种事件:多个不用的事件,可能触发到多个不同状态的转换。在这里插入图片描述

YARN 有限状态机设计理念

  • 首先构建一个 StateMachineFactory 实例,然后往里面注册响应的状态转换四元组。
  • 调用 StateMachineFactory 的 make() 来构造一个 StateMachine 实例。
  • StateMachineFactory 内部维护了一个 stateMachineTable。
  • 当正常运行过程中,如果接收到一个事件,则根据 此时的状态 和 事件找到对应的转换器 Transition,调用 Transition 的 doTransition 方法来执行转换,得到最终状态。

YARN 中实现了多个状态机对象,包括:
ResourceManager 中的 RMAppImpl、RMAppAttemptImpl、RMContainerImpl 和 RMNodeImpl 等。
NodeManager 中的 ApplicationImpl、ContainerImpl 和 LocalizedResource 等。
MRAppMaster 中的 JobImpl、TaskImpl 和 TaskAttemptImpl 等。

状态机可视化工具

为了便于用户查看这些状态机的状态变化以及相关事件,YARN 提供了一个状态机可视化工具,具体操作步骤如下。
步骤1 将状态机转化为 graphviz(.gv) 格式的文件,在源代码根目录下执行编译命令如下:

mvn compile -Pvisualize

步骤2 使用可视化包 graphviz 中的相关命令生成状态机图,Shell 命令具体如下:

dot -Tpng ResourceManager.gv > ResourceManager.png
dot -Tpng NodeManager.gv > NodeManager.png
dot -Tpng MapReduce.gv > MapReduce.png

如果尚未安装 graphviz 包,操作该步骤之前先要安装该包,centos 安装命令如下:

sudo yum install graphviz

源码中如何查看事件对象处理方式

方式一: 搜枚举类实例,例如:RMNodeEventType.STARTED,搜到的结果是状态机,一般位于 adTransition 方法中。
方式二: 搜枚举类实例,例如:case STARTED 或 RMNodeEventType.class,搜到的结果是事件处理器,一般位于 register 方法中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/307102.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

红帽宣布CentOS 7和RHEL 7将在2024年6月30日结束支持,企业面临紧迫的迁移压力!

2020 年红帽 (RedHat&#xff0c;已在 2019 年被 IBM 收购) 单方面宣布终止 CentOS Linux 的开发&#xff0c;此后 CentOS Linux 8 系列的更新已经在 2021 年 12 月结束&#xff0c;而 CentOS Linux 7 系列的更新将在 2024 年 6 月 30 日结束。 与 CentOS Linux 7 一起发布的 R…

SWM341系列之SWM34SRET6介绍

SWM341系列的介绍 本文介绍了华芯微特SWM341系列主要性能&#xff0c;和其系列之一的SWM34SRET6-50驱动4.3寸800*480 TFTLCD显示的例程应用。 SWM341系列性能 SWM341是一款基于ARM Cortex-M33的32位微控制器&#xff0c;片上包含精度为 1%以内的 20MHz/40MHz 时钟&#xff0c;最…

“To-Do Master“ GPTs:重塑任务管理的趣味与效率

有 GPTs 访问权限的可以点击链接进行体验&#xff1a;https://chat.openai.com/g/g-IhGsoyIkP-to-do-master 部署私人的 To-Do Master 教程&#xff1a;https://github.com/Reborn14/To-Do-Master/tree/main 引言 在忙碌的日常生活中&#xff0c;有效地管理日常任务对于提高生…

格式工厂怎么转换视频方向

格式工厂因为其免费、操作简单、功能齐全的多重优势&#xff0c;深受大家的喜欢。格式工厂具有可以转换视频、音频、去水印、转换GIF、图片转换、PDF合并、PDF转换等功能&#xff0c;然而在对视频进行剪辑的时候&#xff0c;往往会发现找不到格式工厂的转换视频方向的功能&…

影视视频知识付费行业万能通用网站系统源码,三网合一,附带完整的安装部署教程

在数字化时代&#xff0c;知识付费行业逐渐成为主流。人们对高质量内容的需求日益增长&#xff0c;越来越多的人愿意为有价值的知识和信息服务付费。为了满足这一市场需求&#xff0c;罗峰给大家分享一款全新的影视视频知识付费网站系统源码&#xff0c;为用户提供一站式的知识…

wy的leetcode刷题记录_Day74

wy的leetcode刷题记录_Day74 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间&#xff1a;2024-01-10 前言 目录 wy的leetcode刷题记录_Day74声明前言2696. 删除子串后的字符串最小长度题目介绍思路代码收获 64. 最小路径和题目介绍思路代码收获 63.…

查看Linux系统内存、CPU、磁盘使用率和详细信息

一、查看内存占用 1、free # free -m 以MB为单位显示内存使用情况 [rootlocalhost ~]# free -mtotal used free shared buff/cache available Mem: 11852 1250 8668 410 1934 9873 Swap: 601…

linux环境安装docker

一、Docker是什么? 当我们开发一个应用程序时&#xff0c;通常需要配置和安装各种软件、库和依赖项。而这些环境配置可能会因为不同的操作系统或版本而存在差异&#xff0c;导致应用在不同环境中运行出现问题。 Docker就像是一个集装箱&#xff0c;可以将应用程序及其所有依…

服务器组网方案

在当今数字化时代&#xff0c;服务器组网方案不仅是企业信息管理的关键&#xff0c;更是支撑业务运作的核心架构 。为了实现高效的数据处理和存储&#xff0c;服务器组网方案成为企业不可或缺的一部分。本文将深入探 讨服务器组网方案的核心要素和实施策略&#xff0c;明确其在…

React入门 - 04(从编写一个简单的 TodoList 说起)

继上一节我们已经对 React组件和 ”JSX语法“有了大概的了解&#xff0c;这一节我们继续在 react-demo这个工程里编写代码。这一节我们来简单实现一个 TodoList来更加了解编写组件的一些细节。 1、在编辑器中打开 react-demo这个工程 2、打开 index.js文件&#xff0c;将组件 …

NR cell配置带宽时,如何设置carrierBandwidth?

NR中带宽在38.101中有规定。 如上是FR1 38.101-1中与带宽设定有关的table&#xff0c;协议中根据SCS规定的传输带宽和可以配置的RB 数如上表&#xff0c;也就是说在实网下或者lab测试配置带宽时要根据上表内容去配置&#xff0c;举例如下。 如上图分别是几种带宽的配置参数&…

虽迟但到!MySQL 可以用 JavaScript 写存储过程了!

任何能用 JavaScript 来干的事情&#xff0c;最终都会用 JavaScript 来干 背景 不久前&#xff0c;Oracle 在 MySQL 官方博客官宣了在 MySQL 中支持用 JavaScript 来写存储过程。 最流行的编程语言 最流行的数据库。程序员不做选择&#xff0c;当然是全都要。 使用方法 用 J…

c#自动更新升级工具

c#更新工具,wpf开发,所有windows桌面程序均可使用,基于.net 4.0,最低支持windos xp系统 更新工具优点 使用简单批量更新跨版本更新数据备份手动还原数据体积小 程序更新使用效果 使用简单 只需添加两个类,以及三个路径的指定,就可以从任何地方下载更新包,并解压到主程序目录…

哥伦比亚电影平台,影业之路的的新起点

哥伦比亚影业&#xff08;英语&#xff1a;Columbia Pictures&#xff09;作为与米高梅公司同为美国历史悠久的电影公司&#xff0c;其发展历程可以说是世界电影行业的缩影&#xff0c;从创立时的CBC电影行销公司&#xff08;英语&#xff1a;CBC Film Sales Corporation&#…

构建自己的私人GPT-支持中文

上一篇已经讲解了如何构建自己的私人GPT&#xff0c;这一篇主要讲如何让GPT支持中文。 privateGPT 本地部署目前只支持基于llama.cpp 的 gguf格式模型&#xff0c;GGUF 是 llama.cpp 团队于 2023 年 8 月 21 日推出的一种新格式。它是 GGML 的替代品&#xff0c;llama.cpp 不再…

Fedora Linux 中安装 nginx

Fedora 35 中安装 nginx 的方法非常简单。 运行下面的命令&#xff1a; sudo dnf install nginx 在提示你需要确认的地方&#xff0c;输入 y 后回车即可。 开机自动启动 如果你希望在你的操作系统重启的时候自动启动 nginx&#xff0c;请输入下面的命令&#xff1a; syst…

VsCode 配置Copilot的详细步骤与示例

目录 一、 GitHub Copilot Chat 账号申请 1.1 前往 GitHub 网站&#xff08;https://github.com/&#xff09;并点击 "Sign up" 进行注册。 1.2 申请 GitHub Copilot Chat 二、VsCode 配置 Copilot 2.1 安装 VsCode 编辑器 2.2 安装 Copilot 插件 2.3 配置Git…

C++|19.C++类与结构体对比

类和结构体 类和结构体本质上并没有太大区别。 但两者在默认上有所区别。 类默认成员变量是私有的&#xff0c;而结构体默认成员变量是公有的。 也就是说&#xff0c;对于一个类来说&#xff0c;会默认使用private去保护其内部成员变量使得无法直接访问到其内部的变量。 同时从…

简谈以太网的工作原理及传输介质

以太网是一种常见的局域网技术&#xff0c;它采用 CSMA/CD&#xff08;载波侦听多路接入/冲突检测&#xff09;的介质访问控制方式&#xff0c;用于在局域网中传输数据。本文将介绍以太网的工作原理以及常见的传输介质。 一、以太网的工作原理以太网的工作原理基于CSMA/CD机制…

C#PDF转Excel

組件 Spire.Pdf.dll, v7.8.9.0 【注意&#xff1a;版本太低的没有此功能】 在Visual Studio中找到参考&#xff0c;鼠标右键点击“引用”&#xff0c;“添加引用”&#xff0c;将本地路径debug文件夹下的dll文件添加引用至程序。 界面图&#xff1a; 1个label&#xff0c;1…