如果把大數(shù)據(jù)Hadoop集群當(dāng)作一臺(tái)計(jì)算機(jī), 那么
HDFS = 磁盤
YARN = 任務(wù)調(diào)度器+資源管理器
所有任務(wù)都是運(yùn)行在Yarn上
Yarn分為兩個(gè)大的模塊: ResourceManager NodeManager
ResourceManager
運(yùn)行在master機(jī)器上, 用于分配資源
兩個(gè)模塊
Scheduler? 負(fù)責(zé)資源分配
ApplicationsManager 負(fù)責(zé)應(yīng)用管理.
RM不負(fù)責(zé)啟動(dòng)container, 而是告訴AM哪些container可用, 由AM向NM發(fā)起請(qǐng)求來啟動(dòng)container.
RM負(fù)責(zé)啟動(dòng)AM, 并且在應(yīng)用程序失敗時(shí), 重啟AM.
NodeManager
運(yùn)行在slave機(jī)器上, 用于執(zhí)行任務(wù)
container是計(jì)算資源, 代表任務(wù)執(zhí)行時(shí)所分配的cpu,內(nèi)存等資源.
每個(gè)任務(wù)都是在container里執(zhí)行的.
執(zhí)行過程
client首先向RM提交應(yīng)用, 請(qǐng)求一個(gè)AM實(shí)例.
RM找到一個(gè)可以啟動(dòng)container的NM, 并啟動(dòng)一個(gè)AM實(shí)例
AM向RM注冊(cè)之后, client就可以從RM查找到AM的詳細(xì)信息, 可以和AM建立聯(lián)系.
AM向RM的Scheduler發(fā)送resource-request請(qǐng)求, Scheduler返回資源描述, 包括資源名稱(NM的地址,rack等)、優(yōu)先級(jí)剥扣、資源需求和container集合
AM向?qū)?yīng)的NM發(fā)起container-launch-specification來啟動(dòng)container
應(yīng)用程序在container中運(yùn)行, 并把進(jìn)度动分、狀態(tài)等信息通過application-specific協(xié)議發(fā)送給AM
應(yīng)用程序執(zhí)行完畢, AM向RM注銷, 并回收對(duì)應(yīng)的container
Scheduler
scheduler是個(gè)可插拔的組件, Yarn常用3種scheduler
FIFO Scheduler
完全先進(jìn)先出, 按照提交的先后順序. 大任務(wù)會(huì)堵塞小任務(wù). 不適合共享集群
Capacity Scheduler
為每個(gè)團(tuán)隊(duì)分配單獨(dú)的隊(duì)列, 每個(gè)隊(duì)列分配對(duì)應(yīng)的資源. 每個(gè)隊(duì)列內(nèi)部使用FIFO方式.
如果資源不夠, 可以使用其他隊(duì)列釋放出來的資源, 但是需要設(shè)置隊(duì)列能夠占用的最大資源, 防止隊(duì)列資源占用過高.
Fair Scheduler
根據(jù)權(quán)重來分配各隊(duì)列可以使用的資源.
如果一個(gè)隊(duì)列沒有任務(wù), 那么這個(gè)隊(duì)列的資源可以被其他隊(duì)列使用.
否則按照設(shè)置好的權(quán)重來分配隊(duì)列的可用資源.
沒有設(shè)置權(quán)重的隊(duì)列則使用平均分配的方式分配資源
搶占preemption
為了執(zhí)行任務(wù), 把超出自己份額的應(yīng)用的container殺掉, 用來執(zhí)行新提交的任務(wù).
Node Status: Node Manager和Resource Manager之間保持心跳, 并發(fā)送資源使用情況給RM.