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的核心思想是将资源管理和作业调度从特定的计算框架(如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 上运行的应用程序
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的通用性和灵活性使得它能够满足不同类型应用程序的运行需求。