深入解析Apache Hadoop YARN:工作原理与核心组件

什么是YARN?

YARN(Yet Another Resource Negotiator)是Apache Hadoop生态系统中的一个重要组件,用于资源管理和作业调度。它是Hadoop 2.x版本中的一个关键特性,取代了旧版本中的JobTracker和TaskTracker。YARN的设计目标是使Hadoop能够处理更广泛的工作负载,包括批处理、交互式查询、流处理以及其他类型的工作负载。
在这里插入图片描述

为什么需要YARN?

YARN的引入解决了Hadoop 1.x版本中存在的一些限制和不足,提供了更灵活、更高效的资源管理和作业调度。以下是一些需要YARN的主要原因:
在这里插入图片描述

  • 多样化的工作负载支持:
    -Hadoop 1.x版本中的MapReduce框架适用于批处理作业,但不太适合处理交互式查询、流处理等多样化的工作负载。YARN的出现使得Hadoop可以同时运行多种类型的应用程序,包括批处理、交互式查询(如Apache Hive、Apache Tez)、流处理(如Apache Storm、Apache Flink)等。
  • 资源隔离和多租户支持:
    YARN支持在同一集群上运行多个应用程序,并能够对资源进行有效的隔离,防止一个应用程序的资源消耗影响其他应用程序的性能。这种多租户支持使得企业可以更高效地共享集群资源,并在不同的团队、部门或业务单位之间进行资源划分和管理。
  • 动态资源分配: YARN允许应用程序根据需要动态申请和释放资源,而不是像Hadoop 1.x版本那样静态地将资源分配给作业。这种动态资源分配机制可以提高集群资源的利用率,并更好地适应不同作业的资源需求变化。
  • 支持更大规模的集群:
    YARN的架构设计更适合处理大规模集群,能够有效地管理数千甚至数万个节点的资源和作业。这使得Hadoop可以在更大规模的数据集上进行处理和分析,满足日益增长的数据处理需求。
  • 更灵活的作业调度:
    YARN提供了灵活的作业调度框架,可以支持多种调度策略和调度器插件。这使得用户可以根据自己的需求选择最适合的调度器,并对调度策略进行定制,以满足不同作业的性能和资源需求。

YARN的基本核心思想

YARN的基本核心思想是将资源管理和作业调度从特定的计算框架(如MapReduce)中分离出来使其成为单独的守护进程,使得Hadoop集群能够更通用地支持多种类型的应用程序和工作负载。
这个想法是拥有一个全局的 ResourceManager ( RM ) 和每个应用程序的 ApplicationMaster ( AM )。应用程序可以是单个作业,也可以是作业的 DAG。ResourceManager 和 NodeManager 构成了数据计算框架。 ResourceManager是系统中所有应用程序之间资源仲裁的最终权威。 NodeManager 是每台机器的框架代理,负责容器、监视其资源使用情况(CPU、内存、磁盘、网络)并将其报告给ResourceManager/Scheduler。每个应用程序的 ApplicationMaster 实际上是一个特定于框架的库,其任务是与 ResourceManager 协商资源并与 NodeManager 一起执行和监视任务。
在这里插入图片描述

在Hadoop集群中,YARN主要有以下几个核心组件:

  1. ResourceManager(资源管理器):ResourceManager是YARN集群中的主节点,负责管理整个集群的资源分配和作业调度。它跟踪可用资源,并为提交到集群的应用程序分配资源。
  2. NodeManager(节点管理器):NodeManager运行在每个集群节点上,负责管理该节点上的资源,并与ResourceManager通信以报告节点的资源使用情况和可用性。
  3. ApplicationMaster(应用程序管理器):每个提交到YARN集群的应用程序都有一个对应的ApplicationMaster。ApplicationMaster负责与ResourceManager协商资源、监控作业进度,并向ResourceManager请求更多资源或报告作业完成情况。

ResourceManager 有两个主要组件:Scheduler 和ApplicationsManager。
调度程序负责将资源分配给受熟悉的容量、队列等约束的各种正在运行的应用程序。调度程序是纯粹的调度程序,因为它不执行应用程序状态的监视或跟踪。此外,它不保证重新启动由于应用程序故障或硬件故障而失败的任务。 Scheduler根据应用程序的资源需求执行其调度功能;它是基于资源容器的抽象概念来实现的,资源容器包含内存、CPU、磁盘、网络等元素。

