歡迎來到魔據教育大數據學院,專注大數據工程師培養!
當前位置:首頁 > 學習資料 > 講師博文 > Yarn的運行原理

Yarn的運行原理

時間:2019-04-12 14:24:07作者:魔據大數據學院

首先我們要知道yarn是什么?能干什么?

先來看一下yarn的誕生:
Yarn的運行原理 
 
 
了解Yarn的架構之前,先說說為什么會出現Yarn。在Hadoop v1版本中,存在最大的問題就是資源管理大家已經不滿足于僅僅能在Hadoop集群上運行MapReduce程序,更希望能夠有一套合理的管理機制來控制整個集群的資源調度,于是Yarn平臺應運而生
 
還記得之前我講到的嗎? 任何軟件行業解決不了的問題都可以通過一個中間層來解決,于是乎yarn就誕生了,這里你可以暫且把yarn當成資源調度,它負責調度hdfs和mapreduce
 
那么我們之前用到過yarn嗎?當然用到過了,還記得之前敲的一個命令:
./start-yarn.sh
Yarn的運行原理 
看上圖,之前我們在用./start-dfs.sh命令的時候,是啟動了hdfs分布式文件系統,那么對應的啟動了三個進程,這三個進程我都一一講過,也講過原理
那么我們后面的./start-yarn.sh命令是啟動yarn資源調度,那么這時候多了兩個進程:ResourcManager    NodeManager
那么你可以這么理解:ResourcManager  和  NodeManager 進程就是Yarn
好了,說完上面的,我們再來想想,之前還記得我們做過的三個mapreduce的案例嗎
一個是單詞計數,一個是去重,一個是相加求和取平均值
這三個例子,都是調用了hdfs上面的test.txt文件,然后又通過了mapreduce階段最終又輸出到了hdfs里面
好了,這里頭又用了hdfs,還用到了mapreduce,那么是誰來分配的呢?
對了,這其中的橋梁,或者說中間層就是yarn!!
還記得我們代碼當中的main方法下的job嗎, 之前我就說它是一個任務,是要給yarn調用,這里確實是這樣
我們將我們的代碼和類都放到了job中,然后將job提交后,hadoop jar wordcount命令執行jar包的時候,首先yarn會先將job拿走,然后經過一系列復雜的過程后,才會一步一步的調用hdfs 再調用mapreduce 再將結果放回到hdfs,那么這一切的調度和分配都是yarn在執行,還記得之前我們在使用hadoop jar wordcount命令的時候,我又打開了一個窗口jps命令查看進程發現,多了三個進程:
Yarn的運行原理 
這三個進程都是yarn調度的,好了,說了這么多,大家消化一下,屢一下思路,過會我們開始講原理!
 
 
 
先看下面這個圖:
Yarn的運行原理 
 
1.我們通過XShell客戶端執行了:hadoop jar wordcount.jar 命令,當程序執行到job代碼的時候會啟動一個runjar的進程,這個runjar就是之前新啟動的三個進程之一Yarn的運行原理
2.當啟動了runjar這個進程后,runjar就會向ResourcManager 發送一個請求,請求申請執行job任務
3.ResourcManager 會返回信息,可以執行,但是需要將job封裝的信息(就是map類,reduce類 說白了就是程序代碼邏輯)放在hdfs下的/tmp/hadoop-yarn/staging/hyxy/.staging/jobid目錄下,但是咱們看不了,每個jobid都單獨對應一個job,這個job的id是ResourcManager 返回給runjar的時候帶過去的;
Yarn的運行原理 
4.runjar接收到了第三步的信息后,執行到相對應的目錄下
5.存儲結束后,runjar向ResourcManager 返回信息,存儲成功;并且將job任務傳送到ResourcManager 中,ResourcManager 將job任務放到消息隊列中,等待被執行
6.nodeManager會實時的向ResourcManager 發送心跳(判斷nodeManager是否死亡這個是交給ResourcManager (yarn)來做的),并且查看消息隊列中有沒有待執行的任務,如果有任務需要執行,并且此nodeManager節點資源也空余,那么就會在自己的節點上開辟若干個資源池(continer),資源池的意思是將自己的資源,內存,網絡,cpu,io等等切分一部分出來做成一個空間,這個空間專門是用來執行job任務的,(這里強調一下,一般是多個nodeManager節點同時接這個job任務,那么在接任務的時候,ResourcManager就已經看穿一切,并且會將job任務根據資源給多個nodeManager節點,這里擴展一下,一個datanode節點可以開辟出非常多個continer,每一個continer能支持一個map任務 或者 reduce任務計算)
7.那么nodeManager將job領到若干個資源池后,也會獲得job的id,此時,會去hdfs中找對應的jobid目錄,將對應的job所封裝的所有信息拿到資源池里面,那么好了,到目前為止我們都是在說分配資源,請問,有沒有啟動mapreduce框架,答案肯定是沒有!
8.當最后一個nodeManager將jobid的信息復制到本地的時候就會給ResourcManager反饋資源池的信息
9.這個時候,就要用到MapReduce了,所以,ResourcManager會隨機在一個節點上開辟MRAPPmaster進程; 還記得我們之前單詞計數,jps多出來的三個進程嗎?其中的MRAPPmasterYarn的運行原理進程就是管理mapreduce的
10.MAPppmaster會根據每個資源池的需求啟動相對應的map 或者 reduce   那么map就叫做map task ,reduce叫做reduce task那么map和 reduce所對應的進程就是yarn childYarn的運行原理這里強調一下,每一個資源池只能執行一個map或者reduce; map可以有多個,reduce也可以有多個
11.那么在MRAPppmaster啟動開始啟動map線程的時候,MAPppmaster會一直實時的和ResourceManager交互,原因是如果某個節點的map運行結束了,那么那個節點的資源池就閑置了,所以要一直交互,發現有哪個資源池閑置了,就會通知ResouceManager,而RscouceManager就會將對應的資源池回收掉!
 
好了,以上就是yarn的運行原理,到目前為止hadoop最重要的三個運行原理 hdfs  和 yarn 都講完了,接下來給大家一點時間消化一下

更多大數據相關資訊敬請關注魔據教育,為您分享最及時的大數據資訊。
學習大數據敬請關注魔據教育微信二維碼。
魔據教育微信二維碼

【版權與免責聲明】如發現內容存在版權問題,煩請提供相關信息發郵件至[email protected],我們將及時溝通與處理。本站內容除非來源注明魔據教育,否則均為網友轉載,涉及言論、版權與本站無關。

全國咨詢熱線:18501996998,值班手機:18501996998(7*24小時)

在線咨詢:張老師QQ 320169340

企業合作服務專線:010-82340234-821, 院校合作洽談專線:010-82340234

Copyright 2001-2019 魔據教育 - 北京華育興業科技有限公司 版權所有,京ICP備17018991號-2

免費在線咨詢立即咨詢

免費索取技術資料立即索取

大數據技術交流QQ:226594285

電話咨詢010-82340234

【看图找生肖】免费