目錄
????1 Hadoop1.x和Hadoop2.x架構(gòu)區(qū)別
????2 Yarn概述
????3 Yarn基本架構(gòu)
????4 Yarn工作機制
????5 作業(yè)提交全過程
????6 資源調(diào)度器
????7 任務(wù)的推測執(zhí)行
1 Hadoop1.x和Hadoop2.x架構(gòu)區(qū)別
在Hadoop1.x時代,Hadoop中的MapReduce同時處理業(yè)務(wù)邏輯運算和資源的調(diào)度蒲列,耦合性較大约炎。
在Hadoop2.x時代,增加了Yarn公般。Yarn只負責(zé)資源的調(diào)度雕崩,MapReduce只負責(zé)運算
2 Yarn概述
????Yarn是一個資源調(diào)度平臺涝动,負責(zé)為運算程序提供服務(wù)器運算資源,相當(dāng)于一個分布式的操作系統(tǒng)平臺胆描,而MapReduce等運算程序則相當(dāng)于運行于操作系統(tǒng)之上的應(yīng)用程序瘫想。
3 Yarn基本架構(gòu)
????YARN主要由ResourceManager辉阶、NodeManager褥蚯、ApplicationMaster和Container等組件構(gòu)成。
4 Yarn工作機制
(1)Yarn運行機制
(2)yarn工作機制詳解
- (0)Mr程序提交到客戶端所在的節(jié)點镰官。
- (1)Yarnrunner向Resourcemanager申請一個Application剧蚣。
- (2)rm將該應(yīng)用程序的資源路徑返回給yarnrunner支竹。
- (3)該程序?qū)⑦\行所需資源提交到HDFS上旋廷。
- (4)程序資源提交完畢后鸠按,申請運行mrAppMaster。
- (5)RM將用戶的請求初始化成一個task饶碘。
- (6)其中一個NodeManager領(lǐng)取到task任務(wù)目尖。
- (7)該NodeManager創(chuàng)建容器Container,并產(chǎn)生MRAppmaster扎运。
- (8)Container從HDFS上拷貝資源到本地瑟曲。
- (9)MRAppmaster向RM 申請運行maptask資源。
- (10)RM將運行maptask任務(wù)分配給另外兩個NodeManager豪治,另兩個NodeManager分別領(lǐng)取任務(wù)并創(chuàng)建容器洞拨。
- (11)MR向兩個接收到任務(wù)的NodeManager發(fā)送程序啟動腳本,這兩個NodeManager分別啟動maptask负拟,maptask對數(shù)據(jù)分區(qū)排序烦衣。
- (12)MrAppMaster等待所有maptask運行完畢后,向RM申請容器掩浙,運行reduce task花吟。
- (13)reduce task向maptask獲取相應(yīng)分區(qū)的數(shù)據(jù)。
- (14)程序運行完畢后厨姚,MR會向RM申請注銷自己衅澈。
5 作業(yè)提交全過程
作業(yè)提交全過程詳解
(1)作業(yè)提交
- 第0步:client調(diào)用job.waitForCompletion方法,向整個集群提交MapReduce作業(yè)谬墙。
- 第1步:client向RM申請一個作業(yè)id今布。
- 第2步:RM給client返回該job資源的提交路徑和作業(yè)id。
- 第3步:client提交jar包拭抬、切片信息和配置文件到指定的資源提交路徑险耀。
- 第4步:client提交完資源后,向RM申請運行MrAppMaster玖喘。
(2)作業(yè)初始化
- 第5步:當(dāng)RM收到client的請求后甩牺,將該job添加到容量調(diào)度器中。
- 第6步:某一個空閑的NM領(lǐng)取到該job累奈。
- 第7步:該NM創(chuàng)建Container贬派,并產(chǎn)生MRAppmaster急但。
- 第8步:下載client提交的資源到本地。
(3)任務(wù)分配
- 第9步:MrAppMaster向RM申請運行多個maptask任務(wù)資源搞乏。
- 第10步:RM將運行maptask任務(wù)分配給另外兩個NodeManager波桩,另兩個NodeManager分別領(lǐng)取任務(wù)并創(chuàng)建容器。
(4)任務(wù)運行
- 第11步:MR向兩個接收到任務(wù)的NodeManager發(fā)送程序啟動腳本请敦,這兩個NodeManager分別啟動maptask镐躲,maptask對數(shù)據(jù)分區(qū)排序。
- 第12步:MrAppMaster等待所有maptask運行完畢后侍筛,向RM申請容器萤皂,運行reduce task。
- 第13步:reduce task向maptask獲取相應(yīng)分區(qū)的數(shù)據(jù)匣椰。
- 第14步:程序運行完畢后裆熙,MR會向RM申請注銷自己。
(5)進度和狀態(tài)更新
????YARN中的任務(wù)將其進度和狀態(tài)(包括counter)返回給應(yīng)用管理器, 客戶端每秒(通過mapreduce.client.progressmonitor.pollinterval設(shè)置)向應(yīng)用管理器請求進度更新, 展示給用戶禽笑。
(6)作業(yè)完成
????除了向應(yīng)用管理器請求作業(yè)進度外, 客戶端每5分鐘都會通過調(diào)用waitForCompletion()來檢查作業(yè)是否完成入录。時間間隔可以通過mapreduce.client.completion.pollinterval來設(shè)置。作業(yè)完成之后, 應(yīng)用管理器和container會清理工作狀態(tài)佳镜。作業(yè)的信息會被作業(yè)歷史服務(wù)器存儲以備之后用戶核查僚稿。
6 資源調(diào)度器
????目前,Hadoop作業(yè)調(diào)度器主要有三種:FIFO蟀伸、Capacity Scheduler和Fair Scheduler蚀同。Hadoop2.7.2默認的資源調(diào)度器是Capacity Scheduler。
具體設(shè)置詳見:yarn-default.xml文件
<property>
<description>The class to use as the resource scheduler.</description>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
(1)先進先出調(diào)度器(FIFO)
- 優(yōu)點:調(diào)度算法簡單望蜡,JobTracker工作負擔(dān)輕唤崭。
- 缺點:忽略了不同作業(yè)的需求差異。例如如果類似對海量數(shù)據(jù)進行統(tǒng)計分析的作業(yè)長期占據(jù)計算資源脖律,那么在其后提交的交互型作業(yè)有可能遲遲得不到處理谢肾,從而影響到用戶的體驗。
(2)容量調(diào)度器(Capacity Scheduler)===>Yahoo開發(fā)
1.多隊列支持小泉,每個隊列采用FIFO
2.為了防止同一個用戶的作業(yè)獨占隊列中的資源芦疏,該調(diào)度器會對同一個用戶提交多的作業(yè)所占資源量進行限定
3.首先,計算每個隊列中正在運行的任務(wù)數(shù)與其應(yīng)該分得的計算資源之間的比值微姊,選擇一個該比值最小的隊列
4.其次酸茴,根據(jù)作業(yè)的優(yōu)先級和提交時間順序,同時考慮用戶資源量限制和內(nèi)存限制對隊列內(nèi)任務(wù)排序
5.三個隊列同時按照任務(wù)的先后順序依次執(zhí)行兢交,比如薪捍,job1,job21和job31分別排在隊列最前面,是最先運行酪穿,也是同時運行
????該調(diào)度默認情況下不支持優(yōu)先級凳干,但是可以在配置文件中開啟此選項,如果支持優(yōu)先級被济,調(diào)度算法就是帶有優(yōu)先級的FIFO救赐。
????不支持優(yōu)先級搶占,一旦一個作業(yè)開始執(zhí)行只磷,在執(zhí)行完之前它的資源不會被高優(yōu)先級作業(yè)所搶占经磅。
????對隊列中同一用戶提交的作業(yè)能夠獲得的資源百分比進行了限制以使同屬于一用戶的作業(yè)不能出現(xiàn)獨占資源的情況。
(3)公平調(diào)度器(Fair Scheduler)===>Facebook開發(fā)
1.支持多隊列多用戶钮追,每個隊列中的資源量可以配置预厌,同一個隊列中的作業(yè)公平共享隊列中所有資源
2.比如有三個隊列A,B畏陕,C.每個隊列中的job按照優(yōu)先級分配資源配乓,優(yōu)先級越高分配的資源越多仿滔,但是每個job都分配到資源以確保公平惠毁。在資源有限的情況下,每個job理想情況下崎页,獲得的計算資源與實際獲得的計算資源存在一種差距鞠绰,這個差距叫做缺額。同一個隊列飒焦,job的資源缺額越大蜈膨,越先獲得的資源優(yōu)先執(zhí)行,作業(yè)是按照缺額的高低來先后執(zhí)行的牺荠,而且可以看到上圖有多個作業(yè)同時運行
7 任務(wù)的推測執(zhí)行
????推測執(zhí)行(Speculative Execution)是指在集群環(huán)境下運行MapReduce翁巍,可能是程序Bug,負載不均或者其他的一些問題休雌,導(dǎo)致在一個JOB下的多個TASK速度不一致灶壶,比如有的任務(wù)已經(jīng)完成,但是有些任務(wù)可能只跑了10%杈曲,根據(jù)木桶原理驰凛,這些任務(wù)將成為整個JOB的短板,如果集群啟動了推測執(zhí)行担扑,這時為了最大限度的提高短板恰响,Hadoop會為該task啟動備份任務(wù),讓speculative task與原始task同時處理一份數(shù)據(jù)涌献,哪個先運行完胚宦,則將誰的結(jié)果作為最終結(jié)果,并且在運行完成后Kill掉另外一個任務(wù)。
(1)作業(yè)完成時間取決于最慢的任務(wù)完成時間
????一個作業(yè)由若干個Map任務(wù)和Reduce任務(wù)構(gòu)成枢劝。因硬件老化绞灼、軟件Bug等,某些任務(wù)可能運行非常慢呈野。
????典型案例:系統(tǒng)中有99%的Map任務(wù)都完成了低矮,只有少數(shù)幾個Map老是進度很慢,完不成被冒,怎么辦军掂?
(2)推測執(zhí)行機制:
????發(fā)現(xiàn)拖后腿的任務(wù),比如某個任務(wù)運行速度遠慢于任務(wù)平均速度昨悼。為拖后腿任務(wù)啟動一個備份任務(wù)蝗锥,同時運行。誰先運行完率触,則采用誰的結(jié)果终议。
(3)執(zhí)行推測任務(wù)的前提條件
- 每個task只能有一個備份任務(wù);
- 當(dāng)前job已完成的task必須不小于0.05(5%)
- 開啟推測執(zhí)行參數(shù)設(shè)置葱蝗,mapred-site.xml文件中默認是打開的
<property>
<name>mapreduce.map.speculative</name>
<value>true</value>
<description>If true, then multiple instances of some map tasks may be executed in parallel.</description>
</property>
<property>
<name>mapreduce.reduce.speculative</name>
<value>true</value>
<description>If true, then multiple instances of some reduce tasks
may be executed in parallel.</description>
</property>
(4)不能啟用推測執(zhí)行機制情況
- 任務(wù)間存在嚴重的負載傾斜穴张;
- 特殊任務(wù),比如任務(wù)向數(shù)據(jù)庫中寫數(shù)據(jù)