本節,主要介紹yarn的基本原理以及資源調度。在hadoop1.0不能滿足多系統集成的背景下孕育了yarn的產生。由於多分佈式系統可以很好的集成,因此yarn的出現使得整個集羣的運維成本大大降低。同時,yarn可以很好的利用集羣資源,避免資源的浪費。除此之外,yarn的出現實現了集羣的數據共享問題。不同的分佈式計算框架可以實現數據的共享,比如hadoop的mapreduce輸出可以作爲storm的輸入。
client發出請求到resourceManager,resourceManager啓動Appication master爲任務分配相關的資源,分配完成後返回信息到resource Manager,再由resourceManager將任務分發到不同的NodeManager。NodeManager啓動Container執行需要的MapReduce工作。
下面根據yarn的工作流程對yarn的工作機制進行解讀。首先,client向ResourceManager發出任務請求。Resource Manager指定一個NodeManager啓動其ApplicationMaster。ApplicationMaster將計算任務反饋給Resource Manager。ApplicationMaster將任務分割分發到不同的NodeManager。NodeManager啓動Task執行work。
yarn具有雙層調度策略,ResourceManager將資源分配給ApplicationMaster,ApplicationMaster再將資源分配給NodeManager。而且,yarn具有預留的調度策略。資源不夠時,會爲Task預留資源,直到積累充足。
yarn具有較好的容錯機制。當任務失敗,ResourceManager將失敗任務告訴ApplicationMaster。由ApplicationMaster處理失敗任務。ApplicationMaster會保存已經執行的Task,重啓不會重新執行。
yarn支持多類型資源調度,其基於DRF算法實現(論文:“Dominant Resource Fairness: Fair Allocation of Multiple Resource Types”)。而且,其支持多種資源調度器FIFO、Fair Scheduler以及Capacity Scheduler 。最後,yarn支持多租戶資源調度器包括支持資源按比例分配、層級隊列劃分方式以及支持資源搶佔 。
yarn支持內存和CPU兩種資源隔離。內存是一種“決定生死”的資源。CPU是一種“影響快慢”的資源。其中,內存隔離包括基於線程監控的方案和基於Cgroups的方案。而CPU隔離包括默認不對CPU資源進行隔離和基於Cgroups的方案。
yarn支持的調度語義包括請求某個特定節點/機架上的特定資源量、將某些節點加入(或移除)黑名單,不再爲自己分配這些節點上的資 源以及請求歸還某些資源。不支持的語義包括請求任意節點/機架上的特定資源量、請求一組或幾組符合某種特質的資源、超細粒度資源以及動態調整Container資源 。
yarn是通用的統一資源管理系統,同時運行長應用程序和短應用程序 。長應用程序通常情況下,指永不停止運行的程序 ervice、HTTP Server等。短應用程序指短時間(秒級、分鐘級、小時級)內會運行結束的程序 MR job、Spark Job等 。如下圖所示,yarn使得集羣中各種任務的執行成爲可能。
1、MapReduce On YARN
MapReduce的執行過程如上圖。首先,client向ResourceManager發出任務請求。Resource Manager指定一個NodeManager啓動其ApplicationMaster。ApplicationMaster將計算任務反饋給Resource Manager。ApplicationMaster將任務分割分發到不同的NodeManager。NodeManager啓動Task執行work。
2、DAG計算框架Tez
多個作業之間存在數據依賴關係,並形成一個依賴關係有向 圖( Directed Acyclic Graph ),該圖的計算稱爲“DAG計算”。Apache Tez是基於YARN的DAG計算框架其運行在YARN之上,充分利用YARN的資源管理和容錯等功能;Tez提供了豐富的數據流(dataflow)API、擴展性良好的“Input-Processor-Output”運行時模型以及動態生成物理數據流關係。
如上圖所示,在MapReduce情況下,如果執行wordcount和topK需要啓動兩個MapReduce Job。但是,如果用Tez只需要啓動一個任務。第一個MapReduce實現wordcount,緊接着執行一個reduce作業實現topK。Tez執行的作業類似於樹狀拓撲結構。Tez的工作原理類似於上述hadoop的執行流程,如下圖所示。
Tez 優化技術 包括:
1、ApplicationMaster緩衝池:
(1).作業提交到AMPoolServer服務上;
(2).預啓動若干個ApplicationMaster,形成一個 ApplicationMaster緩衝池.
2、預先啓動Container :ApplicationMaster啓動時可以預先啓動若干個Container 。
3、Container重用:任務運行完成後,ApplicationMaster不會馬上註銷它使 用的Container,而是將它重新分配給其他未運行的任務。
Tez 應用場景
1、直接編寫應用程序
(1).Tez提供了一套通用編程接口;
(2).適合編寫有依賴關係的作業。
2、優化Pig、Hive等引擎
(1).下一代Hive:Stinger ;
(2).好處1:避免查詢語句轉換成過多的MapReduce作業後產 生大量不必要的網絡和磁盤IO;
(3).好處2:更加智能的任務處理引擎。
3、流式計算框架Storm
流式(Streaming)計算,是指被處理的數據像流水一樣不斷流入系統,而系統需要針對每條數據進行實時處理和計算, 並永不停止(直到用戶顯式殺死進程);傳統做法:由消息隊列和消息處理者組成的實時處理網絡進行實時計算其缺乏自動化、健壯性並且伸縮性差 。因此,storm孕育而生。
如上圖所示,Nimbus相當於ResourceManager。Supervisor相當於NodeManager。Nimbus不直接調度Supervisor,而是通過Zookeeper調度。Task中,Spout和Blot相當於Map/Reduce。整個作業是一種拓撲結構。執行以作業流的方式執行。運行在yarn上的storm運行機制類似於hadoop,如下圖所示。
4、內存計算框架Spark
spark克服了MapReduce在迭代式計算和交互式計算方面的不足,引入RDD(Resilient Distributed Datasets)數據表示模型。RDD是一個有容錯機制,可以被並行操作的數據集合,能夠被緩存到內存或磁盤上。
spark如上圖所示,可以執行多個stage,最後不同的stage的結果可以合併進行下一步的計算。
Spark在Yarn上的運行機制同樣類似於hadoop。
上圖爲Spark的生態系統。Shark是spark的類sql流語句。sparkStreaming是spark的流式分佈式計算框架。Graphx是spark的圖計算庫MLBase是spark的機器學習庫。