1. 程式人生 > >Hadoop基礎知識---之YARN原理簡述

Hadoop基礎知識---之YARN原理簡述

YARN原理簡述

MapReduce的缺陷

多租戶問題

多使用者

多程式設計模型

JobTracker/TaskTracker架構設計缺陷

JobTracker是集中處理點,單點故障

JobTracker任務重,資源過度消耗

資源模型過於簡單  --- TaskTracker以MR Task數作為資源,沒有考慮CPU和記憶體

TaskTracker強制把資源分成map task slot和reduce taskslot   ---資源利用率低

YARN的誕生   

YARN的命名

Yet Another Resource Negotiator

根本思想

將JobTracker功能分離:資源管理;任務排程/監控

YARN設計目標

叢集共享;可伸縮性;可靠性

實現方式

分層的叢集框架

YARN架構

Resouce Manager

主要功能

負責緊張中所有資料的統一管理和分配

接受各個節點(NodeManager)的資源彙報資訊

把資源按照策略分配給各應用(ApplicationMaster)

組成部分

使用者互動User Service

NodeManager管理

ApplicationMaster管理

Application管理

安全管理

資源分配

NodeManager

主要功能

管理單個計算節點

與ResourceManager保持通訊

監控Container生命週期,管理資源使用。沒有map slot和reduce slot概念,擴充套件更容易。

組成部分

–NodeStatusUpdater

–ContainerManager(核心元件)

–ContainerExecutor

–NodeHealthCheckerService

–Security

–WebServer

ApplicationMaster

ApplicationMaster概念

JobTracker諸多問題,作業控制和資源管理分離,ApplicationMaster承擔作業控制功能。

YARN稱為資源管理平臺,適用於多種計算框架。

--MapReduce,流式計算,迭代式計算

--需要為每個應用開發一個ApplicationMaster元件

--YARN提供MapReduce的ApplicationMaster實現

實現方式

–使用基於事件驅動的非同步程式設計模型,由中央事件排程器統一管理所有事件

–每種元件是一種事件處理器,在中央排程器中註冊

ApplicationMaster容錯

–在HDFS記錄task執行日誌

–分配新的節點執行ApplicationMaster

–切換後從HDFS讀取日誌,恢復執行完成的task

–沒有執行完task重新申請資源和執行

Container

Container基本概念和工作流程

Container是YARN中資源的抽象,封裝了某節點上一定量的資源(記憶體,CPU)

由AM向RM申請,由RM中的資源排程器非同步分配給AM

Container的執行由AM向資源所在的NM發起

兩類Container

–執行AM

•由RM申請和啟動,使用者提交應用程式時,指定AM所需的資源

–執行各類任務

•由AM向RM申請,並由AM與NM通訊以啟動

YARN的工作流程

使用者將應用程式提交到RM

RM為AM申請資源,與某個NM通訊,啟動AM

AM與RM通訊,為執行任務申請資源

得到資源後與NM通訊,啟動相應的任務

所有任務結束後,AM向RM登出,整個應用結束

HadoopRPC的演變

Hadoop RPC在跨語言支援和協議相容性兩個方面存在不足

Hadoop RPC應允許某些協議的客戶端或者伺服器端採用其它語言實現

當前Hadoop版本較多,而不同版本之間不能通訊

為了解決以上幾個問題,Hadoop YARN將RPC中的序列化部分剝離開,以便將現有的開源RPC框架整合進來

–RPC類變成了一個工廠,它將具體的RPC實現授權給RpcEngine實現類,而現有的開源RPC只要實現RpcEngine介面,便可以整合到HadoopRPC中

YARN中的RPC協議

Yarn中的事件驅動與狀態機

為了增大併發性,Yarn採用事件驅動的併發模型,將各種處理邏輯抽象成事件和排程器,將事件的處理過程用狀態機表示

什麼是狀態機

---如果一個物件,其構成為若干個狀態,以及觸發這些狀態傳送相互轉移的事件,那麼此物件稱之為狀態機。

對於狀態機模式,基本做法是

根據發生的時間和當前狀態,來執行下一步的動作action,並設定下一個狀態。

ResourceScheduler

事件處理器,處理6種事件型別:

–NODE_REMOVED,移除計算節點

–NODE_ADDED,增加計算節點

–APPLICATION_ADDED,RM收到新App

–APPLICATION_REMOVED,App執行結束

–CONTAINER_EXPIRED,一個AM在一定時間間隔內沒有使用Container,會被scheduler收回

–NODE_UPDATE

•NM通過心跳向RM彙報Container情況,觸發NODE_UPDATE事件,會引發資源分配

•排程器:FIFOScheduler、CapacityScheduler、FairScheduler

FIFO Scheduler

•最簡單的排程器

•只有一個佇列

•先入先出

CapacityScheduler

最大化叢集吞吐量

核心思想

--- 每個佇列獲得一定資源  

---空閒佇列可以把資源“借”給忙佇列

---需要時可以取回

排程策略

應該獲得的資源/實際獲得的資源,選擇比值最低的佇列

佇列內FIFO

考慮限制:使用者最大資源限制,任務資源要求

資源分配模型

排程器維護多個佇列資訊

使用者向佇列提交應用

NM心跳時,排程器根據規則選擇佇列和應用

本地優化與延遲排程

本地優化

HDFS具有3副本,在多個節點

Container處理的資料在本地可以節省網路頻寬

AM給RM提交資源申請時,傳送本地申請  ---本地申請,匹配機架申請,任意申請

延遲排程

本地申請匹配失敗,暫時跳過

跳過次數有限,防止“餓死”   

FairScheduler

•多使用者公平共享叢集資源

•作業池

–每個使用者單獨資源池

–作業放進共享資源池

–每個作業最低資源保障

•排程策略

–預設FIFO

–赤字策略

•deficti=理想情況下獲得的資源-實際獲得資源的差值

•優先分給最高deficit作業

YARN HA架構 

YARN總結

改進部分

減少MapReduce的資源瓶頸,讓監控task狀態的程式分散式化,更安全,更優美。

ApplicationMaster是可變更部分,可以針對不同的程式設計模型編寫自己的ApplicationMaster,

讓更多程式設計模型能夠跑在Hadoop

–對資源的表示以記憶體和CPU為單位,比之前的slot數目更合理

–MRv1框架jobtracker監控job下的所有task,現在交給ApplicationMaster。ResourceManager監控所有ApplicationMaster ,如果出了問題在其他機器重啟

–Container是Yarn作為資源隔離提出的框架,提供java虛擬機器記憶體的隔離