Yarn的基本结构

Yarn(Yet Another Resource Negotiator)是Hadoop中的一个集群资源管理系统,用于替代MapReduce中的资源管理和作业调度。Yarn的基本结构由ResourceManager(资源管理器)、NodeManager(节点管理器)、ApplicationMaster(应用程序管理器)和Container(任务容器)组成。

1. ResourceManager(资源管理器):负责整个集群的资源管理和作业调度。ResourceManager维护整个集群的资源状态,并接收客户端的作业提交请求,将作业分配给合适的NodeManager执行。

2. NodeManager(节点管理器):负责单个节点的资源管理。NodeManager管理本地节点上的资源使用情况,并向ResourceManager汇报节点的资源状态。同时,NodeManager还负责启动和监控运行在该节点上的任务,以及在任务失败时进行容错处理。

3. ApplicationMaster(应用程序管理器):负责单个作业的执行和管理。每个作业都有一个对应的ApplicationMaster,用于向ResourceManager请求资源,并协调和监控作业的执行过程。ApplicationMaster运行在一个容器内,它会与NodeManager通信来启动、监控和管理作业执行过程中的任务。

4. Container(任务容器):是Yarn中的基本执行单位。Container是在NodeManager上创建和管理的,用于运行作业的不同任务。NodeManager为每个Container分配一定的内存和CPU资源,以及其他必要的资源,然后将Container分配给ApplicationMaster,再由ApplicationMaster分配给具体的任务执行。

Yarn的运行原理

Yarn的运行原理主要分为作业提交阶段、资源调度阶段和任务执行阶段。

1. 作业提交阶段

在作业提交阶段,客户端向ResourceManager发送作业的提交请求。ResourceManager接收到请求后,会为该作业分配一个ApplicationMaster,并为ApplicationMaster分配相应的资源。ApplicationMaster会在容器中启动,并向ResourceManager注册自己,表示已准备好接收任务的分配。

2. 资源调度阶段

在资源调度阶段,ApplicationMaster向ResourceManager申请执行任务所需的资源。ResourceManager通过集群中的节点资源情况和任务的需求来进行资源调度决策,然后将资源的分配情况发送给ApplicationMaster。ApplicationMaster收到资源分配后,即可将任务分配给空闲的容器进行执行。

3. 任务执行阶段

在任务执行阶段,容器内的任务启动并运行。任务会向ApplicationMaster发送心跳消息,以汇报任务的执行状态和进度。同时,ApplicationMaster会监控任务的执行情况,并根据任务的执行结果来做相应的处理,例如重新分配任务、重新申请资源或标记任务失败等。