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 等大數據技術的關鍵一步!