YARN(Yet Another Resource Negotiator) 是 Apache Hadoop 的核心组件之一,负责集群的资源管理和任务调度。它的主要作用是将 Hadoop 的资源管理和作业调度/监控功能分离,形成一个通用的资源管理平台,可以支持多种计算框架(如 MapReduce、Spark、Flink 等)。
YARN 的核心功能
-
资源管理(Resource Management)
-
管理集群的 CPU、内存等计算资源,并按需分配给不同的应用程序。
-
通过 ResourceManager(RM) 和 NodeManager(NM) 实现全局资源调度和节点级资源监控。
-
-
任务调度(Job Scheduling)
-
支持多种调度策略(如 FIFO、Capacity Scheduler、Fair Scheduler)。
-
确保不同任务公平或按优先级获取资源。
-
-
多计算框架支持
-
不仅支持 Hadoop MapReduce,还支持 Spark、Flink、Tez 等分布式计算框架。
-
YARN 的架构
YARN 采用 Master/Slave 架构,主要包含以下组件:
组件 | 角色 |
---|---|
ResourceManager (RM) | 集群资源的全局管理者,负责调度和分配资源。 |
NodeManager (NM) | 每个工作节点上的代理,负责管理本节点的资源(CPU、内存)并执行任务。 |
ApplicationMaster (AM) | 每个应用程序(如 MapReduce 作业)的管理者,负责向 RM 申请资源,并与 NM 协调任务执行。 |
Container | 资源的抽象单位(如 2 CPU + 4GB 内存),用于运行任务。 |
YARN 的工作流程(以 MapReduce 为例)
-
客户端提交作业 → RM 接收请求。
-
RM 分配 Container → 启动 ApplicationMaster(AM)。
-
AM 向 RM 申请资源 → RM 分配 Container。
-
AM 与 NM 通信 → 在 Container 中启动 Map/Reduce 任务。
-
任务执行完成 → AM 向 RM 注销并释放资源。
YARN 的优势
✅ 高资源利用率:动态分配资源,避免资源浪费。
✅ 多框架支持:不仅限于 MapReduce,还可运行 Spark、Flink 等。
✅ 可扩展性:支持大规模集群(数千节点)。
✅ 灵活性:支持不同的调度策略(如公平调度、容量调度)。
总结
YARN 是 Hadoop 的资源管理和任务调度系统,它的核心作用是:
-
管理集群资源(CPU、内存)。
-
调度任务(支持多种计算框架)。
-
提高资源利用率(动态分配,避免浪费)。
它是 Hadoop 2.x 及以后版本的核心组件,取代了 Hadoop 1.x 中的 JobTracker/TaskTracker 架构,使 Hadoop 从单一的 MapReduce 计算框架演变为一个通用的分布式计算平台。