通俗理解 YARN 執行原理
導語:工作中常常和Spark on YARN, Hadoop on YARN打交道,經常在各種日誌中摸爬滾打,為提升效率,總結一下YARN的知識點,希望能形成一個比較系統的方法論。本文由三問三答一例組成。
1、為什麼要使用YARN?
為了提升叢集的利用率、資源統一管理, 使用YARN為上層應用提供統一的資源管理和排程的平臺。
2、YARN的優勢?
資源的統一管理和排程:
叢集中所有節點的資源(記憶體、CPU、磁碟、網路等)抽象為Container。計算框架需要資源進行運算任務時需要向YARN申請Container, YARN按照特定的策略對資源進行排程進行Container的分配。
資源隔離:
YARN使用了輕量級資源隔離機制Cgroups進行資源隔離以避免相互干擾,一旦Container使用的資源量超過事先定義的上限值,就將其殺死。
3、YARN是如何工作的?
介紹YARN排程過程之前,解釋幾個專用名詞:
Resource Manager:全域性資源管理器,一個叢集只有一個RM。負責和AM(Application Master)互動,資源排程、資源分配等工作。
Application Master:應用程式的管理器,類似專案經理,一個應用程式只有一個AM。負責任務開始時找RM要資源,任務完成時向RM登出自己,釋放資源;與NM通訊以啟動/停止任務;接收NM同步的任務進度資訊。
Node Manager:一臺機器上的管理者,類似於部門經理。管理著本機上若干小弟Containers的生命週期、監視資源和跟蹤節點健康並定時上報給RM;接收並處理來自AM的Container啟動/停止等各種請求。
Container:一臺機器上具體提供運算資源,將裝置上的記憶體、CPU、磁碟、網路等資源封裝在一起的抽象概念——“資源容器”,Container是一個動態資源分配單位,為了限定每個任務使用的資源量。

NM和Container是一臺裝置上的不同程序
Attempt:提交到Yarn中的應用程式被稱為Application,它可能會嘗試執行多次,每次的嘗試執行稱為“Application Attempt”,如果一次嘗試執行失敗,則由RMApp建立另一個繼續執行,直至達到失敗次數的上限。
圖片來自參考[1]

以下通俗地解釋一下向YARN提交一個應用程式時的執行過程:
1、使用者向YARN提交程式,以Map Reduce程式為例,Resource Manager(資源管理器)接收到客戶端程式的執行請求
2、Resource Manager分配一個Container(資源)用來啟動Application Master(程式管理員),並告知Node Manager(節點管理員),要求它在這個Container下啟動Application Master
3、Application Master啟動後,向Resource Manager發起註冊請求
4、Application Master向Resource Manager申請資源
5、取得資源後,根據資源,向相關的Node Manager通訊,要求其啟動程式
6、Node Manager(多個)啟動MR(每個MR任務都是一個job,可以在job日誌中檢視程式執行日誌)
7、Node Manager不斷彙報MR狀態和進展給Application Master
8、當MR全部完成時,Application Master向Resource Manager彙報任務完成,並登出自己
下面結合一個排錯的例子來介紹日常使用:
在一次提交一個MR任務之後,application失敗退出。通常會第一時間看到application頁面排查問題,這裡第一個紅框是應用程式最終狀態,FAILED。錯誤發生立馬看診斷資訊有沒有邏輯錯誤資訊(程式程式碼自身問題),現在看診斷資訊顯示是task失敗,排除邏輯錯誤。
除去程式碼問題,應該是環境變數和job設定的問題,接下來看任務執行日誌,進入 Tracking URL: History。

application執行情況頁面
第二個頁面,MR的job日誌介面,發現是Map任務失敗

MR的job日誌介面
第三個介面,檢視具體失敗的attempts情況
從Note顯示的資訊判斷是邏輯還是系統失敗,很明顯是系統失敗,再點開log檢視詳細資訊。

檢視具體失敗的attempts情況
發現是我job設定的JAVA_HOME出現問題。定位並解決~

環境變數問題
-------------------------