Hadoop框架:Yarn基本結構和執行原理

知了一笑發表於2020-12-13

本文原始碼:GitHub·點這裡 || GitEE·點這裡

一、Yarn基本結構

Hadoop三大核心元件:分散式檔案系統HDFS、分散式計算框架MapReduce,分散式叢集資源排程框架Yarn。Yarn並不是在Hadoop初期就有的,是在Hadoop升級發展才誕生的,典型的Master-Slave架構。

Yarn包括兩個主要程式:資源管理器Resource-Manager,節點管理器Node-Manager。

資源管理器

  • 通常部署在獨立的伺服器,處理客戶端請求;
  • 處理叢集中的資源分配和排程管理;

節點管理器

  • 管理當前節點上的資源;
  • 執行處理各種具體的命令;
  • 監視節點資源情況,並上報資源管理器;

ApplicationMaster

  • 提供容錯能力,切割資料;
  • 給應用程式申請資源並分配任務;

Container

  • Yarn中的一個動態資源分配的概念;
  • 容器包含了一定量的記憶體、CPU等計算資源;
  • 由NodeManager程式啟動和管理;

二、基本執行流程

  • 向Yarn提交MapReduce應用程式程式進行排程;
  • RM元件返回資源提交路徑和ApplicationId;
  • RM程式NM程式通訊,根據叢集資源分配容器;
  • 將MRAppMaster分發到上面分配的容器上面;
  • 執行所需資源提交到HDFS上申請執行MRAppMaster;
  • RM經過上述操作把客戶端請求轉換為Task任務;
  • 容器中執行的就是Map或者Reduce任務;
  • 任務在執行期間和MRAppMaster通訊上報狀態;
  • 任務執行結束後程式登出並且釋放容器資源;

MapReduce應用開發遵循Yarn規範的MapReduceApplicationMaster,所以可以在Yarn上執行,其它計算框架如果也遵守該規範,這樣就實現資源的統一排程管理。

三、資源排程器

排程器的基本作用就是根據節點資源的使用情況和作業需求,將任務排程到各個節點上執行。單理解任務佇列的話關鍵的因素有如下幾個:進出方式,優先順序,容量等。

Hadoop作業排程器主要有三種:FIFO、CapacityScheduler和FairScheduler,預設的資源排程器是CapacityScheduler。

先進先出排程器

FIFO一種批處理排程器,排程策略先按照作業的優先順序高低,再按照到達時間的先後選擇被執行的作業。

容量排程器

CapacityScheduler支援多個佇列,每個佇列可配置一定的資源量,每個佇列採用FIFO排程策略,計算佇列中正在執行的任務書和計算資源的比值,選中比值小相對空閒的佇列,然後安裝作業優先順序和提交時間的排序。為了防止同一個使用者的作業獨佔佇列中的資源,該排程器會對同一使用者提交的作業所佔資源量進行限定。

例如上面圖例,假設100個slot分為三個佇列(ABC),按照如下分配規則:佇列A給20%的資源,佇列B給50%的資源,佇列C給30%的資源;三個佇列都按照任務的先後順序依次執行,上面的job11、job21、job31是最先執行,也是並行執行。

公平排程器

和容量排程器原理類似,支援多佇列多使用者,每個佇列中的資源量可以配置,同一佇列中的作業公平共享佇列中所有資源。

比如有三個佇列(ABC),每個佇列中的job按照優先順序分配資源,優先順序越高分配的資源越多,但是每個job都會分配到資源以確保公平。在資源有限的情況下,每個job理想情況下獲得的計算資源與實際獲得的計算資源存在一種差距,,這個差距就叫做缺額。在同一個佇列中,job的資源缺額越大,越先獲得資源優先執行,作業是按照缺額的高低來先後執行的。

四、原始碼地址

GitHub·地址
https://github.com/cicadasmile/big-data-parent
GitEE·地址
https://gitee.com/cicadasmile/big-data-parent

推薦閱讀:程式設計體系整理

序號 專案名稱 GitHub地址 GitEE地址 推薦指數
01 Java描述設計模式,演算法,資料結構 GitHub·點這裡 GitEE·點這裡 ☆☆☆☆☆
02 Java基礎、併發、物件導向、Web開發 GitHub·點這裡 GitEE·點這裡 ☆☆☆☆
03 SpringCloud微服務基礎元件案例詳解 GitHub·點這裡 GitEE·點這裡 ☆☆☆
04 SpringCloud微服務架構實戰綜合案例 GitHub·點這裡 GitEE·點這裡 ☆☆☆☆☆
05 SpringBoot框架基礎應用入門到進階 GitHub·點這裡 GitEE·點這裡 ☆☆☆☆
06 SpringBoot框架整合開發常用中介軟體 GitHub·點這裡 GitEE·點這裡 ☆☆☆☆☆
07 資料管理、分散式、架構設計基礎案例 GitHub·點這裡 GitEE·點這裡 ☆☆☆☆☆
08 大資料系列、儲存、元件、計算等框架 GitHub·點這裡 GitEE·點這裡 ☆☆☆☆☆

相關文章