Hadoop資源感知調度器

 

1. 什麼是Hadoop資源感知調度器?

Hadoop資源感知調度器是指調度器根據各個TaskTracker當前資源負載情況(cpu,內存,網絡io等)動態決定將新任務調度給哪個節點處理。

2. Hadoop資源感知調度器的必要性和重要性

當前絕大多數Hadoop調度器是按照slot多少進行調度。在Hadoop中,存在兩種slot:map slot和reduce slot,每個節點可以根據自己實際的CPU個數配置slot個數,一次配好後,啓動Hadoop便不可修改。 一旦某個節點上出現空閒的slot,調度器便會分配一個task給該節點。Slot類似於令牌,map task需要拿到一個map slot纔可運行,類似,reduce task需要拿到一個reduce slot纔可運行,如果當前所有slot都被task佔用了,則剩下的task需要排隊。

瞭解當前調度器的基本原理後,便會發現當前調度器存在很大缺陷。調度器的基本作用是:爲需要計算機資源的任務分配資源,使他們能夠順利完成計算任務。這裏的計算機資源包括cpu,內存,網絡,磁盤等,而當前所有調度器幾乎只考慮了cpu資源,這就導致TaskTracker經常出現OOM或者網絡阻塞等現象,嚴重時,可能會把機器搞掛!

3. 如何設計資源感知調度器?

Hadoop調度器模型實際上是一個典型的任務指派模型,即:資源量是M,任務數是N,如果將這M個資源分配給這N個任務,使他們儘可能利用所有資源,儘快完成任務。

爲了實現該模型,一個Hadoop資源感知調度器需要包括四個模塊:

(1) 信息採集模塊

各個TaskTracker週期性的採集本節點上的資源信息,這些信息主要由兩部分組成:機器總體資源和每個task資源使信息,這裏的資源信息包括cpu使用情況,內存使用情況,網絡和磁盤情況等。爲了減少獲取資源的代價,可以從linux 虛擬文件系統/proc目錄下獲取;

(2) 信息傳輸模塊

TaskTracker採集的資源信息通過heartbeat發送給JobTracker,默認情況下,heartbeat發送週期是3s。完了完成該模塊,需要稍微修改一下Hearbeat包;

(3) 信息聚集模塊

JobTracker收集到信息後,會進行聚集,如:以job爲單位做統計等;

(4) 作業調度模塊

調度器從JobTracker上獲取各個節點資源使用情況,並以此制定調度策略。

4. 資源感知調度器難度在哪?

Hadoop感知調度器最大難度在於調度,這實際上一個多目標決策問題,理論上沒有最優解,一般需要設計啓發式算法。

5. 資源感知調度器方面的資料

(1)https://issues.apache.org/jira/browse/MAPREDUCE-220

(2)論文:Towards a Resource Aware Scheduler in Hadoop http://www-personal.umich.edu/~shiwali/images/hadoop.pdf

(3)Multiple-Job Optimization in MapReduce for Heterogeneous Workloads

Weisong Hu; Chao Tian; Xiaowei Liu; Hongwei Qi; Li Zha; Huaming Liao; Yuezhuo Zhang; Jie Zhang;

Semantics Knowledge and Grid (SKG), 2010 Sixth International Conference on

6. 說明

Hadoop自帶的Capacity Scheduler能夠調度大內存任務,原理是:默認情況下每個slot對應一個內存量,當用戶提交作業時,需配置一個task需要的內存量,然後兩個值相除取丄整便得到了一個task對應的slot數。如:你提交了一個作業,告訴調度器一個task要使用4GB內存,而默認情況下一個slot對應2GB內存,則沒運行一個你的task,會使用2個slot。

原創文章,轉載請註明: 轉載自董的博客

本文鏈接地址: http://dongxicheng.org/mapreduce/hadoop-resource-aware-scheduler/

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