四、Yarn

剛開始MapReduce框架是包含 MapReduce和資源調(diào)度的,也就是說 MapReduce與資源調(diào)度耦合在一起。隨著大數(shù)據(jù)的發(fā)展,Hadoop2將MapReduce中關于資源調(diào)度的內(nèi)容分離了出來,并做成了一個獨立的分布式集群的資源調(diào)度框架,也就是Yarn。從此Hadoop 也從一個單一的大數(shù)據(jù)計算引擎,成為一個集存儲、計算、資源管理為一體的完整大數(shù)據(jù)平臺,進而發(fā)展出自己的生態(tài)體系,成為大數(shù)據(jù)的代名詞。

現(xiàn)在幾乎所有計算框架都可以部署一個hadoop服務器集群上,通過Yarn統(tǒng)一管理調(diào)度。如果想在當前集群中運行其他計算任務,比如 Spark 或者 Storm,也可以統(tǒng)一使用集群中的資源了。

Yarn的重要組成

Yarn.png

Yarn包括兩個重要進程:資源管理器(Resource Manager)與 節(jié)點管理器(Node Manager),他們也是一主多從的關系。

ResourceManager

ResourceManager 進程負責整個集群的資源調(diào)度管理,通常部署在獨立的服務器上。
資源管理器又包括兩個主要組件:調(diào)度器(Dispatcher)和應用程序管理器。

調(diào)度器
調(diào)度器其實就是一個資源分配算法,根據(jù)應用程序(Client)提交的資源申請和當前服務器集群的資源狀況進行資源分配。Yarn 內(nèi)置了幾種資源調(diào)度算法,包括 Fair Scheduler、Capacity Scheduler 等,你也可以開發(fā)自己的資源調(diào)度算法供 Yarn 調(diào)用。

應用程序管理器
應用程序管理器負責應用程序的提交、監(jiān)控應用程序運行狀態(tài)等。

NodeManager

NodeManager 進程負責具體服務器上的資源和任務管理,在集群的每一臺計算服務器上都會啟動,基本上跟 HDFS 的 DataNode 進程一起出現(xiàn)。

容器(Container)

Yarn 進行資源分配的單位是容器(Container),每個容器包含了一定量的內(nèi)存、CPU 等計算資源,默認配置下,每個容器包含一個 CPU 核心。容器由 NodeManager 進程啟動和管理,NodeManger 進程會監(jiān)控本節(jié)點上容器的運行狀況并向 ResourceManger 進程匯報。

Yarn的工作流程

應用程序管理器負責應用程序的提交、監(jiān)控應用程序運行狀態(tài)等。應用程序啟動后需要在集群中運行一個 ApplicationMaster,ApplicationMaster 也需要運行在容器里面。每個應用程序啟動后都會先啟動自己的 ApplicationMaster,由 ApplicationMaster 根據(jù)應用程序的資源需求進一步向 ResourceManager 進程申請容器資源,得到容器以后就會分發(fā)自己的應用程序代碼到容器上啟動,進而開始分布式計算。

我們以一個 MapReduce 程序為例,來看一下 Yarn 的整個工作流程。

  1. 我們向 Yarn 提交應用程序,包括 MapReduce ApplicationMaster、我們的 MapReduce 程序,以及 MapReduce Application 啟動命令。

2.ResourceManager 進程和 NodeManager 進程通信,根據(jù)集群資源,為用戶程序分配第一個容器,并將 MapReduce ApplicationMaster 分發(fā)到這個容器上面,并在容器里面啟動 MapReduce ApplicationMaster。

3.MapReduce ApplicationMaster 啟動后立即向 ResourceManager 進程注冊,并為自己的應用程序申請容器資源。

4.MapReduce ApplicationMaster 申請到需要的容器后,立即和相應的 NodeManager 進程通信,將用戶 MapReduce 程序分發(fā)到 NodeManager 進程所在服務器,并在容器中運行,運行的就是 Map 或者 Reduce 任務。

5.Map 或者 Reduce 任務在運行期和 MapReduce ApplicationMaster 通信,匯報自己的運行狀態(tài),如果運行結束,MapReduce ApplicationMaster 向 ResourceManager 進程注銷并釋放所有的容器資源。

Yarn 為什么是框架

細心的你可能會發(fā)現(xiàn),我們管 HDFS 叫分布式文件系統(tǒng),管 MapReduce 叫分布式計算框架,管 Yarn 叫分布式集群資源調(diào)度框架。為什么 HDFS 是系統(tǒng),而 MapReduce 和 Yarn 則是框架?
框架在架構設計上遵循一個重要的設計原則叫“依賴倒轉原則”,依賴倒轉原則是高層模塊不能依賴低層模塊,它們應該共同依賴一個抽象,這個抽象由高層模塊定義,由低層模塊實現(xiàn)。所謂高層模塊和低層模塊的劃分,簡單說來就是在調(diào)用鏈上,處于前面的是高層,后面的是低層。

MapReduce 如果想在 Yarn 上運行,就需要開發(fā)遵循 Yarn 規(guī)范的 MapReduce ApplicationMaster,相應地,其他大數(shù)據(jù)計算框架也可以開發(fā)遵循 Yarn 規(guī)范的 ApplicationMaster,這樣在一個 Yarn 集群中就可以同時并發(fā)執(zhí)行各種不同的大數(shù)據(jù)計算框架,實現(xiàn)資源的統(tǒng)一調(diào)度管理。

Yarn 作為一個大數(shù)據(jù)資源調(diào)度框架,調(diào)度的是大數(shù)據(jù)計算引擎本身。它不像 MapReduce 或 Spark 編程,每個大數(shù)據(jù)應用開發(fā)者都需要根據(jù)需求開發(fā)自己的 MapReduce 程序或者 Spark 程序?,F(xiàn)在主流的大數(shù)據(jù)計算引擎所使用的 Yarn 模塊,也早已被這些計算引擎的開發(fā)者做出來供我們使用了。作為普通的大數(shù)據(jù)開發(fā)者,我們也幾乎沒有機會編寫 Yarn 的相關程序。雖然不用編碼了,但在云計算的時代,一切資源都是動態(tài)管理的,理解這種動態(tài)管理的原理對于理解云計算也非常重要。Yarn 作為一個大數(shù)據(jù)平臺的資源管理框架,簡化了應用場景,對于幫助我們理解云計算的資源管理也很有幫助。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容