原文地址:Untangling Apache Hadoop YARN, Part 1: Cluster and YARN Basics
http://blog.cloudera.com/blog/2015/09/untangling-apache-hadoop-yarn-part-1/
YARN (Yet Another Resource Negotiator)是Apache Hadoop生態系統的資源管理層。 YARN已經發布了好久,但許多用戶仍然有關於YARN是什麼,以及它的工作原理的基本問題。本系列的文章需要達成以下目標:
- 對YARN的構成有基本的瞭解
- 圖例說明MapReduce作業如何使用YARN計算模型。(注意:雖然Apache Spark也可與YARN集成,但本系列將專門介紹MapReduce。有關Spark on YARN的信息,請參閱此帖。http://blog.cloudera.com/blog/2014/05/apache-spark-resource-management-and-yarn-app-models/)
- 介紹YARN調度程序如何工作並提供調度程序配置的示例
該系列包含以下部分:
1: 集群和YARN基礎
2: 全局配置基礎
3: 調度概念
4: 公平調度隊列基礎
5: 使用公平調度隊列屬性配置
在這篇文章中,我們將介紹YARN的基本原理,YARN在集群上運行進程的方式類似於操作系統在單計算機上運行進程的方式。後續部分將每隔幾周發佈一次。
集群基礎(Master/Worker)
主機(host)是Hadoop的一個術語,表示一臺計算機(也稱為節點,YARN的術語)。
集群是由高速本地網絡連接的兩個或更多個主機。兩個或更多主機 (也稱為YARN術語中的節點)- 通過高速本地網絡連接的計算機的Hadoop術語稱為集群。從Hadoop的角度來看,集群中可以有幾千個主機。
在Hadoop中,集群中有兩種類型的主機。
從概念上講,Master主機是客戶端程序的通信點。Master將工作發送到集群的worker主機。(在Hadoop中,集群在技術上可以是單個主機,這種設置通常用於調試或簡單測試,不推薦用於典型的Hadoop工作環境)。
YARN集群基礎(Master/ResourceManager, Worker/NodeManager)
在YARN群集,有兩種類型的host:
- ResourceManager是與客戶端通信的主守護程序,跟蹤群集上的資源,並將任務分配給NodeManager來協調工作
- NodeManager是一個Worker端守護進程,它啟動和跟蹤在工作主機上生成的進程。
YARN 配置文件
YARN配置文件是一個XML文件。此文件放置在集群中每個主機上,用於配置ResourceManager和NodeManager。默認情況下,此文件命名為yarn-site.xml。此文件中用於配置YARN的基本屬性將在後面的部分中介紹。
YARN的一個全局概覽
YARN當前定義了兩類資源,vcore和memory。每個NodeManager跟蹤其自己的本地資源,並將其資源配置傳達給ResourceManager,ResourceManager保存集群的可用資源的運行總計。通過跟蹤總計,ResourceManager知道如何在請求時分配資源。 (Vcore在YARN中有一個特殊的含義,你可以把它簡單地看作一個“CPU核心的使用份額”。如果你期望你的任務減少CPU密集型(有時稱為I / O密集型),你可以設置vcores與物理核心的比率高於1,以最大限度地利用硬件資源。)
容器(Containers)
容器是一個重要的YARN概念。您可以將容器視為在YARN集群一個佔用資源的請求。當前容器包含請求的vcore和內存,如下圖左所示。
一旦在主機上授權這些資源的申請,NodeManager將啟動一個稱為Task的進程。上圖右側顯示作為容器內部的進程運行的任務。 (第3部分將更詳細地介紹YARN如何計劃特定主機上的容器。)
個人理解容器是一個資源包。
YARN 集群基礎(Running Process/ApplicationMaster)
本節會有兩個新的YARN術語:
- application是由一個或多個任務組成的YARN客戶端程序(見Figure 5)。
- 對於每個正在運行的應用程序,一個稱為ApplicationMaster的特殊代碼用於協調YARN集群上的任務。 ApplicationMaster是應用程序啟動後運行的第一個進程。
在YARN集群上運行任務的應用程序由以下步驟組成:
1.應用程序啟動並與群集的ResourceManager對話:
2.ResourceManager 為應用請求一個容器,佔用資源。
3.ApplicationMaster開始在該容器中運行:
4.ApplicationMaster從ResourceManager請求分配用於為應用程序運行任務的後續容器。這些任務的大多數狀態通信都是與在步驟3中分配的ApplicationMaster進行。
5.所有任務完成後,ApplicationMaster退出。最後一個容器從集群中取消分配
6.應用程序客戶端退出。 (在一個容器中啟動的ApplicationMaster更具體地稱為託管AM。不受管理的ApplicationMasters在YARN的控制之外運行,Llama是非託管AM的示例。)
MapReduce 基礎
在MapReduce範例中,應用程序由Map任務和Reduce任務組成。Map task與 Reduce task與YARN的任務排列非常清楚。
組合MapReudce 和YARN
圖 10 說明了map任務和reduce任務在YARN中的調度過程。
在MapReduce應用程序中,有多個map任務,每個任務在集群中某個工作主機上的容器中運行。類似地,有多個reduce任務,每個都在工作主機上的容器中運行。
在YARN端,ResourceManager,NodeManager和ApplicationMaster一起工作來管理集群的資源,並確保任務以及相應的應用程序完全完成。
總結
1.集群由兩個或多個由內部高速網絡連接的主機組成。少數的Master主機控制集群其他主機。Worker主機就是非Matser主機。
2.在運行YARN的集群中,Master進程稱為ResourceManager,Worker進程稱為NodeManager。
3.YARN的配置文件名為yarn-site.xml。在群集中的每個主機上都有一個副本。它是ResourceManager和NodeManager正常運行所必需的。 YARN跟蹤集群上的兩個資源,vcore和memory。每個主機上的NodeManager跟蹤本地主機的資源,ResourceManager跟蹤集群的總數。
4.YARN中的container佔用集群上的資源。 YARN決定container空間的大小。一旦container被分配,那些資源就可被container使用。
5.YARN中的應用程序包括三個部分:
1.應用程序客戶端,這是程序在集群上運行的方式。
2.ApplicationMaster,它為YARN中執行應用程序進行執行分配。
3.在YARN分配的容器中執行實際工作(在進程中運行)的一個或多個任務
6.MapReduce應用程序包括Map任務和Reduce任務。
7.在YARN集群中運行的MapReduce應用程序看起來非常像MapReduce應用程序模式,但是添加了一個ApplicationMaster用作YARN對它們管理。
下一步
第2部分將涵蓋計算集群配置的YARN屬性。同時,請進一步閱讀:
http://blog.cloudera.com/blog/2013/11/migrating-to-mapreduce-2-on-yarn-for-users/
http://blog.cloudera.com/blog/2013/11/migrating-to-mapreduce-2-on-yarn-for-operators/
閱讀更多 陳序猿9527 的文章