Hadoop YARN:分布式集群资源管理系统详解
1. 什么是YARN?
YARN(Yet Another Resource Negotiator)是 Apache Hadoop 生态系统中的资源管理和作业调度系统,最初在 Hadoop 2.0 中引入,取代了 Hadoop 1.0 的 MapReduce 1(MRv1) 架构。它的核心目标是提高集群资源利用率,并支持多种计算框架(如 MapReduce、Spark、Flink 等)在同一个集群上运行。
2. YARN 的核心作用
YARN 的主要职责是:
- 资源管理:统一管理 Hadoop 集群的计算资源(CPU、内存等)。
- 任务调度:协调不同应用程序(如 MapReduce、Spark)的资源分配。
- 多框架支持:允许不同的计算引擎(如批处理、流处理、机器学习)共享集群资源。
3. YARN 的架构
YARN 采用 主从(Master-Slave)架构,主要由以下三个核心组件组成:
(1) ResourceManager(RM)
- 集群资源的总调度者,负责全局资源分配。
- 包含两个子组件:
- Scheduler(调度器):负责分配资源(不监控任务状态)。
- ApplicationsManager(应用管理器):负责接收任务提交、启动 ApplicationMaster 等。
(2) NodeManager(NM)
- 每个工作节点(DataNode)上的代理,负责:
- 向 ResourceManager 汇报本节点的资源(CPU、内存)。
- 管理 Container(容器),执行具体的计算任务。
(3) ApplicationMaster(AM)
- 每个应用程序(如 MapReduce、Spark Job)的专属管理者,负责:
- 向 ResourceManager 申请资源。
- 与 NodeManager 协作启动和监控任务(如 Map Task、Reduce Task)。
4. YARN 的工作流程
- 客户端提交任务(如
hadoop jar
提交 MapReduce 作业)。 - ResourceManager 分配 ApplicationMaster:
- RM 选择一个 NodeManager 启动 AM。
- ApplicationMaster 申请资源:
- AM 向 RM 申请 Container(计算资源单元)。
- NodeManager 启动任务:
- RM 分配 Container 后,NM 启动具体的 Task(如 Map Task)。
- 任务执行与监控:
- AM 监控任务状态,失败时申请新资源重试。
- 任务完成,释放资源:
- AM 向 RM 注销,释放占用的资源。
5. YARN 的调度器
YARN 支持多种调度策略,常见的有:
调度器 | 特点 | 适用场景 |
---|---|---|
FIFO Scheduler | 先进先出,简单但资源利用率低 | 测试环境 |
Capacity Scheduler | 队列划分,保证资源隔离(Hadoop 默认) | 多租户集群 |
Fair Scheduler | 动态平衡资源,公平共享 | 混合负载(如批处理 + 交互式查询) |
6. YARN 的优势
- 高资源利用率:多个框架共享集群,避免资源浪费。
- 扩展性:支持数千节点的大规模集群。
- 灵活性:不仅支持 MapReduce,还能运行 Spark、Flink、Tez 等。
- 多租户支持:通过队列管理不同团队/任务优先级。
7. YARN 的局限性
- 不适合低延迟任务:默认调度策略对实时计算(如 Storm)支持较弱。
- 资源隔离依赖 Container:若任务异常(如内存泄漏),可能影响整个节点。
- 小文件处理效率低:Hadoop 生态的通病,需结合其他优化手段。
8. YARN 的应用场景
- 批处理计算:MapReduce、Hive 查询
- 交互式分析:Spark SQL、Presto
- 流处理:Flink、Spark Streaming
- 机器学习:TensorFlow on YARN、MLlib
9. 总结
YARN 是 Hadoop 2.0+ 的核心资源管理层,它通过解耦资源管理和任务调度,使 Hadoop 从单一的 MapReduce 计算框架演变为支持多种计算模式的通用大数据平台。尽管后续出现更轻量的资源管理工具(如 Kubernetes),YARN 仍是企业级 Hadoop 生态的基石。
学习建议:掌握 YARN 的架构和调度原理,是深入理解 Hadoop、Spark 等大数据技术的关键一步!