hdfs(hadoop Distributed File System)的資源調度主要通過yarn(Yet Another Resource Negotiator)來實現。YARN是一個資源調度平臺,負責為運行在Hadoop集群上的應用程序提供資源管理和調度服務。以下是HDFS資源調度的實現方式:
YARN架構和資源調度簡介
- ResourceManager:處理客戶端請求,監控NodeManager的啟動或監控ApplicationMaster資源的分配與調度,包含調度器(Scheduler)、應用程序管理器(ApplicationsManager)。
- NodeManager:管理單個節點上的資源,處理來自ResourceManager的命令,處理來自ApplicationMaster的命令。
- ApplicationMaster:為應用程序申請資源并分配內部任務,任務的監控與容錯。
- Container:YARN資源的抽象封裝,某個節點的多維度資源(內存、CPU、磁盤、網絡等),Task都是在一個容器里執行完成的,容器大小可以動態調整。
工作機制
- 客戶端提交mapreduce作業到客戶端所在的節點,YARN Runner向ResourceManager申請一個Application。
- ResourceManager將該應用程序的資源路徑返回給YARN Runner,程序將運行所需資源提交到HDFS上。
- 程序資源提交完畢后,申請運行mapreduce AppMaster。
- ResourceManager將用戶的請求初始化成一個Task,其中一個NodeManager領取到Task任務,該NodeManager創建Container,并產生MapReduce AppMaster。
- Container從HDFS上拷貝資源到本地,MapReduce AppMaster向ResourceManager申請運行MapTask資源,ResourceManager將運行MapTask任務分配給另外兩個NodeManager,這兩個NodeManager分別領取任務并創建Container。
- Map向兩個接收到任務的NodeManager發送程序啟動腳本,這兩個NodeManager分別啟動MapTask,MapTask對數據分區排序。
- MapReduce AppMaster等待所有MapTask運行完畢后,向ResourceManager申請容器,運行ReduceTask。
- ReduceTask向MapTask獲取相應分區的數據,程序運行完畢后,MapReduce AppMaster會向ResourceManager申請注銷自己。
調度器和調度算法
目前,Hadoop作業調度器主要有三種:FIFO(先進先出)、Capacity Scheduler和Fair Scheduler。
- FIFO:按照作業提交的順序執行任務,簡單但可能導致資源浪費。
- Capacity Scheduler:為不同的隊列分配固定比例的資源,保證資源的合理利用和作業的公平執行。
- Fair Scheduler:根據隊列的資源需求和作業的歷史資源使用情況進行資源分配,更加公平。
通過上述機制,HDFS能夠有效地管理和調度集群資源,確保數據的高可用性、可靠性和高效性。