YARN詳解

一、回顧

1、MR job提交到yarn的工作流程

面試題:        Yarn的工作流程

                       MR 架構設計

2、容器  contariner

一定數量的cpu+memory

二、Yarn的架構設計(主從、資源和作業調度管理)

RM:(Applications Manager+Scheduler)
Applications Manager:應用程序管理器,應用程序管理器負責管理整個系統中所有應用程序,包括應用程序提交、與調度器協商資源以啓動AM、監控AM運行狀態並在失敗時重新啓動等,跟蹤分給的Container的進度、狀態也是其職責。

Scheduler:先進先出調度器,計算調度器,公平調度器。

調度器根據容量、隊列等限制條件(如每個隊列分配一定的資源,最多執行一定數量的作業等),將系統中的資源分配給各個正在運行的應用程序。調度器僅根據各個應用程序的資源需求進行資源分配,而資源分配單位是Container,從而限定每個任務使用的資源量。Shceduler不負責監控或者跟蹤應用程序的狀態,也不負責任務因爲各種原因而需要的重啓(由ApplicationMaster負責)。總之,調度器根據應用程序的資源要求,以及集羣機器的資源情況,爲應用程序分配封裝在Container中的資源。

調度器是可插拔的,例如CapacityScheduler、FairScheduler。

NM
NM是每個節點上的資源和任務管理器。它會定時地向RM彙報本節點上的資源使用情況和各個Container的運行狀態;同時會接收並處理來自AM的Container啓動/停止等請求。

APP MASTER:一個job只有一個,相當於主程序(spark driver)

用戶提交的應用程序job均包含一個AM,負責應用的監控,跟蹤應用執行狀態,重啓失敗任務等。ApplicationMaster是應用框架,它負責向ResourceManager協調資源,並且NodeManager協同工作完成Task的執行和監控。MapReduce就是原生支持的一種框架,可以在YARN上運行Mapreduce作業。有很多分佈式應用都開發了對應的應用程序框架,用於在YARN上運行任務,例如Spark,Storm等。如果需要,我們也可以自己寫一個符合規範的YARN application。

Yarn平臺一般運行job>=0

Contariner:運行在NM上。

是YARN中的資源抽象,它封裝了某個節點上的多維度資源,如內存、CPU、磁盤、網絡等,當AM向RM申請資源時,RM爲AM返回的資源便是用Container 表示的。 YARN會爲每個任務分配一個Container且該任務只能使用該Container中描述的資源。

三、常用的命令

1、回顧wordcount的步驟

離開安全模式:

hdfs dfsadmin -safemode leave

刪除已有的/wordcount目錄下的所有文件:

hdfs dfs -rm -r /wordcount

重新創建:

 hdfs dfs -mkdir -p /wordcount/input

將準備好的文件上傳到/input:

hdfs dfs -put HBinz.log /wordcount/input

2、在這裏我們嘗試用yarn的命令來提交jar包到yarn,而不是通過hadoop命令

(1)yarn jar /opt/software/hadoop-2.8.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar wordcount /wordcount/input /wordcount/output1

(2)發現running錯了,如何通過命令停止

yarn application -list

yarn application -kill application_1534945138947_0003

同時,執行的頁面也會返回結果「job被kill掉」

3、常用命令

yarn application -list

yarn application -kill appId

 yarn jar 

4、回顧yarn MR2的工作流程

1:用戶向YARN中提交應用程序,其中包括ApplicationMaster程序、啓動ApplicationMaster的命令、用戶程序等。

2:ResourceManager爲該應用程序分配第一個Container,並與對應的Node-Manager通信,要求它在這個Container中啓動應用程序的ApplicationMaster。

3:ApplicationMaster首先向ResourceManager註冊,這樣用戶可以直接通過ResourceManage查看應用程序的運行狀態,然後它將爲各個任務申請資源,並監控它的運行狀態,直到運行結束,即重複步驟4~7。

4:ApplicationMaster採用輪詢的方式通過RPC協議向ResourceManager申請和領取資源。

5:一旦ApplicationMaster申請到資源後,便與對應的NodeManager通信,要求它啓動任務。

6:NodeManager爲任務設置好運行環境(包括環境變量、JAR包、二進制程序等)後,將任務啓動命令寫到一個腳本中,並通過運行該腳本啓動任務。

