03 Yarn 原理介紹

Yarn 原理介紹
大綱:
Hadoop 架構介紹
YARN 產生的背景
YARN 基礎架構及原理
 
Hadoop的1.X架構的介紹
 

 

在1.x中的NameNodes只可能有一個,雖然能夠經過SecondaryNameNode與NameNode進行數據同步備份,可是總會存在必定的時延,若是NameNode掛掉,可是若是有部份數據尚未同步到SecondaryNameNode上,仍是可能會存在着數據丟失的問題。
 

包含兩層:java

Namespacenode

l 包含目錄、文件以及塊的信息shell

l 支持對Namespace相關文件系統的操做,如增長、刪除、修改以及文件和目錄的展現編程

Block Storage Service包含兩部份安全

l 塊管理(在Namenode中實現的)網絡

提供數據節點羣集成員的登記,並按期經過心跳進行檢查。架構

提供塊報告以及塊的存儲位置的維護併發

提供對塊的操做,如對塊進行增刪改的操做及獲取塊的存儲地址框架

對塊的複本的的複製以及存儲位置的管理異步

l 存儲 - 提供Datanode進行數據的本地存儲,並提供讀寫的操做

 

弊端:

1.擴展性差

2.可靠性差

3.資源利用率低

4.沒法支持多種計算框架

 

Hadoop的2.X架構的介紹
在2.X中,HDFS的變化,主要體如今加強了NameNode的水平擴展及可用性,能夠同時部署多個NameNode,這些NameNodes之間是相互獨立,也就是說他們不須要相互協調,DataNode同時在全部NameNodes註冊,作爲他們共有的存儲節點,並向定時向全部的這些NameNodes發送心跳塊使用狀況的報告,並處理全部NameNodes向其發送的指令。
 

存儲塊池(Block Pool)

一個存儲塊池是由一組存儲塊組成,它屬於一個單獨的Namespace(Namenode),集羣中全部存儲塊池的存儲塊都是存放在Datanodes中的。每一個存儲塊池與其它的存儲塊池都是獨立管理的,於是其在爲新的塊生成Block IDs時,就不須要與其它Namespace(Namenode)中的存儲塊池進行協做,即便一個Namespace(Namenode)掛掉了,也不會使得Datanodes中的塊被訪問不到,由於其它Namespace(Namenode)中的存儲塊池也存放了Datanodes中全部存儲塊的信息。

一個命名空間(Namespace)和它的塊池一塊兒被稱爲命名空間向量。它是一個自包含的管理單元。當一個Namenode/namespace被刪除,存儲於Datanodes中的相應的存儲塊池也會被刪除掉,在集羣的更新過程當中,每一個命名空間向量都是以一個總體進行升級的。

 

集羣ID(ClusterID)

集羣ID的加入,是用於確認集羣中全部的節點,也能夠在格式化其它Namenodes時指定集羣ID,並使其加入到某個集羣中。

 

YARN的基礎構架

  YARN 是一種Hadoop資源管理器,它是一個通用資源管理系統,可謂上層應用提供統一的資源廣利和調度,它的引入爲幾圈在利用率、資源統一管理和數據共享等方面帶來了巨大的好處

 

應用場景

通用的統一的資源管理系統:

1.長應用程序

2.短應用程序

 

 

Yarn的優勢

大大減少了 JobTracker(也就是如今的 ResourceManager)的資源消耗,而且讓監測每個 Job 子任務 (tasks) 狀態的程序分佈式化了,更安全、更優美。
在新的 Yarn 中,ApplicationMaster 是一個可變動的部分,用戶能夠對不一樣的編程模型寫本身的 AppMst,讓更多類型的編程模型可以跑在 Hadoop 集羣中,能夠參考 hadoop Yarn 官方配置模板中的 mapred-site.xml 配置。
對於資源的表示之內存爲單位 ( 在目前版本的 Yarn 中,沒有考慮 cpu 的佔用 ),比以前以剩餘 slot 數目更合理。
老的框架中,JobTracker 一個很大的負擔就是監控 job 下的 tasks 的運行情況,如今,這個部分就扔給 ApplicationMaster 作了,而 ResourceManager 中有一個模塊叫作 ApplicationsMasters( 注意不是 ApplicationMaster),它是監測 ApplicationMaster 的運行情況,若是出問題,會將其在其餘機器上重啓。
Container 是 Yarn 爲了未來做資源隔離而提出的一個框架。這一點應該借鑑了 Mesos 的工做,目前是一個框架,僅僅提供 java 虛擬機內存的隔離,hadoop 團隊的設計思路應該後續能支持更多的資源調度和控制 , 既然資源表示成內存量,那就沒有了以前的 map slot/reduce slot 分開形成集羣資源閒置的尷尬狀況。

