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

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