7:各個任務通過某個RPC協議向ApplicationMaster彙報自己的狀態和進度,以讓ApplicationMaster隨時掌握各個任務的運行狀態,從而可以在任務失敗時重新啓動任務。在應用程序運行過程中,用戶可隨時通過RPC向ApplicationMaster查詢應用程序的當前運行狀態。

8:應用程序運行完成後,ApplicationMaster向ResourceManager註銷並關閉自己。

簡而言之:

當用戶向 YARN 中提交一個應用程序後, YARN 將分兩個階段運行該應用程序:

a. 第一個階段是啓動ApplicationMaster;

b. 第二個階段是由ApplicationMaster創建應用程序,爲它申請資源,並監控它的整個運行過程,直到運行完成。

5、Yarn調度器(先進先出、計算、公平)以後講CDH會更加簡單

先進先出調度器:FIFO

6、Yarn資源管理與調度、參數配置

在YARN中,資源管理由ResourceManager和NodeManager共同完成,其中   ResourceManager中的調度器負責資源的分配,而NodeManager則負責資源的供給和隔離。

ResourceManager將某個NodeManager上資源分配給任務(這就是所謂的 資 源調 度)後,NodeManager需按照要求爲任務提供相應的資源,甚至保證這些資源應具有獨佔性,爲任務運行提供基礎的保證,這就是所謂的資源隔離。

7、Memory資源的調度和隔離

基於以上考慮,YARN允許用戶配置每個節點上可用的物理內存資源,注意,這裏是「可用的」,因爲一個節點上的內存會被若干個服務共享,比如一部分給YARN,一部分給HDFS,一部分給HBase等,YARN配置的只是自己可以使用的,配置參數如下:

(1) yarn.nodemanager.resource.memory- - mb

表示該節點上YARN可使用的物理內存總量,默認是8192(MB),注意,如果你的節點內存資源不夠8GB,則需要調減小這個值,而YARN不會智能的探測節點的物理內存總量。

(2) yarn.nodemanager.vmem- - pmem- - ratio

任務每使用1MB物理內存,最多可使用虛擬內存量,默認是2:1。

(3) yarn.nodemanager.pmem- - check- - enabled

是否啓動一個線程檢查每個任務正使用的物理內存量,如果任務超出分配值,則直接將其殺掉,默認是true。

(4) yarn.nodemanager.vmem- - check- - enabled

是否啓動一個線程檢查每個任務正使用的虛擬內存量,如果任務超出分配值,則直接將其殺掉,默認是true。

(5) yarn.scheduler.minimum- - allocation- - mb

單個任務可申請的最少物理內存量,默認是1024(MB),如果一個任務申請的物理內存量少於該值,則該對應的值改爲這個數。

(6) yarn.scheduler.maximum- - allocation- - mb

單個任務可申請的最多物理內存量,默認是8192(MB)。

8、CPU資源的調度和隔離

CPU的主要配置參數:

(1) yarn.nodemanager.resource.cpu- - vcores

表示該節點上YARN可使用的虛擬CPU個數,默認是4,注意,目前推薦將該值設值爲與物理CPU核數數目相同。如果你的節點CPU核數不夠4個,則需要調減小這個值,而YARN不會智能的探測節點的物理CPU總數。

(2 )yarn.scheduler.minimum- - allocation- - vcores

單個任務可申請的最小虛擬CPU個數,默認是1,如果一個任務申請的CPU個數少於該數,則該對應的值改爲這個數。

(3 )yarn.scheduler.maximum- - allocation- - vcores

單個任務可申請的最多虛擬CPU個數,默認是32。

默認情況下,YARN是不會對CPU資源進行調度的,你需要配置相應的資源調度器。

9、  生產場景:

(1)計算及時性要求比較高: memory不夠 快速出結果 cpu足夠的

(2)反正:cpu不夠

5分鐘出1個job : job運行1分鐘oom memory+2G 在計算只需1分鐘,比如在第4分鐘完成

CDH 動態資源池

生產場景總結:

memory不夠   cpu夠 : oom錯誤 作業停止(memory不夠的話,會停止作業,進而增加memory,由於cpu足夠,所以計算快)

memory夠       cpu不夠: 作業慢(由於memory夠,因此會低cpu執行,所以會計算慢)

因爲內存或者cpu不夠修改過以上配置後,記得要重啓yarn!!!

10、資源調度