YARN的核心思想

將JobTracker和TaskTacker進行分離,它由下面幾大構成組件:
a. 一個全局的資源管理器 ResourceManager
b.ResourceManager的每一個節點代理 NodeManager
c. 表示每一個應用的 ApplicationMaster
d. 每個ApplicationMaster擁有多個Container在NodeManager上運行

ResourceManager(RM)

RM是一個全局的資源管理器,負責整個系統的資源管理和分配。它主要由兩個組件構成:調度器(Scheduler)和應用程序管理器(Applications Manager,ASM)。
調度器 調度器根據容量、隊列等限制條件(如每一個隊列分配必定的資源,最多執行必定數量的做業等),將系統中的資源分配給各個正在運行的應用程序。須要注意的是,該調度器是一個「純調度器」,它再也不從事任何與具體應用程序相關的工做,好比不負責監控或者跟蹤應用的執行狀態等,也不負責從新啓動因應用執行失敗或者硬件故障而產生的失敗任務,這些均交由應用程序相關的ApplicationMaster完成。調度器僅根據各個應用程序的資源需求進行資源分配,而資源分配單位用一個抽象概念「資源容器」(Resource Container,簡稱Container)表示,Container是一個動態資源分配單位,它將內存、CPU、磁盤、網絡等資源封裝在一塊兒,從而限定每一個任務使用的資源量。此外,該調度器是一個可插拔的組件,用戶可根據本身的須要設計新的調度器,YARN提供了多種直接可用的調度器,好比Fair Scheduler和Capacity Scheduler等。
應用程序管理器應用程序管理器負責管理整個系統中全部應用程序,包括應用程序提交、與調度器協商資源以啓動ApplicationMaster、監控ApplicationMaster運行狀態並在失敗時從新啓動它等。

ApplicationMaster(AM)

用戶提交的每一個應用程序均包含一個AM,主要功能包括:
與RM調度器協商以獲取資源(用Container表示);
將獲得的任務進一步分配給內部的任務(資源的二次分配);
與NM通訊以啓動/中止任務;
監控全部任務運行狀態,並在任務運行失敗時從新爲任務申請資源以重啓任務。
當前YARN自帶了兩個AM實現,一個是用於演示AM編寫方法的實例程序distributedshell,它能夠申請必定數目的Container以並行運行一個Shell命令或者Shell腳本;另外一個是運行MapReduce應用程序的AM—MRAppMaster。
注:RM只負責監控AM,在AM運行失敗時候啓動它,RM並不負責AM內部任務的容錯,這由AM來完成。

NodeManager(NM)

NM是每一個節點上的資源和任務管理器,一方面,它會定時地向RM彙報本節點上的資源使用狀況和各個Container的運行狀態;另外一方面,它接收並處理來自AM的Container啓動/中止等各類請求。

Container

Container是YARN中的資源抽象,它封裝了某個節點上的多維度資源,如內存、CPU、磁盤、網絡等,當AM向RM申請資源時,RM爲AM返回的資源即是用Container表示。YARN會爲每一個任務分配一個Container,且該任務只能使用該Container中描述的資源。
注:1. Container不一樣於MRv1中的slot,它是一個動態資源劃分單位,是根據應用程序的需求動態生成的。
2. 如今YARN僅支持CPU和內存兩種資源,且使用了輕量級資源隔離機制Cgroups進行資源隔離。
YARN的資源管理和執行框架都是按主/從範例實現的——Slave ---節點管理器(NM)運行、監控每一個節點,並向集羣的Master---資源管理器(RM)報告資源的可用性狀態,資源管理器最終爲系統裏全部應用分配資源。
特定應用的執行由ApplicationMaster控制,ApplicationMaster負責將一個應用分割成多個任務,並和資源管理器協調執行所需的資源,資源一旦分配好,ApplicationMaster就和節點管理器一塊兒安排、執行、監控獨立的應用任務。
須要說明的是, YARN不一樣服務組件的通訊方式採用了事件驅動的異步併發機制,這樣能夠簡化系統的設計。
 

 

相關文章
相關標籤/搜索