调度程序具有可插入策略,负责在各种队列、应用程序等之间划分集群资源。当前的调度程序(例如CapacityScheduler和FairScheduler)就是插件的一些示例。

ApplicationsManager 负责接受作业提交、协商第一个容器来执行应用程序特定的 ApplicationMaster 并提供在失败时重新启动 ApplicationMaster 容器的服务。每个应用程序的 ApplicationMaster 负责与 Scheduler 协商适当的资源容器,跟踪其状态并监控进度。

hadoop-2.x 中的 MapReduce 保持了与之前稳定版本 (hadoop-1.x) 的API 兼容性。这意味着所有 MapReduce 作业仍应在 YARN 之上运行,只需重新编译即可。

YARN通过ReservationSystem支持资源预留的概念,ReservationSystem 是一个组件,允许用户指定随时间和时间限制(例如截止日期)的资源配置文件,并预留资源以确保重要作业的可预测执行。ReservationSystem跟踪资源随着时间的推移,对预留进行准入控制,并动态指示底层调度程序以确保预留得到满足。

为了将 YARN 扩展至数千个节点以上,YARN通过YARN Federation功能支持联合概念。联合允许透明地将多个纱线(子)集群连接在一起,并使它们显示为单个大型集群。这可用于实现更大的规模,和/或允许多个独立集群一起用于非常大的作业,或用于具有跨所有集群的容量的租户。

在 YARN 上运行的应用程序

以上并非所有的应用

  • 批处理应用程序:
    批处理作业是Hadoop最常见的用例之一,它们通常涉及对大规模数据集进行分析和处理。使用YARN,批处理作业可以通过MapReduce框架或其他批处理引擎(如Apache Spark、Apache Flink等)来运行。
  • 交互式查询:
    交互式查询通常用于对数据进行即席查询和分析。通过YARN,可以在集群上运行诸如Apache Hive、Apache Impala、Apache Drill等交互式查询引擎,这些引擎能够实时响应用户的查询请求。
  • 流处理应用程序:
    流处理应用程序用于对实时数据流进行处理和分析。通过YARN,可以在集群上运行流处理引擎,如Apache Storm、Apache Flink、Apache Kafka Streams等,以实时处理数据流并生成相应的输出。
  • 机器学习和数据挖掘:
    YARN也可以支持运行机器学习和数据挖掘算法。例如,可以使用Apache Spark的机器学习库(MLlib)或Apache Flink的机器学习库来在集群上训练和部署机器学习模型。
  • 图计算:
    图计算应用程序用于在图结构数据上执行复杂的分析和计算。通过YARN,可以在集群上运行图计算引擎,如Apache Giraph、Apache Spark GraphX等,来处理大规模的图数据。
  • 其他类型的应用程序:
    此外,YARN还可以支持各种其他类型的应用程序,包括ETL(Extract-Transform-Load)作业、数据流处理、实时分析等。YARN的通用性和灵活性使得它能够满足不同类型应用程序的运行需求。

应用程序如何在 YARN 上运行?

在这里插入图片描述

  1. 应用程序提交:
    用户通过YARN客户端提交应用程序。在提交过程中,用户需要指定应用程序的资源需求、启动命令、应用程序类型等信息。通常,应用程序的启动命令会包括指定应用程序的jar包或可执行文件、主类名(对于Java应用程序)、应用程序的输入和输出路径等信息。
  2. ResourceManager分配资源:
    ResourceManager接收到用户提交的应用程序后,会根据应用程序的资源需求和集群中的资源情况进行资源分配。ResourceManager会为应用程序分配所需的计算资源(如CPU和内存资源)以及其他必要的资源(如网络带宽)。
  3. NodeManager启动容器:
    一旦资源分配完成,ResourceManager会通知集群中相应的NodeManager,在相应的节点上启动一个或多个容器(Container)。容器是YARN中的基本执行单位,它包含了运行应用程序所需的计算资源、环境变量等信息。
  4. 应用程序启动:
    一旦容器启动完成,应用程序的启动命令将被执行。这可能涉及启动应用程序的主进程,例如执行Java的main()方法或运行可执行文件。
  5. ApplicationMaster启动:
    应用程序的启动过程通常会涉及到一个特殊的组件,称为ApplicationMaster。ApplicationMaster负责与ResourceManager通信,协商资源、监控作业进度,并向ResourceManager请求更多资源或报告作业完成情况。ApplicationMaster运行在集群中的一个容器中,并由ResourceManager负责启动和监控。
  6. 作业执行:一旦ApplicationMaster启动,应用程序就可以开始在容器中执行。根据应用程序的类型和逻辑,它可能会涉及到数据的读取、处理、计算以及生成结果等过程。
  7. 作业完成:
    一旦应用程序执行完成,ApplicationMaster会向ResourceManager报告作业完成情况,并请求释放所占用的资源。
  8. 资源释放
    ResourceManager会相应地释放容器所占用的资源,并通知NodeManager停止相应的容器。至此,应用程序的执行过程结束,集群资源被释放,可以被其他应用程序使用。

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

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

