深入分析Apache Hadoop YARN:工作原理及核心组件
YARN是什么?f;
YARN(Yet Another Resource Negotiator)是Apache Hadoop生态系统的重要组成部分,用于资源管理和运营调度。它是Hadoop 2.x版本中的一个关键特征,在旧版本中取代了Jobtracker和Tasktracker。YARN的设计目标是让Hadoop处理更广泛的工作负荷,包括批处理、交互式查询、流处理等类型的工作负荷。
YARN为什么需要?f;
YARN的引入解决了Hadopo 1.x版本中的一些限制和不足,提供更灵活、更高效的资源管理和运营调度。以下是YARN需要YARN的主要原因:
- 多样化的工作负荷支持:
-Hadoop 1.Mapreduce框架在x版本中适用于批处理操作,但不适合处理交互式查询、流处理等多样化的工作负荷。YARN的出现使得Hadoop能够同时运行各种类型的应用程序,包括批处理、交互查询和#xff08;比比如Apache Hive、Apache Tez)、xff08;比比如Apache Storm、Apache Flink)等。 - 资源隔离和多租户支持:
YARN支持在同一个集群上运行多个应用程序,并能有效隔离资源,防止一个应用程序的资源消耗影响其他应用程序的性能。这种多租户支持使企业能够更有效地共享集群资源,并在不同的团队、部门或业务单位之间划分和管理资源。 - 动态资源分配: YARN允许应用程序根据需要动态申请和释放资源而不是像Hadoop那样 1.x版本静态地将资源分配给操作。这种动态资源分配机制可以提高集群资源的利用率,并更好地适应不同作业的资源需求变化。
- 支持大规模集群:
YARN的架构设计更适合处理大规模集群,能有效管理数千甚至数万个节点的资源和操作。这使得Hadoop能够处理和分析更大规模的数据集,满足日益增长的数据处理需求。 - 作业调度更灵活:
YARN提供了灵活的操作调度框架,可支持多种调度策略和调度器插件。这使得用户可以根据自己的需要选择最合适的调度器,定制调度策略,满足不同操作的性能和资源需求。
YARN的基本核心思想。
YARN的基本核心思想是将资源管理和运营调度从特定的计算框架(如Mapreduce)分离使其成为单独的守护过程,使Hadop集群能够更通用地支持各种类型的应用程序和工作负载。
这个想法有一个全局 ResourceManager ( RM ) 以及每个应用程序 ApplicationMaster ( AM )。应用程序可以是单个操作,也可以是作业 DAG。ResourceManager 和 NodeManager 构成数据计算框架。 ResourceManager是系统中所有应用程序之间资源仲裁的最终权威。 NodeManager 是每台机器的框架代理,负责容器,监控其资源使用情况(CPU、内存、磁盘、网络)向ResourceManager/Scheduler。每个应用程序 ApplicationMaster 它实际上是一个特定于框架的库,其任务是与 ResourceManager 协商资源并和 NodeManager 共同执行和监控任务。
#xff0在Hadoop集群中c;YARN主要有以下核心组件:
- ResourceManager(#xfff09资源管理器;:Resourcemanager是YARN集群的主节点,负责管理整个集群的资源分配和运营调度。跟踪可用资源,并为提交给集群的应用程序分配资源。
- NodeManager(节点管理器):Nodemanager在每个集群节点运行,节点上的资源负责管理c;并与ResourceManager通信,报告节点的资源使用情况和可用性。
- ApplicationMaster(#xff09应用程序管理器;:每个提交到YARN集群的应用程序都有相应的ApplicationMaster。Applicationmaster负责与Resourcemanager协商资源,监控操作进度,并向ResourceManager请求更多资源或报告作业完成情况。
ResourceManager 有两个主要组件:Scheduler 与ApplicationsManager。
调度程序负责将资源分配给受熟悉容量、队列等约束的各种应用程序。调度程序是纯调度程序,因为它不监控或跟踪应用程序状态。另外,它不能保证因应用程序故障或硬件故障而重新启动任务。 根据应用程序的资源需求,Scheduler执行其调度功能;是基于资源容器的抽象概念实现的c;资源容器包含内存,CPU、磁盘、网络等元素。
可插入的调度程序,集群资源负责在各种队列和应用程序之间划分。目前的调度程序(例如,CapacityScheduler和FairScheduler;是插件的一些例子。
ApplicationsManager 负责接受操作提交,协商第一个容器执行特定的应用程序 ApplicationMaster 并在失败时重新启动 ApplicationMaster 容器服务。每个应用程序 ApplicationMaster 负责与 Scheduler 协商适当的资源容器,跟踪其状态并监控进度。
hadoop-2.x 中的 MapReduce 与以前的稳定版保持一致 (hadoop-1.x) 的API 兼容性。这意味着一切 MapReduce 作业仍应在 YARN 以上运行只需重新编译即可。
YARN通过Reservationsystem支持资源预留的概念,ReservationSystem 是一个组件,允许用户指定时间限制和时间限制;例如,截止日期)资源配置文件,并预留资源,确保重要作业的可预测执行。随着时间的推移,ReservationSystem跟踪资源,准入控制,并动态指示底层调度程序,以确保预留得到满足。
为了将 YARN 扩展到数千个节点以上YARN通过YARNN Federation功能支持联合概念。多纱线(允许联合透明;子)集群连接,并且使它们显示为单个大型集群。这可以用来实现更大的规模,和/或许允许多独立集群用于非常大的作业,或用于具有跨所有集群容量的租户。
在 YARN 应用程序在上面运行。
- 批处理应用程序:
批处理作业是Hadoop最常见的用例之一,它们通常涉及大规模数据集的分析和处理。使用YARN,可通过Mapreduce框架或其他批处理引擎进行批处理;比如Apache Spark、Apache Flink等)来运行。 - 交互式查询:
交互式查询通常用于即席查询和分析数据。通过YARN,Apache可以在集群上运行 Hive、Apache Impala、Apache 交互式查询引擎,如Drill这些引擎可以实时响应用户的查询请求。 - #xff1流处理应用程序a;
流处理应用程序用于处理和分析实时数据流。通过YARN,流处理引擎可以在集群上运行c;比如Apache Storm、Apache Flink、Apache Kafka Streams等。c;实时处理数据流,生成相应的输出。 - 机器学习和数据挖掘:
YARN还可以支持机器学习和数据挖掘算法的运行。例如,Apache可以使用 Spark机器学习库(MLlib)或Apache Flink机器学习库在集群上训练和部署机器学习模型。 - 计算图:
在图结构数据上进行复杂的分析和计算。通过YARN,图计算引擎可以在集群上运行c;比如Apache Giraph、Apache Spark Graphx等。c;处理大规模图数据。 - 其他类型的应用程序:
另外,YARN还可以支持其他类型的应用程序,包括ETL(Extract-Transform-Load)操作、数据流处理、实时分析等。YARN的通用性和灵活性使其能够满足不同类型应用程序的运行要求。
如何应用程序? YARN 上操作?
- 提交应用程序:
用户通过YARN客户端提交应用程序。在提交过程中,用户需要指定应用程序的资源需求、启动命令、应用程序类型等信息。通常,应用程序的启动命令将包括指定应用程序的jar包或可执行文件、主类名和xff08;Java应用程序)、输入输出路径等信息的应用程序。 - Resourcemanager分配资源a;
ResourceManager收到用户提交的应用程序后,资源分配将根据应用程序的资源需求和集群中的资源情况进行。ResourceManager将为应用程序分配所需的计算资源(ger;如CPU和内存资源)其他必要的资源(如网络带宽)。 - nodeManager启动容器:
一旦资源分配完成Resourcemanager将通知集群中相应的Nodemanager,启动一个或多个容器(在相应的节点;Container)。YARN中的基本执行单位容器c;它包含运行应用程序所需的计算资源、环境变量等信息。 - 应用程序启动:
一旦容器启动,#xff00就完成了c;应用程序的启动命令将被执行。这可能涉及到启动应用程序的主要过程,例如,执行Java的main()方法或操作可执行文件。 - applicationMaster启动:
应用程序的启动过程通常涉及特殊组件,叫ApplicationMaster。Applicationmaster负责与Resourcemanager通信c;协商资源,监控操作进度,并向ResourceManager请求更多资源或报告作业完成情况。ApplicationMaster在集群中的容器中运行,ResourceManager负责启动和监控。 - 操作执行:ApplicationMaster一旦启动c;可以在容器中执行应用程序。根据应用程序的类型和逻辑,它可能涉及数据的读取、处理、计算和生成过程。
- 完成作业:
一旦应用程序完成,Applicationmaster会向resourcemanager报告作业完成情况c;并要求释放所占用的资源。 - 资源释放。
ResourceManager将相应地释放容器所占用的资源,并通知Nodemanager停止相应的容器。到目前为止,应用程序执行过程结束,释放集群资源可用于其他应用程序。