一、介绍下Yarn的框架及其作用
YARN是Apache Hadoop的核心组件之一,用于集群资源的管理和任务调度。YARN的出现主要是为了解决早期Hadoop版本中JobTracker的性能瓶颈和可伸缩性问题。
YARN的框架由两个核心组件组成:资源管理器(ResourceManager)和应用程序管理器(ApplicationMaster),它们共同工作以实现高效的资源管理和任务调度。
-
(1)ResourceManager(资源管理器):
ResourceManager负责整个Hadoop集群的资源分配和管理。它接收来自各个节点的资源申请,并决定如何分配这些资源给不同的应用程序。ResourceManager还负责监控集群中的资源使用情况,并在需要时重新分配资源以提高资源利用率。 -
(2)ApplicationMaster(应用程序管理器):
每个运行在YARN上的应用程序都有一个对应的ApplicationMaster,负责该应用程序的任务调度和资源管理。当一个应用程序需要执行任务时,它会向ResourceManager申请资源,并启动一个ApplicationMaster来协调任务的执行。ApplicationMaster负责与ResourceManager通信,获取分配给应用程序的资源,并将任务分配给集群的节点上的容器进行执行。
YARN的作用主要有以下几个方面:
- (1)高效的资源调度:YARN通过从集群中的节点池中分配资源,实现了更加灵活和高效的资源调度。每个应用程序可以根据自身的需求申请所需的资源,并在任务执行完成后释放这些资源,提高整体的资源利用率。
- (2)多种计算框架支持:YARN不仅支持Hadoop MapReduce计算框架,还可以作为底层资源管理框架来支持其他计算框架(如Apache Spark、Apache Flink等)。这使得用户可以在同- 一集群上运行多种计算工作负载,提高资源的复用性和集群的利用率。
- (3)高可靠性和可扩展性:通过将资源管理和任务调度分离,YARN实现了更好的可扩展性和高可靠性。ResourceManager和ApplicationMaster的分离使得系统可以根据需要增加或减少资源管理器和应用程序管理器的数量,以适应不同规模的集群和任务需求。
- (4)支持多租户和多应用程序:YARN支持在同一个集群上同时运行多个应用程序,并为每个应用程序提供资源独立性和隔离性。这使得用户可以共享同一集群的资源,提高集群的利用率,同时保证各个应用程序之间的资源不互相干扰。
二、介绍下Yarn的任务提交流程
Hadoop中Yarn的任务提交流程如下:
- (1)向YARN提交应用程序,并指定ApplicationMaster程序、启动ApplicationMaster的命令和用户程序。
- (2)ResourceManager为该应用程序分配Container,并与对应的NodeManager进行通信,要求在该Container中启动应用程序的ApplicationMaster。
- (3)ApplicationMaster向ResourceManager注册,并将自身拆分为内部的子任务。它为每个子任务申请资源,并监控它们的运行状态,直到任务全部完成。
- (4)ApplicationMaster使用轮询方式向ResourceManager申请和领取资源。
- (5)ResourceManager为ApplicationMaster分配资源,以Container的形式返回。
- (6)ApplicationMaster与相应的NodeManager通信,要求NodeManager启动任务。
- (7)NodeManager为任务设置合适的运行环境,将任务启动命令写入脚本,并通过运行该脚本来启动任务。
- (8)各个任务定期向ApplicationMaster汇报自己的状态和进度,以便在任务失败时重新启动任务。
- (9)应用程序完成后,ApplicationMaster向ResourceManager注销并关闭自身。
三、YARN支持哪些调度(Scheduler)?
YARN支持多种调度器(Scheduler),包括以下三种常见的调度器:
- (1)Capacity Scheduler:
容量调度器是YARN的默认调度器,它支持将集群资源划分为多个队列,并为每个队列分配一定比例的资源容量。根据队列的优先级和资源需求,容量调度器决定如何分配资源给不同的应用程序。如果某个队列没有使用其全部容量,剩余的资源可以自动分配给其他队列。这使得容量调度器适合多租户环境,可以有效地共享和管理集群资源。 - (2)Fair Scheduler:
公平调度器根据应用程序的公平性原则来分配资源。它将集群资源按照时间片(Fair Share)的方式分配给不同的应用程序,确保每个应用程序都有公平的机会获得资源。如果有多个应用程序要求资源,调度器会尽量均匀地分配资源,避免某个应用程序长期占用过多的资源。公平调度器还支持配置权重和优先级,以满足不同应用程序的需求。 - (3)FIFO Scheduler:
FIFO Scheduler把应用按提交的顺序排成一个队列,先进先出,在进行资源分配的时候,先给队列中最头上的应用进行分配资源,待最头上的应用需求满足后再给下一个分配,以此类推。
但它的缺点是大的应用可能会占用所有集群资源,这就导致其它应用被阻塞。在共享集群中,更适合采用Capacity Scheduler或Fair Scheduler,这两个调度器都允许大任务和小任务在提交的同时获得一定的系统资源。
此外,除了以上三种调度器,YARN还支持自定义调度器,允许用户根据特定需求开发和使用自己的调度算法。用户可以基于YARN提供的调度器接口,实现自定义的调度逻辑,并将其配置为YARN的调度器。这样可以根据具体的业务场景和应用需求,灵活地对资源进行调度和分配。
四、介绍下Yarn的容错机制
YARN是Hadoop生态系统中的资源调度框架,具备多个容错机制来确保集群的稳定运行。以下是YARN的主要容错机制:
-
(1)ResourceManager的容错:
ResourceManager是YARN集群中的主要调度和资源管理器。为了保证其高可用性,YARN提供了ResourceManager的容错机制。通过使用ZooKeeper实现的Active-Standby模式,可以将ResourceManager配置为主备模式,当主要的ResourceManager节点出现故障时,系统会自动切换到备用节点上,从而保证资源调度和管理的连续性。 -
(2)ApplicationMaster的容错:
在YARN中,每个应用程序都有一个对应的ApplicationMaster来管理和监控任务的执行。YARN提供了ApplicationMaster的容错机制,确保应用程序在出现故障或异常情况下能够继续执行。如果ApplicationMaster节点发生故障,YARN会自动重新分配一个新的节点,并将正在执行的任务迁移到新的节点上,从而实现容错和任务恢复。 -
(3)NodeManager的容错:
NodeManager会定期发送心跳以维持通信。如果某个组件长时间没有收到心跳,则会认为该组件出现故障。ResourceManager 会自动检测到节点的失效,并将其上面的Container状态置为失败,最后告诉对应的ApplicationMaster,以决定如何处理这些Container中运行的任务。
五、Spark on yarn 和Hadoop on yarn有什么区别?
Spark on YARN和Hadoop中的YARN是两个不同的概念,虽然它们都与YARN相关,但在功能和使用方式上有所区别。
-
(1)Spark on YARN:
Spark on YARN是指在YARN资源管理框架上运行Apache Spark的一种方式。Spark on YARN允许将Spark作为一个应用程序提交给YARN集群进行资源调度和管理。Spark应用程序通过YARN的资源管理器(ResourceManager)向集群请求所需的资源,并由YARN的应用程序主管(ApplicationMaster)进行任务的调度和监控。通过将Spark on YARN与其他基于YARN的应用程序共享集群资源,可以更有效地利用集群资源,实现资源共享和多任务调度。 -
(2)Hadoop中的YARN:
Hadoop中的YARN是一个用于大数据集群上的资源调度和管理框架。YARN作为Hadoop生态系统的一部分,负责处理不同类型的应用程序对集群资源的请求,以及任务的调度、监控和容错。YARN将集群资源划分为容器(Container),根据应用程序的需求将容器分配给不同的任务执行单元,如MapReduce任务、Spark任务等。YARN还提供了资源管理器(ResourceManager)和应用程序主管(ApplicationMaster)等关键组件来执行资源调度和任务管理。
文章评论