Yarn作為Hadoop的資源排程架構,承擔着擴充Hadoop的重要責任,我們配置Spark時就使用了Spark on Yarn的配置方法,這裡簡單介紹一些YARN的工作原理,有助于了解整個系統處理作業的過程。
在配置好的Hadoop環境中,我們輸入jps檢視程序,可以看到,master節點上的ResourceManager和slave節點上的NodeManager就是屬于Yarn的程序。
幾個需要了解的概念
1. ResourceManager
ResourceManager是master上的程序,負責整個分布式系統的資源管理和排程。他會處理來自client端的請求(包括送出作業/殺死作業);啟動/監控Application Master;監控NodeManager的情況,比如可能挂掉的NodeManager。
2. NodeManager
相對應的,NodeManager時處在slave節點上的程序,他隻負責目前slave節點的資源管理和排程,以及task的運作。他會定期向ResourceManager回報資源/Container的情況(heartbeat);接受來自ResourceManager對于Container的啟停指令。
3. Application Master
每一個送出到叢集的作業都會有一個與之對應的Application Master來負責應用程式的管理。他負責進行資料切分;為目前應用程式向ResourceManager去申請資源(也就是Container),并配置設定給具體的任務;與NodeManager通信,用來啟停具體的任務,任務運作在Container中;而任務的監控和容錯也是由Application Master來負責的。
4. Container
那麼container又是什麼呢?它包含了Application Master向ResourceManager申請的計算資源,比如說CPU/記憶體的大小,以及任務運作所需的環境變量和隊任務運作情況的描述。
(1)Client向ResourceManager送出作業(可以是Spark/Mapreduce作業)
(2)ResourceManager會為這個作業配置設定一個container
(3)ResourceManager與NodeManager通信,要求NodeManger在剛剛配置設定好的container上啟動應用程式的Application Master
(4)Application Master先去向ResourceManager注冊,而後ResourceManager會為各個任務申請資源,并監控運作情況
(5)Application Master采用輪詢(polling)方式向ResourceManager申請并領取資源(通過RPC協定通信)
(6) Application Manager申請到了資源以後,就和NodeManager通信,要求NodeManager啟動任務
最後,NodeManger啟動作業對應的任務。