hadoop調度器的原理和應用場景解析

前置篇:

爲從根本上解決舊 MapReduce 框架的性能瓶頸,促進 Hadoop 框架的更長遠發展,從 0.23.0 版本開始,Hadoop 的 計算框架完全重構,發生了根本的變化。新的 Hadoop MapReduce 框架命名爲 Yarn,重構根本的思想是將 JobTracker 兩個主要的功能分離成單獨的組件,這兩個功能是計算資源管理和任務調度 / 監控。ResourceManager
全局管理所有應用程序計算資源的分配,每一個應用的 ApplicationMaster 負責相應的調度和協調, 結合從 ResourceManager 獲得的資源和 NodeManager 協同工作來運行和監控任務。

以下是對每個部件職責的更詳細解釋。

ResourceManager:基於應用程序對資源的需求進行調度 ,每一個應用程序需要不同類型的資源因此就需要不同的容器。資源包括:內存,CPU,磁盤,網絡等等。資源管理器提供一個調度策略的插件,它負責將集羣資源分配給多個隊列和應用程序。調度插件可以基於現有的能力調度和公平調度模型。

NodeManager:是每一臺機器框架的代理,是執行應用程序的容器,監控應用程序的資源使用情況 (CPU,內存,硬盤,網絡 ) 並且向調度器彙報。

ApplicationMaster:向調度器索要適當的資源容器,運行任務,跟蹤應用程序的狀態和監控它們的進程,處理任務的失敗原因。用戶每提交一個應用程序都會爲之創建一個ApplicationMaster。ApplicationMaster取決於用戶提交的應用程序的數量。首先應用程序會提交給ResourceManager,然後ResourceManager爲這個應用程序創建了一個ApplicationMaster。後面的資源分配以及任務執行都是圍繞ApplicationMaster進行的。

正文篇:

接下來就一起研究一下包括FIFO調度器、Capacity調度器、Fair調度器在內的三個調度器。

一、FIFO調度器(先進先出調度)
hadoop調度器的原理和應用場景解析
上圖爲FIFO調度器的執行過程示意圖。
FIFO Scheduler是最簡單也是最容易理解的調度器,它缺點是不適用於共享集羣。大的應用可能會佔用所有集羣資源,這就導致其它應用被阻塞。在共享集羣中,更適合採用Capacity Scheduler或Fair Scheduler,這兩個調度器都允許大任務和小任務在提交的同時獲得一定的系統資源。從執行過程圖中可以看出,在FIFO 調度器中,小任務會被大任務阻塞。

二、Capacity調度器(容量預先分配調度)
hadoop調度器的原理和應用場景解析
上圖爲Capacity調度器的執行過程示意圖。
而對於Capacity調度器,有一個專門的隊列用來運行小任務,但是爲小任務專門設置一個隊列會預先佔用一定的集羣資源,這就導致大任務的執行時間會落後於使用FIFO調度器時的時間。

三、Fair調度器(公平分配調度)
hadoop調度器的原理和應用場景解析
上圖爲Fair調度器的執行過程示意圖。
在Fair調度器中,我們不需要預先佔用一定的系統資源,Fair調度器會爲所有運行的job動態的調整系統資源。如下圖所示,當第一個大job提交時,只有這一個job在運行,此時它獲得了所有集羣資源;當第二個小任務提交後,Fair調度器會分配一半資源給這個小任務,讓這兩個任務公平的共享集羣資源。
需要注意的是,在Fair調度器圖中,從第二個任務提交到獲得資源會有一定的延遲,因爲它需要等待第一個任務釋放佔用的Container。小任務執行完成之後也會釋放自己佔用的資源,大任務又獲得了全部的系統資源。最終的效果就是Fair調度器即得到了高的資源利用率又能保證小任務及時完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章