hadoop雜記-為什么會有Map-reduce v2 (Yarn)


前言:

有一段時間沒有寫博客了(發現這是我博客最常見的開頭,不過這次間隔真的好長),前段時間事情比較多,所以耽擱得也很多。

現在准備計划寫一個新的專題,叫做《hadoop雜記》,里面的文章有深有淺,文章不是按入門-中級-高級的順序組織的,如果想看看從入門到深入的書,比較推薦《the definitive guide of hadoop》。

今天主要想寫寫關於map-reduce v2(或者叫map-reduce next generation,或者叫YARN)與之前的map-reduce有什么不同。最近在學習Yarn的過程中,也參考了很多人的博客,里面的介紹都各有所長。不過一個很重要的問題是,為什么需要一個Yarn,初看之后,也不覺得Yarn有什么特別的,就是把之前設計中的一塊拆成了幾塊,仔細想想,方才明白其中的奧妙。

理解本文需要對老的Map-reduce框架有一定的了解。有朋友如果對hadoop以及大數據處理的架構、應用的咨詢、討論等等可以按下一段的聯系方式與我聯系。

版權聲明:本文由leftnoteasy發布於http://leftnoteasy.cnblogs.com,本文可以部分或者全部的被引用,但請注明出處,可以聯系wheeleast (at) gmail.com, 也可以加我weibo: http://weibo.com/leftnoteasy

 

Why Yarn:

Map-reduce老矣,尚能飯否?

第一次看到Yarn的問題,就需要問問,為什么要重新設計之前這樣一個成熟的架構。

“The Apache Hadoop Map-reduce framework is showing it’s age, clearly”, 社區的Yarn設計文檔 ”MapReduce_NextGen-Architecture”如是說。

目前的Map-reduce framework碰到了很多的問題,比如說過於大的內存消耗、不合理的線程模型設計、當集群規模增大后,擴展性/穩定性/性能的不足。這是目前hadoop的集群一直停留在Yahoo公布出來的3000台這個數量級上。

為了克服之前說道的問題,就需要對目前架構上進行重新思考,之后我會對新老Map-reduce架構上進行比較。

 

Yarn的設計需求

這里放上設計需求不是為了湊字數的,最近越來越發現設計需求是軟件開發的靈魂,雖然需求常常變化可以喚醒植物人,不過一份好的設計需求可以讓之后怎么走變得非常清晰。參考自Yarn設計文檔:

最優先的需求:

· Reliability

· Availability

· Scalability - Clusters of 10000 nodes and 200,000 cores

· Backward Compatibility - Ensure customers’ Map-Reduce applications can run unchanged in the nextversion of the framework. Also implies forward compatibility. (向前兼容)

· Evolution – Ability for customers to control upgrades to the grid software stack.

· Predictable Latency – A major customer concern.

· Cluster utilization

The second tier of requirements is(優先級低一點的需求):

· Support for alternate programming paradigms to Map-Reduce

· Support for limited, short-lived services

這里解釋一下這份需求,首先是可以支持非常大的集群規模,200k cores這個數字的確很驚人。

然后是向前兼容,之前大家都寫了很多在map-reduce上面的程序,如果不能支持這些老的程序,老的用戶怎么都不願意切換到新版本上去。

另外集群資源最大化利用,這個之后會提一下

然后值得一提的是,支持增加除了Map-Reduce之外的計算模型,這個彰顯了Hadoop想做領域霸主的決心,之前的Hadoop基本上就與Map-Reduce划上了等號,Map-Reduce干不了的事情,Hadoop基本上就干不了。Map-Reduce能做的事情有限(可以參考一下我之前的一篇文章,在”hadoop的劣勢”部分),簡單的說就是,數據多,但是計算簡單的時候,hadoop威力強大。如果計算邏輯復雜,需要搞個迭代至收斂之類的算法之類的,hadoop就玩不動了。如果能夠在Hadoop上加入其他的計算模型,支持這種數據量不那么大,但是計算量大的場景,就防止一些挑剔的客戶在這個問題上jjyy了。

最后說的支持limited, short-lived services還沒有看到過更詳細的說明,如果有人明白歡迎補充

 

老的Map-reduce設計

下面給出一個設計圖,

clip_image001

簡單的介紹一下

