坐實大資料資源排程框架之王,Yarn為何這麼牛

語言: CN / TW / HK
摘要:Yarn的出現伴隨著Hadoop的發展,使Hadoop從一個單一的大資料計算引擎,成為大資料的代名詞。

本文分享自華為雲社群《Yarn為何能坐實資源排程框架之王?》,作者: JavaEdge。

Hadoop主要組成:

  • 分散式檔案系統HDFS
  • 分散式計算框架MapReduce
  • 分散式叢集資源排程框架Yarn

Yarn的出現伴隨著Hadoop的發展,使Hadoop從一個單一的大資料計算引擎,成為一個集儲存、計算、資源管理為一體的完整大資料平臺,進而發展出自己的生態體系,成為大資料的代名詞。

在MapReduce應用程式的啟動過程中,最重要的就是把MapReduce程式分發到大資料叢集的伺服器,Hadoop 1中,這個過程主要是通過TaskTracker和JobTracker通訊完成。

方案的缺點

伺服器叢集資源排程管理和MapReduce執行過程耦合在一起,如果想在當前叢集中執行其他計算任務,比如Spark或者Storm,就無法統一使用叢集中的資源。

Hadoop早期,大資料技術就只有Hadoop,這缺點不明顯。但隨大資料發展,各種新計算框架出現,我們不可能為每種計算框架部署一個伺服器叢集,而且就算能部署新叢集,資料還是在原來叢集的HDFS上。所以需要把MapReduce的資源管理和計算框架分開,這也是Hadoop2最主要變化:將Yarn從MapReduce中分離出來,成為一個獨立的資源排程框架。

Yarn,Yet Another Resource Negotiator,另一種資源排程器。在Hadoop社群決定將資源管理從Hadoop1中分離出來,獨立開發Yarn時,業界已有一些大資料資源管理產品,比如Mesos,所以Yarn開發者索性管自己的產品叫“另一種資源排程器”。比如Java的Ant就是“Another Neat Tool”縮寫,另一種整理工具。

Yarn架構

Yarn包括:

節點管理器(Node Manager)

NodeManager程序,負責具體伺服器上的資源和任務管理,在叢集的每一臺計算伺服器上都會啟動,和HDFS的DataNode程序一起出現

資源管理器(Resource Manager)

ResourceManager程序,負責整個叢集的資源排程管理,通常部署在獨立的伺服器

資源管理器包括兩個主要元件:

排程器

就是個資源分配演算法,根據Client應用程式提交的資源申請和當前伺服器叢集的資源狀況進行資源分配。

Yarn內建的資源排程演算法

包括Fair Scheduler、Capacity Scheduler等,也可以自行開發供Yarn呼叫。

Yarn進行資源分配的單位是容器(Container),每個容器包含了一定量的記憶體、CPU等計算資源,預設配置下,每個容器包含一個CPU核心。容器由NodeManager程序啟動和管理,NodeManger程序會監控本節點上容器的執行狀況並向ResourceManger程序彙報。

應用程式管理器

應用程式管理器負責應用程式的提交、監控應用程式執行狀態等。應用程式啟動後需要在叢集中執行一個ApplicationMaster,ApplicationMaster也需要執行在容器裡面。每個應用程式啟動後都會先啟動自己的ApplicationMaster,由ApplicationMaster根據應用程式的資源需求進一步向ResourceManager程序申請容器資源,得到容器以後就會分發自己的應用程式程式碼到容器上啟動,進而開始分散式計算。

Yarn的工作流程

1、向Yarn提交應用程式,包括

  • MapReduce ApplicationMaster
  • 我們的MapReduce程式
  • MapReduce Application啟動命令

2、ResourceManager程序和NodeManager程序通訊,根據叢集資源,為使用者程式分配第一個容器,並將MapReduce ApplicationMaster分發到這個容器,並在容器裡啟動MapReduce ApplicationMaster

3、MapReduce ApplicationMaster啟動後立即向ResourceManager程序註冊,併為自己的應用程式申請容器資源。

4、MapReduce ApplicationMaster申請到需要的容器後,立即和相應的NodeManager程序通訊,將使用者MapReduce程式分發到NodeManager程序所在伺服器,並在容器中執行,執行的就是Map或者Reduce任務。

5、Map或者Reduce任務在執行期和MapReduce ApplicationMaster通訊,彙報自己的執行狀態,若執行結束,MapReduce ApplicationMaster向ResourceManager程序登出並釋放所有的容器資源。

MapReduce若想在Yarn執行,需開發遵循Yarn規範的MapReduce ApplicationMaster,其他大資料計算框架也能開發遵循Yarn規範的ApplicationMaster,這樣在一個Yarn叢集中就能同時併發執行不同的大資料計算框架,實現資源的統一排程管理。

為何HDFS是系統,而MapReduce和Yarn是框架

框架遵循依賴倒轉原則:高層模組不能依賴低層模組,它們應共同依賴一個抽象,這個抽象由高層模組定義,由低層模組實現。

高、低層模組的劃分:呼叫鏈上,前面的是高層,後面的是低層。以Web應用為例,使用者請求到Server後:

  • 最先處理使用者請求的是Web容器Tomcat,通過監聽80埠,把HTTP二進位制流封裝成Request物件
  • 然後Spring MVC框架,提取Request物件裡的使用者引數,根據請求的URL分發給相應的Model物件處理
  • 最後應用程式程式碼處理使用者請求

Tomcat相比Spring MVC就是高層模組,Spring MVC相比應用程式也是高層模組。雖然Tomcat會呼叫Spring MVC,因為Tomcat要把Request交給Spring MVC處理,但Tomcat並未依賴Spring MVC,那Tomcat如何做到不依賴Spring MVC,卻能呼叫Spring MVC?

Tomcat和Spring MVC都依賴J2EE規範,Spring MVC實現了J2EE規範的HttpServlet抽象類,即DispatcherServlet,並配置在web.xml中。這樣,Tomcat就能呼叫DispatcherServlet處理使用者發來的請求。

同樣Spring MVC也不需要依賴我們寫的Java程式碼,而是通過依賴Spring MVC的配置檔案或Annotation抽象,來呼叫我們的Java程式碼。所以,Tomcat或者Spring MVC都可以稱作是框架,它們都遵循依賴倒轉原則。

類似的,實現MapReduce程式設計介面、遵循MapReduce程式設計規範就能被MapReduce框架呼叫,在分散式叢集中計算大規模資料;實現了Yarn的介面規範,比如Hadoop2的MapReduce,就能被Yarn排程管理,統一安排伺服器資源。所以MapReduce和Yarn都是框架。

HDFS就不是框架,使用HDFS就是直接呼叫HDFS提供的API介面,HDFS作為底層模組被直接依賴。

總結

Yarn,大資料資源排程框架,排程的是大資料計算引擎本身,不像MapReduce或Spark程式設計,每個大資料應用開發者都需根據需求開發自己的MapReduce程式或者Spark程式。

大資料計算引擎所使用的Yarn模組,也早被這些計算引擎開發者做出來供使用。普通大資料開發者沒有機會編寫Yarn相關程式。

 

點選關注,第一時間瞭解華為雲新鮮技術~