相关文章

ElasticSearch实战之项目搜索高亮

文章目录 1. 前情配置2、数据操作2.1 操作API2.2 数据入库 3. 高亮搜索3.1 方法封装3.2 高亮搜索 1. 前情配置 为满足ElasticSearch可在项目中实现搜索高亮&#xff0c;我们需要先做一些前情配置 导入ElasticSearch依赖 <dependency><groupId>org.springframewor…

【Flutter】多语言方案一:flutter_localizations 与 GetX 配合版

系列文章目录 多语言方案&#xff1a;flutter_localizations 与 GetX 配合版&#xff0c;好处&#xff1a;命令行生成多语言字符串的引用常量类&#xff0c;缺点&#xff1a;切换语言以后&#xff0c;主界面需要手动触发setState&#xff0c;重绘将最新的Locale数据设置给GetM…

【Leetcode每日一题】 分治 - 排序数组(难度⭐⭐)(60)

1. 题目解析 题目链接&#xff1a;912. 排序数组 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 算法思路&#xff1a; 快速排序作为一种经典的排序算法&#xff0c;其核心思想在于通过“分而治之”的策略&#xff…

Idea修改【Help->Edit Custom VM Options...】后,导致idea无法正常启动的解决方法

一、错误场景: 二、解决方法&#xff1a; 修改文件路径&#xff1a;C:\Users\tianjm&#xff08;写自己的用户名&#xff09;\AppData\Roaming\JetBrains\IdeaIC2024.1&#xff08;选自己安装的版本&#xff09;

Linux 网络编程项目--简易ftp

主要代码 config.h #define LS 0 #define GET 1 #define PWD 2#define IFGO 3#define LCD 4 #define LLS 5 #define CD 6 #define PUT 7#define QUIT 8 #define DOFILE 9struct Msg {int type;char data[1024];char secondBuf[128]; }; 服务器: #i…

传统零售行业如何做数字化转型?

传统零售行业的数字化转型是一个系统性的过程&#xff0c;涉及到企业的多个方面。以下是一些关键步骤和策略&#xff0c;帮助传统零售企业实现数字化转型&#xff1a; 1、明确转型目标和战略 首先&#xff0c;企业需要明确数字化转型的目标和战略。包括确定企业的核心竞争力、…

Java内存模型和 JVM 内存运行时

文章目录 前言一、什么是Java 的内存模型&#xff1f;二、什么是 JVM 的运行时数据区Java8 之前和之后的区别JVM 内存模型JVM 内存区域JVM 内存垃圾回收JVM如何判断哪些对象不在存活&#xff1f;JVM运行过程中如何判断哪些对象是垃圾&#xff1f; JVM 垃圾回收Java8 中的 jvm如…

.rmallox勒索病毒来袭:如何守护您的数据安全?

引言&#xff1a; 随着信息技术的飞速发展&#xff0c;网络安全问题日益凸显&#xff0c;其中勒索病毒更是成为了网络安全领域的一大难题。.rmallox勒索病毒作为一种典型的恶意软件&#xff0c;通过加密受害者文件并勒索赎金的方式&#xff0c;给企业和个人带来了巨大的经济损…

指纹浏览器如何高效帮助TikTok账号矩阵搭建?

