1. 程式人生 > 其它 >大資料知識專欄 - Hadoop的資源管理 Yarn介紹

大資料知識專欄 - Hadoop的資源管理 Yarn介紹

技術標籤:Hadoop大資料hadoop大資料yarn

1, 介紹

存在目的: 實現資源管理和任務管理

yarn核心出發點是為了分離資源管理與作業監控,實現分離的做法是擁有一個全域性的資源管理(ResourceManager,RM),以及每個應用程式對應一個的應用管理器

Hadoop1.x同樣實現了資源管理和任務管理, 但是全部集中在MapReduce的任務中, 不適合將資源應用於其它框架, 例如Spark, 於是Hadoop2開始, 重新設定了資源管理框架Yarn, 將資源和任務的管理實現分離. 由ResourceManager負責資源管理, 由ApplicationMaster負責作業管理. 通過分配Container這種最小單位來實現對資源的管理.

2, 主要元件及作用

YARN總體上是Master/Slave結構 ,主要由ResourceManager、NodeManager、ApplicationMaster和Container等幾個元件構成.

ResourceManager: 資源管理和排程

​ ResourceManager負責處理客戶端請求, 對各個NM上的資源進行統一管理和排程.

​ 組成1-排程器: Scheduler分配資源, 將系統中的資源分配給正在執行的應用

​ 排程器根據容量、佇列等限制條件,將系統中的資源分配給各個正在執行的應用程式。排程器僅根據各個應用程式的資源需求進行資源分配,而資源分配單位是Container。Shceduler不負責監控或者跟蹤應用程式的狀態。總之,排程器根據應用程式的資源要求,以及叢集機器的資源情況,為應用程式分配封裝在Container中的資源。

​ 組成2-應用程式管理器ApplicationsManager

​ ApplicationsManager負責管理整個系統中所有應用程式, 包括應用程式提交、與排程器協商資源以啟動ApplicationMaster 、監控ApplicationMaster執行狀態並在失敗時重新啟動等,跟蹤分給的Container的進度、狀態.

NodeManager

	每個節點上資源和工作管理員, 定時彙報本節點上的資源使用情況和各個Container的執行狀態; 接收並處理來自ApplicationMaster的Container請求

ApplicationMaster

​ 應用程式均包含一個ApplicationMaster, 負責對應用的監控跟蹤應用執行狀態,重啟失敗任務等。ApplicationMaster是應用框架,它負責向ResourceManager協調資源,並且與NodeManager協同工作完成Task的執行和監控。

Container

​ 最小單位資源抽象, 封裝了某個節點上的多維度資源.如記憶體、CPU、磁碟、網路等,當ApplicationMaster向ResourceManager申請資源時,ResourceManager為ApplicationMaster 返回的資源便是用Container 表示的。

3, 架構和工作流程

任務提交到作業工作開始流程

1, Client找ApplicationsManager提交任務;

2, 啟動ApplicationMaster;

3, ApplicationMaster向ApplicationsManager註冊;

4, ApplicationMasterr向Scheduler申請資源;

5, Scheduler返回資源列表給ApplicationMaster;

6, ApplicationMaster向資源列表中的目標主機申請分配資源;

7, 目標主機執行計算任務;

8, 目標主機向ApplicationMaster彙報各個應用執行情況;

9, AppMaster向ApplicationsManager彙報任務執行情況;

10, ApplicationsManager向Client返回作業執行結果.

4, 資源排程器

yarn我們都知道主要是用於做資源排程,任務分配等功能的,那麼在hadoop當中,究竟使用什麼演算法來進行任務排程就需要我們關注了,hadoop支援好幾種任務的排程方式,不同的場景需要使用不同的任務排程器.

第一種排程器: FIFO Scheduler佇列排程

把任務按提交的順序排成一個佇列,這是一個先進先出佇列,在進行資源分配的時候,先給佇列中最頭上的任務進行分配資源,待最頭上任務需求滿足後再給下一個分配,以此類推。FIFO Scheduler是最簡單也是最容易理解的排程器,也不需要任何配置,但它並不適用於共享叢集。大的任務可能會佔用所有叢集資源,這就導致其它任務被阻塞。

第二種排程器: Capacity Scheduler容量排程器

apache版本預設使用的排程器

Capacity 排程器允許多個組織共享整個叢集,每個組織可以獲得叢集的一部分計算能力。通過為每個組織分配專門的佇列,然後再為每個佇列分配一定的叢集資源,這樣整個叢集就可以通過設定多個佇列的方式給多個組織提供服務了。除此之外,佇列內部又可以垂直劃分,這樣一個組織內部的多個成員就可以共享這個佇列資源了,在一個佇列內部,資源的排程是採用的是先進先出(FIFO)策略。

總結一句話: 共享叢集, 各個組織分一部分容量. 不用阻塞任務, 可以同時計算.

第三種排程器: Fair Scheduler公平排程器

CDH版本的 hadoop預設使用的排程器

Fair排程器的設計目標是為所有的應用分配公平的資源(對公平的定義可以通過引數來設定)。公平排程在也可以在多個佇列間工作。舉個例子,假設有兩個使用者A和B,他們分別擁有一個佇列。當A啟動一個job而B沒有任務時,A會獲得全部叢集資源;當B啟動一個job後,A的job會繼續執行,不過一會兒之後兩個任務會各自獲得一半的叢集資源。如果此時B再啟動第二個job並且其它job還在執行,則它將會和B的第一個job共享B這個佇列的資源,也就是B的兩個job會用於四分之一的叢集資源,而A的job仍然用於叢集一半的資源,結果就是資源最終在兩個使用者之間平等的共享.

總結一句話: 共享叢集, 各個組織動態調整擁有的資源容量, 實現按需索取和分配.

使用哪種排程器取決於yarn-site.xml當中的yarn.resourcemanager.scheduler.class 這個屬性的配置

5, 常用引數設定

設定資源

設定container分配最小記憶體
yarn.scheduler.minimum-allocation-mb 1024 給應用程式container分配的最小記憶體
設定container分配最大記憶體
yarn.scheduler.maximum-allocation-mb 8192 給應用程式container分配的最大記憶體
設定每個container的最小虛擬核心個數
yarn.scheduler.minimum-allocation-vcores 1 每個container預設給分配的最小的虛擬核心個數
設定每個container的最大虛擬核心個數
yarn.scheduler.maximum-allocation-vcores 32 每個container可以分配的最大的虛擬核心的個數

設定NodeManager可以分配的記憶體大小
yarn.nodemanager.resource.memory-mb 8192 nodemanager可以分配的最大記憶體大小,預設
8192Mb
定義每臺機器的記憶體使用大小
yarn.nodemanager.resource.memory-mb 8192
定義交換區空間可以使用的大小
硬碟當做記憶體使用, 比例作為值,這裡指定的是nodemanager的2.1倍
yarn.nodemanager.vmem-pmem-ratio 2.1