Xendesktop 可基於物理機及虛擬機器的桌面控制交付
Yarn架構
YARN主要由ResourceManager、NodeManager、ApplicationMaster和Container等元件構成
Yarn工作機制
- MR程式提交到客戶端所在的節點。
- YarnRunner向ResourceManager申請一個Application。
- RM將該應用程式的資源路徑返回給YarnRunner。
- 該程式將執行所需資源提交到HDFS上。
- 程式資源提交完畢後,申請執行mrAppMaster。
- RM將使用者的請求初始化成一個Task。
- 其中一個NodeManager領取到Task任務。
- 該NodeManager建立容器Container,併產生MRAppmaster。
- Container從HDFS上拷貝資源到本地。
- MRAppmaster向RM 申請執行MapTask資源。
- RM將執行MapTask任務分配給另外兩個NodeManager,另兩個NodeManager分別領取任務並建立容器。
- MR向兩個接收到任務的NodeManager傳送程式啟動指令碼,這兩個NodeManager分別啟動MapTask,MapTask對資料分割槽排序。
- MrAppMaster等待所有MapTask執行完畢後,向RM申請容器,執行ReduceTask。
- ReduceTask向MapTask獲取相應分割槽的資料。
- 程式執行完畢後,MR會向RM申請登出自己。
資源排程器
先進先出排程器(FIFO)
Hadoop最初設計目的是支援大資料批處理作業,如日誌挖掘、Web索引等作業,
為此,Hadoop僅提供了一個非常簡單的排程機制:FIFO,即先來先服務,在該排程機制下,所有作業被統一提交到一個佇列中,Hadoop按照提交順序依次執行這些作業。
但隨著Hadoop的普及,單個Hadoop叢集的使用者量越來越大,不同使用者提交的應用程式往往具有不同的服務質量要求,典型的應用有以下幾種:
批處理作業:這種作業往往耗時較長,對時間完成一般沒有嚴格要求,如資料探勘、機器學習等方面的應用程式。
互動式作業:這種作業期望能及時返回結果,如SQL查詢(Hive)等。
生產性作業:這種作業要求有一定量的資源保證,如統計值計算、垃圾資料分析等。
容量排程器
Capacity Scheduler Capacity Scheduler 是Yahoo開發的多使用者排程器,它以佇列為單位劃分資源,每個佇列可設定一定比例的資源最低保證和使用上限,同時,每個使用者也可設定一定的資源使用上限以防止資源濫用。而當一個佇列的資源有剩餘時,可暫時將剩餘資源共享給其他佇列。
總之,Capacity Scheduler 主要有以下幾個特點:
(1)容量保證。管理員可為每個佇列設定資源最低保證和資源使用上限,而所有提交到該佇列的應用程式共享這些資源。
(2)靈活性,如果一個佇列中的資源有剩餘,可以暫時共享給那些需要資源的佇列,而一旦該佇列有新的應用程式提交,則其他佇列釋放的資源會歸還給該佇列。這種資源靈活分配的方式可明顯提高資源利用率。
(3) 多重租賃。支援多使用者共享叢集和多應用程式同時執行。為防止單個應用程式、使用者或者佇列獨佔叢集中的資源,管理員可為之增加多重約束(比如單個應用程式同時執行的任務數等)。
(4)安全保證。每個佇列有嚴格的ACL列表規定它的訪問使用者,每個使用者可指定哪些使用者允許檢視自己應用程式的執行狀態或者控制應用程式(比如殺死應用程式)。此外,管理員可指定佇列管理員和集群系統管理員。
(5)動態更新配置檔案。管理員可根據需要動態修改各種配置引數,以實現線上叢集管理。
公平排程器
Fair Scheduler Fair Schedulere是Facebook開發的多使用者排程器。
公平排程器的目的是讓所有的作業隨著時間的推移,都能平均地獲取等同的共享資源!當有作業提交上來,系統會將空閒的資源分配給新的作業!每個任務大致上會獲取平等數量的資源!和傳統的排程策略不同的是
它會讓小的任務在合理的時間完成,同時不會讓需要長時間執行的耗費大量資源的應用捱餓!
同Capacity Scheduler類似,它以佇列為單位劃分資源,每個佇列可設定一定比例的資源最低保證和使用上限,同時,每個使用者也可設定一定的資源使用上限以防止資源濫用;當一個佇列的資源有剩餘時,可暫時將剩餘資源共享給其他佇列。
當然,Fair Scheduler也存在很多與Capacity Scheduler不同之處,這主要體現在以下幾個方面:
(1)資源公平共享。在每個佇列中,Fair Scheduler 可選擇按照FIFO、Fair或DRF策略為應用程式分配資源。其中,Fair 策略(預設)是一種基於最大最小公平演算法實現的資源多路複用方式,預設情況下,每個佇列內部採用該方式分配資源。這意味著,如果一個佇列中有兩個應用程式同時執行,則每個應用程式可得到1/2的資源;如果三個應用程式同時執行,則每個應用程式可得到1/3的資源。
(2)支援資源搶佔。當某個佇列中有剩餘資源時,排程器會將這些資源共享給其他佇列,而當該佇列中有新的應用程式提交時,排程器要為它回收資源。為了儘可能降低不必要的計算浪費,排程器採用了先等待再強制回收的策略,即如果等待一段時間後尚有未歸還的資源,則會進行資源搶佔:從那些超額使用資源的佇列中殺死一部分任務,進而釋放資源。
yarn.scheduler.fair.preemption=true 通過該配置開啟資源搶佔。
(3)負載均衡。Fair Scheduler提供了一個基於任務數目的負載均衡機制,該機制儘可能將系統中的任務均勻分配到各個節點上。此外,使用者也可以根據自己的需要設計負載均衡機制。
(4)排程策略配置靈活。Fair Scheduler允許管理員為每個佇列單獨設定排程策略(當前支援FIFO、Fair或DRF三種)。
(5)提高小應用程式響應時間。由於採用了最大最小公平演算法,小作業可以快速獲取資源並執行完成