轉(zhuǎn)載請(qǐng)出自出處: http://eksliang.iteye.com/blog/2228705
一.Hadoop1.0中MapReduce的組成
1.從功能模塊角度
- 客戶端 :提交MapReduce作業(yè);
- JobTracker :
1.作業(yè)調(diào)度:將一個(gè)作業(yè)(Job)分成若干個(gè)子任務(wù)分發(fā)到taskTraker中去執(zhí)行
2.任務(wù)監(jiān)控:TaskTracker發(fā)送心跳給JobTracker報(bào)告自己的運(yùn)行狀態(tài),以讓JobTracker能夠監(jiān)控到他
3.資源管理:每個(gè)任務(wù)向JobTracker申請(qǐng)資源
4.監(jiān)控過(guò)程中發(fā)現(xiàn)失敗或者運(yùn)行過(guò)慢的任務(wù),對(duì)他進(jìn)行重新啟動(dòng)
- TaskTraker :
主動(dòng)發(fā)送心跳給jobTracker并與JobTracker他通信,從而接受到JobTracker發(fā)送過(guò)來(lái)需要執(zhí)行的任務(wù)
2.從架構(gòu)的角度
- 編程模型(新舊API)
- ?運(yùn)行環(huán)境(JobTracker和TaksTracker)
- ?數(shù)據(jù)處理引擎(MapTask和ReduceTask)
?
二.MapReduce(hadoop1.0)的資源管理模型
2.1MapReduce的資源組成由兩部分組成
- 資源表示模型
用于描述資源表示形式,Hadoop1.0使用“槽位(slot)”組織各個(gè)節(jié)點(diǎn)的資源,為了簡(jiǎn)化資源的管理,Hadoop將各個(gè)節(jié)點(diǎn)上資源(CPU、內(nèi)存、網(wǎng)絡(luò)IO、磁盤(pán)IO等等)等量切分成若干份,每一份用“slot”表示,同時(shí)規(guī)定一個(gè)task可根據(jù)實(shí)際情況需要占用多個(gè)”slot”。
簡(jiǎn)單的說(shuō):hadoop1.0將多維度的資源進(jìn)行了抽象,使用“slot”來(lái)表示,從而簡(jiǎn)化對(duì)資源的管理。
- 資源分配模型
而資源分配模型則決定如何將資源分配給各個(gè)作業(yè)/任務(wù),在Hadoop中,這一部分由一個(gè)插拔式的調(diào)度器完成。
更進(jìn)一步說(shuō),slot相當(dāng)于運(yùn)行的“許可證”,一個(gè)任務(wù)只有獲得“許可證”后,才能夠獲得運(yùn)行的機(jī)會(huì),這也意味著,每一個(gè)節(jié)點(diǎn)上的slot的數(shù)量決定了當(dāng)前節(jié)點(diǎn)能夠并發(fā)執(zhí)行多少個(gè)任務(wù)。Hadoop1.0為了區(qū)分MapTask跟ReduceTask所使用資源的差異,進(jìn)一步將slot分為MapSlot跟ReduceSlot,他們分別只能被MapTask跟ReduceTask使用。
?
Hadoop集群管理員可根據(jù)各個(gè)節(jié)點(diǎn)硬件配置和應(yīng)用特點(diǎn)為它們分配不同的map slot數(shù)(由參數(shù)mapred.tasktracker.map.tasks.maximum指定)和reduce slot數(shù)(由參數(shù)mapred.tasktrackerreduce.tasks.maximum指定)
?
2.2Hadoop1.0資源管理的缺點(diǎn)
- 靜態(tài)資源配置 。采用了靜態(tài)資源設(shè)置策略,即每個(gè)節(jié)點(diǎn)事先配置好可用的slot總數(shù),這些slot數(shù)目一旦啟動(dòng)后無(wú)法再動(dòng)態(tài)修改。
- 資源無(wú)法共享 。Hadoop 1.0將slot分為Map slot和Reduce slot兩種,且不允許共享。對(duì)于一個(gè)作業(yè),剛開(kāi)始運(yùn)行時(shí),Map slot資源緊缺而Reduce slot空閑,當(dāng)Map Task全部運(yùn)行完成后,Reduce slot緊缺而Map slot空閑。很明顯,這種區(qū)分slot類別的資源管理方案在一定程度上降低了slot的利用率。
- 資源劃分粒度過(guò)大 。資源劃分粒度過(guò)大,往往會(huì)造成節(jié)點(diǎn)資源利用率過(guò)高或者過(guò)低 ,比如,管理員事先規(guī)劃好一個(gè)slot代表2GB內(nèi)存和1個(gè)CPU,如果一個(gè)應(yīng)用程序的任務(wù)只需要1GB內(nèi)存,則會(huì)產(chǎn)生“資源碎片”,從而降低集群資源的利用率,同樣,如果一個(gè)應(yīng)用程序的任務(wù)需要3GB內(nèi)存,則會(huì)隱式地?fù)屨计渌蝿?wù)的資源,從而產(chǎn)生資源搶占現(xiàn)象,可能導(dǎo)致集群利用率過(guò)高。
- 沒(méi)引入有效的資源隔離機(jī)制 。Hadoop 1.0僅采用了基于jvm的資源隔離機(jī)制,這種方式仍過(guò)于粗糙,很多資源,比如CPU,無(wú)法進(jìn)行隔離,這會(huì)造成同一個(gè)節(jié)點(diǎn)上的任務(wù)之間干擾嚴(yán)重。
三.Year的資源管理模型
? ? ? 在實(shí)際系統(tǒng)中,資源本身是多維度的,包括CPU、內(nèi)存、網(wǎng)絡(luò)I/O和磁盤(pán)I/O等,因此,如果想精確控制資源分配,不能再有slot的概念,最直接的方法就是是讓任務(wù)直接向調(diào)度器申請(qǐng)自己需要的資源(比如某個(gè)任務(wù)可申請(qǐng)1GB 內(nèi)存和1個(gè)CPU),而調(diào)度器則按照任務(wù)實(shí)際需求為其精細(xì)地分配對(duì)應(yīng)的資源量,不再簡(jiǎn)單的將一個(gè)Slot分配給它,Hadoop 2.0正式采用了這種基于真實(shí)資源量的資源分配方案。
? ? ? ?MRv2最基本的設(shè)計(jì)思想是將JobTracker的兩個(gè)主要功能,即資源管理和作業(yè)調(diào)度/監(jiān)控分成兩個(gè)獨(dú)立的進(jìn)程。全局的ResourceManager(RM)和與每個(gè)應(yīng)用相關(guān)的ApplicationMaster(AM)。
“RM有兩個(gè)組件組成:調(diào)度器(Scheduler)應(yīng)用管理器(ApplicationsManager,ASM)”
如下圖是官網(wǎng)提供的year架構(gòu)圖
3.1 Year的功能組成模塊
? ? ? ?調(diào)度器是個(gè)可插拔的組件,負(fù)責(zé)作業(yè)的調(diào)度并將集群中的資源分配給應(yīng)用。YARN自帶了多個(gè)資源調(diào)度器,如Capacity Scheduler和Fair Scheduler等。
? ? ? ?ASM:負(fù)責(zé)接收任務(wù),并指定AS運(yùn)行的節(jié)點(diǎn)NM節(jié)點(diǎn),同時(shí)啟動(dòng)AM
?
- NM:是每個(gè)節(jié)點(diǎn)上的資源管理,負(fù)責(zé)處理來(lái)自RM的命令,處理AM的命令,主動(dòng)發(fā)送心跳給RM,讓RM能夠監(jiān)控NM的運(yùn)行狀態(tài)。
- AM:就是我們的應(yīng)用(應(yīng)用可以是mapduce程序或者DAG有向無(wú)環(huán)圖)
- Container:是YARN中資源的抽象,將操作系統(tǒng)中多維度的資源(CPU、內(nèi)存、網(wǎng)絡(luò)I/O和磁盤(pán)I/O等)封裝成container,是Year中資源的基本單位
3.2 應(yīng)用在Year中的運(yùn)行流程
- 客戶端提交一個(gè)應(yīng)用程序AM到ResourceManager上
- ResourceManager先與集群中NodeManager通信,根據(jù)集群中NodeManger的資源 ? 使用情況,確定運(yùn)行AM的NodeManager;
- 確定了運(yùn)行的節(jié)點(diǎn)后,AM馬上向RM申請(qǐng)資源,資源被封裝成Container的形式響應(yīng)給AM,申請(qǐng)到資源后和確定了執(zhí)行的NM后,RM馬上在NM上啟動(dòng)AM
- 所有任務(wù)運(yùn)行完成后,ApplicationMaster向ResourceManager注銷,整個(gè)應(yīng)用程序運(yùn)行結(jié)束。
?
四.MapReduce1與MapRreduce2的區(qū)別
? ? ? 如果從MapReduce的功能模塊去區(qū)分他們,會(huì)比較亂,很難直觀的說(shuō)清楚,如果從MapReduce的系統(tǒng)架構(gòu)入手,這個(gè)問(wèn)題就變得簡(jiǎn)單了
MapReduce1從架構(gòu)的角度可以分為三個(gè)部分
- 編程模型(新舊API)
- 運(yùn)行環(huán)境(JobTracker和TaskTracker)
- 數(shù)據(jù)處理引擎(MapTask和ReduceTask)
MapReduce2從架構(gòu)的角度可以分為三個(gè)部分
- 編程模型(新舊API)
- 運(yùn)行環(huán)境(Year)
- 數(shù)據(jù)處理引擎(MapTask和ReduceTask)
從架構(gòu)可以很清楚區(qū)分到,他們之間的區(qū)別主要在運(yùn)行環(huán)境變了!
?
參考博客:
Shuffle和排序:http://langyu.iteye.com/blog/992916
董的博客Mapreduce的資源分配:http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-configurations-resourcemanager-nodemanager/
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
