1. 简述Yarn集群的架构
YARN(Yet Another Resource Negotiator)是Hadoop 2.x引入的资源管理器,用于管理Hadoop集群中的资源和作业调度。YARN的架构设计使得Hadoop可以运行更多类型的应用程序,而不仅仅是MapReduce。以下是YARN集群的主要组件和架构:
-
ResourceManager(资源管理器):
- ResourceManager是YARN的主要组件之一,负责整个集群的资源管理和作业调度。
- ResourceManager有两个主要组件:Scheduler(调度器)和 ApplicationsManager(应用程序管理器)。
- Scheduler负责为提交的作业分配资源,并监控资源的使用情况。
- ApplicationsManager负责接收来自客户端的作业提交请求,并为每个作业分配一个ApplicationMaster。
-
NodeManager(节点管理器):
- NodeManager是运行在集群中每个节点上的代理,负责本地资源的管理和任务的监控。
- NodeManager负责与ResourceManager通信,报告节点的资源使用情况,并接收来自ResourceManager的任务分配。
-
ApplicationMaster(应用程序主管):
- ApplicationMaster是运行在集群中每个作业所分配的节点上的进程,负责管理该作业的执行过程。
- 每个作业都有一个对应的ApplicationMaster,它负责与ResourceManager交互,请求资源、监控任务的执行进度,并处理任务执行过程中的错误。
-
Container(容器):
- Container是YARN中的基本单位,用于表示分配给作业的资源,如CPU、内存等。
- 每个任务都运行在一个容器中,NodeManager负责启动和监控容器的执行。
-
ResourceManager和NodeManager通信:
- ResourceManager和NodeManager之间通过心跳机制保持通信。
- NodeManager会定期向ResourceManager发送心跳,报告节点的资源使用情况和容器状态。
- ResourceManager通过心跳机制监控节点的健康状态,并根据需要进行资源重新分配。
总体而言,YARN集群的架构是一个分布式资源管理系统,通过ResourceManager和NodeManager协同工作,实现对集群资源的有效管理和作业调度,支持多种类型的应用程序运行在Hadoop集群中。
2. Yarn 的任务提交流程是怎样的?
YARN的任务提交流程涉及到客户端、ResourceManager、NodeManager和ApplicationMaster之间的协作。以下是一般情况下YARN任务提交的流程:
-
客户端提交作业:
- 用户使用命令行工具(如
yarn
命令)或编程接口(如YARN API)提交作业到YARN集群。 - 客户端会向ResourceManager提交作业的描述信息,包括作业的名称、资源需求、运行命令等。
- 用户使用命令行工具(如
-
ResourceManager接收作业请求:
- ResourceManager接收到作业请求后,将请求转发给ApplicationsManager。
-
ApplicationsManager接收作业请求:
- ApplicationsManager负责接收来自客户端的作业请求。
- 它为每个作业分配一个唯一的作业ID,并启动一个新的ApplicationMaster来管理该作业。
-
启动ApplicationMaster:
- ResourceManager将作业的描述信息发送给NodeManager所在的节点,请求启动ApplicationMaster。
- NodeManager收到请求后,启动一个新的进程,即ApplicationMaster,以便管理该作业的执行过程。
-
ApplicationMaster向ResourceManager注册:
- ApplicationMaster启动后,首先会向ResourceManager注册自己。
- 注册过程中,ApplicationMaster会提供作业的描述信息,包括作业ID、资源需求等。
-
资源分配给作业:
- ResourceManager收到ApplicationMaster的注册请求后,根据作业的资源需求和集群的资源情况,为该作业分配适当的资源(如CPU、内存等)。
-
执行作业任务:
- ApplicationMaster根据ResourceManager分配的资源,向ResourceManager请求运行容器(Container)。
- ResourceManager根据容器的需求和集群的资源情况,在合适的节点上启动容器,并分配给作业执行。
- NodeManager接收到容器启动请求后,启动容器并运行作业任务。
-
监控作业执行:
- ApplicationMaster负责监控作业任务的执行进度、容器的状态以及节点的健康状况。
- 如果有任何错误或容器失败,ApplicationMaster会向ResourceManager报告,并请求重新分配资源。
-
作业完成和资源释放:
- 当作业执行完成时,ApplicationMaster会向ResourceManager发送作业完成的通知。
- ResourceManager接收到通知后,释放与该作业相关的资源,并清理作业的状态信息。
总体而言,YARN任务提交流程涉及到客户端提交作业、ResourceManager接收作业请求、ApplicationsManager分配ApplicationMaster、启动ApplicationMaster、资源分配和执行作业任务等多个阶段。这些组件之间的协作确保了作业能够在集群中有效地执行。
3. yarn的资源调度的三种模型
YARN(Yet Another Resource Negotiator)的资源调度模型是设计用于管理和分配Hadoop集群中的资源。它支持多种资源调度模型,其中最常见的三种模型包括:FIFO调度器、容量调度器和公平调度器。
-
FIFO调度器(First-In-First-Out):
- FIFO调度器是YARN最简单的调度模型,它按照作业提交的顺序依次分配资源。
- 当作业提交时,FIFO调度器将分配整个集群中的第一个可用资源给该作业,而不考虑其他作业的需求和资源利用率。
- 这意味着,如果一个大型作业先于多个小型作业提交,则大型作业将占用所有资源,小型作业需要等待大型作业完成才能运行。
-
容量调度器(Capacity Scheduler):
- 容量调度器是YARN的高级调度模型,它允许管理员将集群资源划分为多个独立的队列,并为每个队列分配一定的资源容量。
- 每个队列可以配置不同的调度策略,如FIFO、公平调度等,以满足不同队列的需求。
- 容量调度器允许管理员为不同的用户、部门或应用程序分配独立的队列,并确保它们不会相互干扰。
- 该调度器还支持优先级调度,管理员可以为队列配置不同的优先级,以确保重要作业优先获得资源。
-
公平调度器(Fair Scheduler):
- 公平调度器是另一种高级调度模型,它旨在提供更加公平和灵活的资源分配方式。
- 公平调度器将集群资源按照作业的需求动态分配,以确保所有作业都能获得相等的资源份额。
- 该调度器根据作业的需求和优先级动态调整资源分配,以最大程度地提高集群资源的利用率和作业的执行效率。
- 公平调度器还支持弹性资源池,允许多个队列共享同一池的资源,并根据实际需求动态分配资源。
总的来说,FIFO调度器、容量调度器和公平调度器是YARN中常用的三种资源调度模型,每种模型都有其适用的场景和优缺点。管理员可以根据集群的特点和需求选择合适的调度模型来管理和优化资源分配。