在 Apache Hadoop YARN 中,请解释容器(Container)的定义,并说明它在资源管理机制中如何参与资源的申请、分配与隔离。
考察说明
考查对 YARN 核心抽象概念的理解,以及资源调度过程的认知。
回答思路
- 【回答框架 1】容器是 YARN 中资源分配和任务运行的基本单位,它封装了单个节点上分配给某个应用程序的一组资源,包括 CPU、内存等,并附带本地化依赖和启动命令。容器由 ResourceManager 负责分配,NodeManager 负责启动和管理其生命周期。
- 【回答框架 2】当应用提交后,ApplicationMaster 向 ResourceManager 申请资源,RM 的调度器(如 Capacity Scheduler 或 Fair Scheduler)根据集群资源和队列策略,在合适的 NodeManager 上为任务分配一个或多个容器。RM 通过心跳将容器分配信息告知 NM,NM 负责创建容器进程并监控其资源使用。
- 【回答框架 3】容器通过 Linux Cgroups 或 Docker 等机制实现资源隔离,确保不同容器之间的 CPU、内存使用互不干扰。容器内的任务可以运行一个或多个进程,但整体资源使用不能超出容器配额,否则可能被 NM 强制终止。
- 【回答框架 4】容器是动态的,每个容器只服务于一个特定的任务,任务完成后容器即被回收,资源归还给集群,再由调度器重新分配。容器因此成为资源利用率调度的核心单位,它决定了并行度和执行效率。
- 【关键点 1】容器是 YARN 资源分配的基本单位,封装资源并隔离执行环境。
- 【关键点 2】ResourceManager负责分配容器,NodeManager负责启动和监控。
- 【关键点 3】容器资源使用受限额约束,可通过Cgroups等隔离机制保障。
- 【关键点 4】容器生命周期短暂,任务完成即释放资源,实现弹性调度。
- 【易错点 1】容器只是资源抽象,不保证运行中的任务幂等性,需要应用层保证。
- 【易错点 2】资源分配决策受调度器策略影响,实际分配量可能小于申请量,需考虑配额与队列限制。