&&大数据学习&&
🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞
一、YARN概述
1. YARN简介
Hadoop-YARN是Apache Hadoop生态系统中的一个集群资源管理器。它作为Hadoop的第二代资源管理框架,负责管理和分配集群中的计算资源。YARN的设计目标是提供一个通用的资源管理框架,使得Hadoop集群可以同时运行多个计算框架,如MapReduce、Apache Spark、Apache Flink等。通过将集群资源和计算任务分离,YARN实现了更高的资源利用率和更好的集群资源管理。

2. YARN架构
Hadoop-YARN的架构包括以下组件:
(1) ResourceManager(资源管理器)
ResourceManager是YARN集群的主要组件,负责整个集群的资源管理和分配。它有两个关键角色:调度器(Scheduler)和应用程序管理器(ApplicationManager)。
调度器负责将集群中的资源分配给不同的应用程序。它根据资源请求、优先级和调度策略来决定如何分配资源。调度器可以使用不同的调度算法,如容量调度器(Capacity Scheduler)或公平调度器(Fair Scheduler)。
应用程序管理器负责接收来自客户端的作业提交请求,并与调度器协商资源。一旦应用程序被接受,应用程序管理器会为该应用程序分配一个ApplicationMaster。
(2) NodeManager(节点管理器)
NodeManager是每个集群节点上的代理,负责管理该节点上的资源。它接收来自ResourceManager的指令,并执行以下任务:
启动和监控容器(Container):容器是YARN中的一个抽象概念,它是一组资源(如内存、CPU等)的封装。NodeManager根据ResourceManager的指令启动和监控容器,为应用程序提供所需的资源。
报告节点的资源使用情况:NodeManager定期向ResourceManager报告节点的资源使用情况,包括可用资源和已使用资源。
(3) ApplicationMaster(应用程序管理器)
每个应用程序在YARN中都有一个ApplicationMaster,它负责与ResourceManager协商资源,并与NodeManager一起管理应用程序的执行。
向ResourceManager请求资源:ApplicationMaster根据应用程序的需求向ResourceManager请求资源。它可以动态地请求和释放资源,根据应用程序的需求进行灵活的资源调整。
与NodeManager协调任务执行:一旦资源被分配给应用程序,ApplicationMaster与NodeManager协调任务的执行。它可以启动、监控和管理任务容器,并与NodeManager通信以获取任务的执行状态。
3. YARN特点
Hadoop-YARN具有以下特点:
(1) 分布式资源管理
YARN提供了分布式资源管理的能力,可以有效地管理和分配集群中的计算资源。它将集群资源(如内存、CPU等)与计算任务(如MapReduce作业)分离,实现了更高的资源利用率和更好的集群资源管理。
(2) 多框架支持
YARN设计为通用的资源管理框架,可以同时运行多个计算框架,如MapReduce、Apache Spark、Apache Flink等。这意味着在同一个集群上可以运行不同的计算框架,根据不同的需求选择最适合的框架进行数据处理和分析。
(3) 灵活的资源调度
YARN提供了灵活的资源调度机制,可以根据应用程序的需求动态分配和调整资源。它支持不同的调度算法,如容量调度器(Capacity Scheduler)和公平调度器(Fair Scheduler),可以根据优先级、资源请求和调度策略来决定资源的分配。
(4) 高可靠性和容错性
YARN具有高可靠性和容错性的特点。它通过监控和管理应用程序的执行,可以检测和处理节点故障、任务失败等情况。当节点或任务发生故障时,YARN可以自动重新分配资源和重新执行任务,确保作业的完成和数据的一致性。
(5) 可扩展性
YARN的设计目标之一是可扩展性,它可以适应不断增长的数据规模和计算需求。通过添加更多的节点和资源,YARN可以扩展到大规模的集群,处理更多的数据和作业。
(6) 安全性
YARN提供了安全性机制,可以保护集群中的数据和应用程序免受未经授权的访问和恶意操作。它支持身份验证、授权和审计等安全功能,确保集群的安全性和数据的保护。
二、YARN的核心思想
YARN的核心思想是将资源管理和作业调度从特定的计算框架(如MapReduce)中分离出来使其成为单独的守护进程,使得Hadoop集群能够更通用地支持多种类型的应用程序和工作负载。
这个想法是拥有一个全局的 ResourceManager ( RM ) 和每个应用程序 的 ApplicationMaster ( AM )。应用程序可以是单个作业,也可以是作业的 DAG。ResourceManager 和 NodeManager 构成了数据计算框架。 ResourceManager是系统中所有应用程序之间资源仲裁的最终权威。 NodeManager 是每台机器的框架代理,负责容器、监视其资源使用情况(CPU、内存、磁盘、网络)并将其报告给ResourceManager/Scheduler 。每个应用程序的 ApplicationMaster 实际上是一个特定于框架的库,其任务是与 ResourceManager 协商资源并与 NodeManager 一起执行和监视任务。 (ApplicationMaster 是由应用程序框架(如 MapReduce、Spark、Impala 等)提供的。每个框架都会根据自己的需求和特点来实现 ApplicationMaster。这也意味着,不同的应用程序框架会有不同的 ApplicationMaster 实现,它们负责处理与框架相关的特定逻辑。)
为了将 YARN 扩展至数千个节点以上,YARN通过YARN Federation功能支持联合概念。联合允许透明地将多个纱线(子)集群连接在一起,并使它们显示为单个大型集群。这可用于实现更大的规模,和/或允许多个独立集群一起用于非常大的作业,或用于具有跨所有集群的容量的租户。
(YARN Federation通过逻辑统一资源池、智能请求路由、全局资源调度等机制,显著提高了大型Hadoop集群的资源管理和调度能力。)
在 YARN 上运行的应用程序

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

1、应用程序提交
- 提交信息:用户通过YARN客户端提交应用程序时,确实需要指定应用程序的资源需求、启动命令、应用程序类型等信息。这些信息通常以配置文件或命令行参数的形式提供。
- 启动命令:对于Java应用程序,启动命令通常会包括指定应用程序的jar包、主类名以及任何必要的命令行参数。对于其他类型的应用程序(如Python脚本、Shell脚本等),启动命令也会有相应的调整。
2、ResourceManager分配资源
- 资源需求:ResourceManager在分配资源时,会考虑应用程序的资源需求以及集群中的资源情况。资源需求通常包括CPU、内存、磁盘空间等。
- 资源分配策略:ResourceManager会根据配置的调度策略(如FIFO、Capacity Scheduler、Fair Scheduler等)来分配资源。这些策略决定了资源的分配方式和优先级。
3、NodeManager启动容器
- 容器启动:一旦ResourceManager完成资源分配,它会通知相应的NodeManager启动容器。容器是YARN中的基本执行单位,它封装了运行应用程序所需的计算资源、环境变量等信息。
- 资源隔离:NodeManager通过资源隔离机制(如cgroups)确保容器内的任务不会互相干扰,并且每个容器都只能访问其分配到的资源。
4、应用程序启动
- 启动命令执行:在容器启动完成后,NodeManager会执行应用程序的启动命令。这可能涉及启动应用程序的主进程,例如执行Java的main()方法、运行Python脚本或Shell脚本等。
4、ApplicationMaster启动
- ApplicationMaster角色:ApplicationMaster是一个特殊的组件,它负责与ResourceManager通信,协商资源、监控作业进度,并向ResourceManager请求更多资源或报告作业完成情况。
- 启动与监控:ApplicationMaster运行在集群中的一个容器中,并由ResourceManager负责启动和监控。一旦ApplicationMaster启动,它就会开始与ResourceManager进行交互,以确保应用程序能够顺利执行。
5、作业执行
- 执行过程:一旦ApplicationMaster启动,应用程序就可以开始在容器中执行。根据应用程序的类型和逻辑,它可能会涉及到数据的读取、处理、计算以及生成结果等过程。
- 任务调度:ApplicationMaster会根据应用程序的需求和集群中的资源情况,调度任务在相应的容器上执行。
6、作业完成
- 完成报告:一旦应用程序执行完成,ApplicationMaster会向ResourceManager报告作业完成情况,并请求释放所占用的资源。
- 资源释放:ResourceManager会相应地释放容器所占用的资源,并通知NodeManager停止相应的容器。至此,应用程序的执行过程结束,集群资源被释放,可以被其他应用程序使用。