1. 背景
隨著互聯(lián)網(wǎng)的高速發(fā)展,基于數(shù)據(jù)密集型應(yīng)用的計(jì)算框架不斷出現(xiàn),從支持離線處理的MapReduce,到支持在線處理的Storm,從迭代式計(jì)算框架Spark到流式處理框架S4,…,各種框架誕生于不同的公司或者實(shí)驗(yàn)室,它們各有所長,各自解決了某一類應(yīng)用問題。而在大部分互聯(lián)網(wǎng)公司中,這幾種框架可能都會采用,比如對于搜索引擎公司,可能的技術(shù)方案如下:網(wǎng)頁建索引采用MapReduce框架,自然語言處理/數(shù)據(jù)挖掘采用Spark(網(wǎng)頁P(yáng)ageRank計(jì)算,聚類分類算法等,【注】Spark現(xiàn)在不太成熟,很少有公司嘗試使用),對性能要求很高的數(shù)據(jù)挖掘算法用MPI等。考慮到資源利用率,運(yùn)維成本,數(shù)據(jù)共享等因素,公司一般希望將所有這些框架部署到一個(gè)公共的集群中,讓它們共享集群的資源,并對資源進(jìn)行統(tǒng)一使用,這樣,便誕生了資源統(tǒng)一管理與調(diào)度平臺,典型代表是Mesos和YARN。
本文總結(jié)了資源統(tǒng)一管理與調(diào)度平臺產(chǎn)生背景以及它們所應(yīng)具有的特點(diǎn),并對比了當(dāng)前比較有名的資源統(tǒng)一管理與調(diào)度平臺Mesos和YARN。
2.?資源統(tǒng)一管理和調(diào)度平臺具有的特點(diǎn)
(1)支持多種計(jì)算框架
資源統(tǒng)一管理和調(diào)度平臺應(yīng)該提供一個(gè)全局的資源管理器。所有接入的框架要先向該全局資源管理器申請資源,申請成功之后,再由框架自身的調(diào)度器決定資源交由哪個(gè)任務(wù)使用,也就是說,整個(gè)大的系統(tǒng)是個(gè)雙層調(diào)度器,第一層是統(tǒng)一管理和調(diào)度平臺提供的,另外一層是框架自身的調(diào)度器。
資源統(tǒng)一管理和調(diào)度平臺應(yīng)該提供資源隔離。不同的框架中的不同任務(wù)往往需要的資源(內(nèi)存,CPU,網(wǎng)絡(luò)IO等)不同,它們運(yùn)行在同一個(gè)集群中,會相互干擾,為此,應(yīng)該提供一種資源隔離機(jī)制避免任務(wù)之間由資源爭用導(dǎo)致效率下降。
(2)擴(kuò)展性
現(xiàn)有的分布式計(jì)算框架都會將系統(tǒng)擴(kuò)展性作為一個(gè)非常重要的設(shè)計(jì)目標(biāo),比如Hadoop,好的擴(kuò)展性意味著系統(tǒng)能夠隨著業(yè)務(wù)的擴(kuò)展線性擴(kuò)展。資源統(tǒng)一管理和調(diào)度平臺融入多種計(jì)算框架后,不應(yīng)該破壞這種特性,也就是說,統(tǒng)一管理和調(diào)度平臺不應(yīng)該成為制約框架進(jìn)行水平擴(kuò)展。
(3)容錯(cuò)性
同擴(kuò)展性類似,容錯(cuò)性也是當(dāng)前分布式計(jì)算框架的一個(gè)重要設(shè)計(jì)目標(biāo),統(tǒng)一管理和調(diào)度平臺在保持原有框架的容錯(cuò)特性基礎(chǔ)上,自己本身也應(yīng)具有良好的容錯(cuò)性。
(4) 高資源利用率
如果采用靜態(tài)資源分配,也就是每個(gè)計(jì)算框架分配一個(gè)集群,往往由于作業(yè)自身的特點(diǎn)或者作業(yè)提交頻率等原因,集群利用率很低。當(dāng)將各種框架部署到同一個(gè)大的集群中,進(jìn)行統(tǒng)一管理和調(diào)度后,由于各種作業(yè)交錯(cuò)且作業(yè)提交頻率大幅度升高,則為資源利用率的提升增加了機(jī)會。
(5)細(xì)粒度的資源分配
細(xì)粒度的資源分配是指直接按照任務(wù)實(shí)際需求分配資源,而不是像MapReduce那樣將槽位作為資源分配單位。這種分配機(jī)制可大大提高資源利用率。
3.?當(dāng)前比較有名的開源資源統(tǒng)一管理和調(diào)度平臺
當(dāng)前比較有名的開源資源統(tǒng)一管理和調(diào)度平臺有兩個(gè),一個(gè)是Mesos,另外一個(gè)是YARN,下面依次對這兩個(gè)系統(tǒng)進(jìn)行介紹。
3.1?Mesos
Mesos誕生于UC Berkeley的一個(gè)研究項(xiàng)目,現(xiàn)已成為Apache Incubator中的項(xiàng)目,當(dāng)前有一些公司使用Mesos管理集群資源,比如Twitter。
總體上看,Mesos是一個(gè)master/slave結(jié)構(gòu),其中,master是非常輕量級的,僅保存了framework(各種計(jì)算框架稱為framework)和mesos slave的一些狀態(tài),而這些狀態(tài)很容易通過framework和slave重新注冊而重構(gòu),因而很容易使用了zookeeper解決mesos master的單點(diǎn)故障問題。
Mesos master實(shí)際上是一個(gè)全局資源調(diào)度器,采用某種策略將某個(gè)slave上的空閑資源分配給某一個(gè)framework,各種framework通過自己的調(diào)度器向Mesos master注冊,以接入到Mesos中;而Mesos slave主要功能是匯報(bào)任務(wù)的狀態(tài)和啟動各個(gè)framework的executor(比如Hadoop的excutor就是TaskTracker)。
3.2?YARN
YARN是下一代MapReduce,即MRv2,是在第一代MapReduce基礎(chǔ)上演變而來的,主要是為了解決原始Hadoop擴(kuò)展性較差,不支持多計(jì)算框架而提出的。它完全不同于Hadoop MapReduce,所有代碼全部重寫而成。整個(gè)平臺由Resource Manager(master,功能是資源分配)和Node Manager組成(slave,功能是節(jié)點(diǎn)管理)。較于HadoopMapReduce,其最大特點(diǎn)是將JobTracker拆分成Resource Manager和Application Master,其中Resource Manager是全局的資源管理器,僅負(fù)責(zé)資源分配(由于Resource Manager功能簡單,所以不會嚴(yán)重制約系統(tǒng)的擴(kuò)展性),而Application Master對應(yīng)一個(gè)具體的application(如Hadoop job, Spark Job等),主要負(fù)責(zé)application的資源申請,啟動各個(gè)任務(wù)和運(yùn)行狀態(tài)監(jiān)控(沒有調(diào)度功能)。
4.?Mesos與YARN比較
Mesos與YARN主要在以下幾方面有明顯不同:
(1)框架擔(dān)任的角色
在Mesos中,各種計(jì)算框架是完全融入Mesos中的,也就是說,如果你想在Mesos中添加一個(gè)新的計(jì)算框架,首先需要在Mesos中部署一套該框架;而在YARN中,各種框架作為client端的library使用,僅僅是你編寫的程序的一個(gè)庫,不需要事先部署一套該框架。從這點(diǎn)上說,YARN運(yùn)行和使用起來更加方便。
(2)調(diào)度機(jī)制
兩種系統(tǒng)都采用了雙層調(diào)度機(jī)制,即,第一層是源管理系統(tǒng)(mesos/YARN)將資源分配給應(yīng)用程序(或框架),第二層,應(yīng)用程序?qū)⑹盏降馁Y源進(jìn)一步分配給內(nèi)部的任務(wù)。但是資源分配器智能化程度不同,mesos是基于resource offer的調(diào)度機(jī)制,包含非常少的調(diào)度語義,他只是簡單的將資源推給各個(gè)應(yīng)用程序,由應(yīng)用程序選擇是否接受資源,而mesos本身并不知道各個(gè)應(yīng)用程序資源需求;YARN則不同,應(yīng)用程序的ApplicationMaster會把各個(gè)任務(wù)的資源要求匯報(bào)給YARN,YARN則根據(jù)需要為應(yīng)用程序分配資源。
其他各個(gè)特性對比如下表:
5.?Mesos與YARN發(fā)展情況
個(gè)人認(rèn)為Mesos和YARN均不成熟,很多承諾的功能還未實(shí)現(xiàn)或者實(shí)現(xiàn)得不全,但總體看,它們發(fā)展很快,尤其是YARN,在去年年末推出Hadoop-0.23.0后,近期又推出Hadoop-0.23.1。隨著各種計(jì)算框架(如Spark,S4,Storm等)的日趨成熟,一個(gè)統(tǒng)一的資源管理和調(diào)度平臺將不可或缺。
另一個(gè)與Mesos和YARN類似的系統(tǒng)是Facebook開源的Hadoop Coroca,具體可參考:“Hadoop Corona介紹”。
6.?參考資料
(1)Mesos論文:Mesos: A Platform for Fine-Grained Resource Sharing in the Data Center. B. Hindman, A. Konwinski, M. Zaharia, A. Ghodsi, A.D. Joseph, R. Katz, S. Shenker and I. Stoica,NSDI 2011, March 2011.
(2)?Mesos官網(wǎng):http://incubator.apache.org/mesos/index.html
(3)YARN官網(wǎng):http://hadoop.apache.org/common/docs/r0.23.0/index.html
(4)下一代Apache Hadoop MapReduce框架的架構(gòu):
http://dongxicheng.org/mapreduce-nextgen/nextgen-mapreduce-introduction/
轉(zhuǎn)載自董的博客