TikTok的账号矩阵&#xff0c;可能听起来还比较陌生&#xff0c;但随着TikTok业务已经成为吃手可热的跨境业务&#xff0c;TikTok多账号矩阵已成为流行策略。但它有什么优点呢&#xff1f;操作多个帐户会导致被禁止吗&#xff1f;如何有效地建立账户矩阵开展业务&#xff1f;这…

爬虫 | 基于 requests 实现加密 POST 请求发送与身份验证

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本项目旨在实现一个简单的 Python 脚本&#xff0c;用于向指定的 URL 发送 POST 请求&#xff0c;并通过特定的加密算法生成请求头中的签名信息。这个脚本的背后是与某个特定的网络服务交互&#xff0c;发送特定格式的 JSON 数据…

深入理解MySQL中的UPDATE JOIN语句

在MySQL数据库中&#xff0c;UPDATE语句用于修改表中现有的记录。有时&#xff0c;我们需要根据另一个相关联表中的条件来更新表中的数据。这时就需要使用UPDATE JOIN语句。最近我们遇到了这样的需求&#xff1a;我们有一张历史记录表&#xff0c;其中一个字段记录了用,连接的多…

网络爬虫软件学习

1 什么是爬虫软件 爬虫软件&#xff0c;也称为网络爬虫或网络蜘蛛&#xff0c;是一种自动抓取万维网信息的程序或脚本。它基于一定的规则&#xff0c;自动地访问网页并抓取需要的信息。爬虫软件可以应用于大规模数据采集和分析&#xff0c;广泛应用于舆情监测、品牌竞争分析、…

在 Linux 终端中创建目录

目录 ⛳️推荐 前言 在 Linux 中创建一个新目录 创建多个新目录 创建多个嵌套的子目录 测试你的知识 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 前言 在本系列的这一部…

Day09 React———— 第九天

ReactRoter 一个路径 path 对应一个组件 component 当我们在浏览器中访问一个 path 的时候&#xff0c;path 对应的组件会在页面中进行渲染 基础用法 import { createBrowserRouter, RouterProvider } from "react-router-dom"; const router createBrowserRoute…

解决Mac使用Vscode无法调用外部终端

前言 今天遇到一个很奇怪的问题&#xff0c;之前好好的用Vscode还能调用外部终端&#xff0c;怎么今天不行了&#xff1f;问题出在哪里呢&#xff1f;请听我娓娓道来。 检查配置文件 我查看了一下配置文件&#xff0c;发现配置文件都是调用外部控制台&#xff0c;没毛病啊。 …

linux启动minicom、u-boot的常用命令、网络命令tftp、nfs/根文件系统、u-boot的bootargs环境变量

linux启动minicom sudo minicom -con进入minicom界面&#xff1a; 打开单片机 在打开之后&#xff0c;我们通过 printenv查看环境配置 在修改配置之前&#xff0c;我们最好先将环境初始化一下&#xff0c;初始化代码为 nand erase.chipu-boot的常用命令 尽管u-boot是一个…

Torch 模型 感受野可视化

前言&#xff1a;感受野是卷积神经网络 (CNN) 中一个重要的概念&#xff0c;它表示 CNN 每一层输出的特征图上的像素点在输入图像上映射的区域。感受野的大小和形状直接影响到网络对输入图像的感知范围和精度&#xff0c;进而调整网络结构、卷积核大小和步长等参数&#xff0c;…

后端-MySQL-week11 多表查询

tips: distinct————紧跟“select”之后&#xff0c;用于去重 多表查询 概述 一对多&#xff08;多对一&#xff09; 多对多 一对一 多表查询概述 分类 连接查询 内连接 外连接 自连接 必须起别名&#xff01; 联合查询-union&#xff0c;union all 子查询 概念 分类 …

OpenMesh 极小曲面(局部迭代法)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 我们的目标是想得到一个曲率处处为0的曲面,具体操作如下所述: 二、实现代码 #define _USE_MATH_DEFINES #include

量子时代加密安全与区块链应用的未来

量子时代加密安全与区块链应用的未来 现代密码学仍然是一门相对年轻的学科&#xff0c;但其历史却显示了一种重要的模式。大多数的发展都是基于几年甚至几十年前的研究。而这种缓慢的发展速度也是有原因的&#xff0c;就像药物和疫苗在进入市场之前需要经过多年的严格测试一样&…