1. 首先用戶程序(Client Program)提交了一個job,job的信息會發送到Job Tracker中,Job Tracker是Map-reduce框架的中心,他需要與集群中的機器定時通信(heartbeat), 需要管理哪些程序應該跑在哪些機器上,需要管理所有job失敗、重啟等操作。

2. TaskTracker是Map-reduce集群中每台機器都有的一個部分,他做的事情主要是監視自己所在機器的資源情況(資源的表示是“本機還能起多少個map-task,多少個reduce-task”,每台機器起map/reduce task的上限是在建立集群的時候配置的),另外TaskTracker也會監視當前機器的tasks運行狀況。

TaskTracker需要把這些信息通過heartbeat發送給JobTracker,JobTracker會搜集這些信息以給新提交的job分配運行在哪些機器上。上圖回形針一樣的箭頭就是表示消息的發送-接收的過程。

夠簡單吧?當前的架構這么兩句話就概括出來了,不過當你去看代碼的時候,發現代碼非常的難讀,因為常常一個類3000多行,因為一個class做了太多的事情,這樣會造成class的任務不清楚。另外,從我的理解來說,上面的設計至少有下面的幾個問題,

1. JobTracker是Map-reduce的單點,看起來多多少少讓人不爽

2. JobTracker完成了太多的任務,造成了過多的資源消耗,當map-reduce job非常多的時候,會造成很大的內存開銷,潛在來說,也增加了很多JobTracker fail的風險

3. 在TaskTracker端,以map/reduce task的數目作為資源的表示過於簡單,沒有考慮到cpu/內存的占用情況,如果兩個大內存消耗的task被調度到了一塊,很容易出現OOM

4. 在TaskTracker端,把資源強制划分為map task slot和reduce task slot, 如果當系統中只有map task或者只有reduce task的時候,會造成資源的浪費,也就是前面提過的集群資源利用的問題

image

上面提到的4個問題,在Yarn中,除了第一個屬於“部分完成”以外,其他的幾個問題都已經解決掉了

 

 

看看Map-reduce v2的設計:

clip_image003

首先User還是User,JobTracker和TaskTracker不見了,取而代之的是ResourceManager, Application Master與Node Manager三個部分。我詳細的說一下。

首先Resource Manager是一個中心的服務,它做的事情是調度、啟動每一個Job所屬的ApplicationMaster、另外監控ApplicationMaster的存在情況。

細心的朋友已經發現少了點什么,對!Job里面所在的task的監控、重啟等等內容不見了。這就是ApplicationMaster存在的原因。

上圖中的MPI Mast(er)與MR Master就是某一個MPI Job或者MR Job的ApplicationMaster,一定要記住,ApplicationMaster是每一個Job(不是每一種)都有的一個部分,ApplicationMaster可以運行在ResourceManager以外的機器上。老的框架中,JobTracker一個很大的負擔就是監控job下的tasks的運行狀況,現在,這個部分就扔給ApplicationMaster做了,而ResourceManager中有一個模塊叫做ApplicationsMaster,它是監測ApplicationMaster的運行狀況,如果出問題,會將其在其他機器上重啟。

設計優點一:這個設計大大減小了JobTracker(也就是現在的ResourceManager)的資源消耗,並且讓監測每一個Job子任務(tasks)狀態的程序分布式化了,更安全、更優美

另外,在新版中,ApplicationMaster是一個可變更的部分,用戶可以對不同的編程模型寫自己的ApplicationMaster,讓更多類型的編程模型能夠跑在Hadoop集群中。

設計優點二:能夠支持不同的編程模型

設計優點三:對於資源的表示以內存為單位(在目前版本的Yarn中,沒有考慮cpu的占用),比之前以剩余slot數目更合理

設計優點四:既然資源表示成內存量,那就沒有了之前的map slot/reduce slot分開造成集群資源閑置的尷尬情況了

image

其實在Yarn中還有很多優美的設計,之后慢慢再給大家說一下

 

總結:

在Hadoop 0.23版中,就已經加入了Yarn,這個改變讓Hadoop從單一的“黑虎掏心”變成了少林七十二絕學,學習了解Yarn也將是一個合格的hadooper的基本素質

 

參考資料:

主要就是官方設計文檔:https://issues.apache.org/jira/secure/attachment/12486023/MapReduce_NextGen_Architecture.pdf


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM