第六周
YARN 作为 Hadoop 的资源管理与任务调度框架,其核心组件包括 ResourceManager、NodeManager 和 ApplicationMaster,它们协同工作实现集群资源的高效分配与任务管理。ResourceManager 作为 YARN 的核心,运行在主节点上,负责整个集群的资源管理与任务调度,主要包含 Scheduler 和 ApplicationsManager 两个模块。Scheduler 根据集群资源情况和调度策略,将 CPU、内存等资源分配给不同的应用程序;ApplicationsManager 则负责接收应用程序的提交请求,为应用程序启动 ApplicationMaster,并在 ApplicationMaster 故障时重新启动。
NodeManager 运行在从节点上,负责管理本节点的资源,执行 ResourceManager 分配的任务。NodeManager 会实时向 ResourceManager 汇报本节点的资源使用情况(如 CPU 使用率、内存剩余量等),并根据 ResourceManager 的指令,启动或停止 Container(容器)。Container 是 YARN 中资源分配的基本单位,每个 Container 包含一定量的 CPU、内存等资源,应用程序的任务(如 Map 任务、Reduce 任务)在 Container 中运行,确保不同任务之间的资源隔离,避免相互干扰。
ApplicationMaster 则是每个应用程序的 “管家”,由 ApplicationsManager 启动,负责与 ResourceManager 和 NodeManager 通信,协调应用程序的资源分配与任务执行。ApplicationMaster 会根据应用程序的需求,向 ResourceManager 申请资源(Container),并将申请到的资源分配给具体的任务,同时监控任务的执行状态,在任务故障时重新申请资源启动任务,确保应用程序顺利完成。
ResourceManager 与 NodeManager 的协作流程如下:首先,NodeManager 启动后,向 ResourceManager 注册,并周期性地汇报本节点的资源状态;当用户提交应用程序时,ApplicationsManager 为应用程序启动 ApplicationMaster;ApplicationMaster 向 ResourceManager 的 Scheduler 申请资源,Scheduler 根据调度策略为 ApplicationMaster 分配 Container;ApplicationMaster 获取 Container 后,向对应的 NodeManager 发送指令,启动 Container 并运行任务;任务执行过程中,NodeManager 实时监控 Container 的资源使用情况和任务执行状态,并汇报给 ApplicationMaster;任务完成后,ApplicationMaster 向 ApplicationsManager 汇报任务执行结果,ApplicationsManager 通知 ResourceManager 释放资源,整个流程结束。
多租户资源隔离是 YARN 的重要特性,通过队列配置可实现不同租户或应用程序之间的资源隔离,常见的调度器包括 FairScheduler 和 CapacityScheduler。FairScheduler 采用公平调度策略,确保每个应用程序都能获得公平的资源分配,当集群资源充足时,每个应用程序可获得足够的资源;当资源紧张时,FairScheduler 会根据应用程序的优先级和资源需求,调整资源分配,确保每个应用程序都能获得相对公平的资源。CapacityScheduler 则采用容量调度策略,为每个队列分配一定比例的集群资源,队列内的应用程序共享该队列的资源,同时允许队列之间共享资源(如某个队列资源空闲时,其他队列可借用其资源),确保集群资源的高效利用。
在 yarn-site.xml 文件中配置调度器类型为 CapacityScheduler: