隨著互聯(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ù)共享等因素,公司一般希望將所有這些框架部署到一個公共的集群中,讓它們共享集群的資源,并對資源進(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。
(1)支持多種計(jì)算框架
資源統(tǒng)一管理和調(diào)度平臺應(yīng)該提供一個全局的資源管理器。所有接入的框架要先向該全局資源管理器申請資源,申請成功之后,再由框架自身的調(diào)度器決定資源交由哪個任務(wù)使用,也就是說,整個大的系統(tǒng)是個雙層調(diào)度器,第一層是統(tǒng)一管理和調(diào)度平臺提供的,另外一層是框架自身的調(diào)度器。
資源統(tǒng)一管理和調(diào)度平臺應(yīng)該提供資源隔離。不同的框架中的不同任務(wù)往往需要的資源(內(nèi)存,CPU,網(wǎng)絡(luò)IO等)不同,它們運(yùn)行在同一個集群中,會相互干擾,為此,應(yīng)該提供一種資源隔離機(jī)制避免任務(wù)之間由資源爭用導(dǎo)致效率下降。
(2)擴(kuò)展性
現(xiàn)有的分布式計(jì)算框架都會將系統(tǒng)擴(kuò)展性作為一個非常重要的設(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)容錯性
同擴(kuò)展性類似,容錯性也是當(dāng)前分布式計(jì)算框架的一個重要設(shè)計(jì)目標(biāo),統(tǒng)一管理和調(diào)度平臺在保持原有框架的容錯特性基礎(chǔ)上,自己本身也應(yīng)具有良好的容錯性。
(4) 高資源利用率
如果采用靜態(tài)資源分配,也就是每個計(jì)算框架分配一個集群,往往由于作業(yè)自身的特點(diǎn)或者作業(yè)提交頻率等原因,集群利用率很低。當(dāng)將各種框架部署到同一個大的集群中,進(jìn)行統(tǒng)一管理和調(diào)度后,由于各種作業(yè)交錯且作業(yè)提交頻率大幅度升高,則為資源利用率的提升增加了機(jī)會。
(5)細(xì)粒度的資源分配
細(xì)粒度的資源分配是指直接按照任務(wù)實(shí)際需求分配資源,而不是像MapReduce那樣將槽位作為資源分配單位。這種分配機(jī)制可大大提高資源利用率。
當(dāng)前比較有名的開源資源統(tǒng)一管理和調(diào)度平臺有兩個,一個是Mesos,另外一個是YARN,下面依次對這兩個系統(tǒng)進(jìn)行介紹。
Mesos誕生于UC Berkeley的一個研究項(xiàng)目,現(xiàn)已成為Apache Incubator中的項(xiàng)目,當(dāng)前有一些公司使用Mesos管理集群資源,比如Twitter。
總體上看,Mesos是一個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í)際上是一個全局資源調(diào)度器,采用某種策略將某個slave上的空閑資源分配給某一個framework,各種framework通過自己的調(diào)度器向Mesos master注冊,以接入到Mesos中;而Mesos slave主要功能是匯報任務(wù)的狀態(tài)和啟動各個framework的executor(比如Hadoop的excutor就是TaskTracker)。
YARN是下一代MapReduce,即MRv2,是在第一代MapReduce基礎(chǔ)上演變而來的,主要是為了解決原始Hadoop擴(kuò)展性較差,不支持多計(jì)算框架而提出的。它完全不同于Hadoop MapReduce,所有代碼全部重寫而成。整個平臺由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)一個具體的application(如Hadoop job, Spark Job等),主要負(fù)責(zé)application的資源申請,啟動各個任務(wù)和運(yùn)行狀態(tài)監(jiān)控(沒有調(diào)度功能)。
Mesos與YARN主要在以下幾方面有明顯不同:
(1)框架擔(dān)任的角色
在Mesos中,各種計(jì)算框架是完全融入Mesos中的,也就是說,如果你想在Mesos中添加一個新的計(jì)算框架,首先需要在Mesos中部署一套該框架;而在YARN中,各種框架作為client端的library使用,僅僅是你編寫的程序的一個庫,不需要事先部署一套該框架。從這點(diǎn)上說,YARN運(yùn)行和使用起來更加方便。
(2)調(diào)度機(jī)制
Mesos采用了雙層調(diào)度策略,第一層是Mesos master將空閑資源分配給某個框架,而第二層是計(jì)算框架自帶的調(diào)度器對分配到的空閑資源進(jìn)行分配,也就是說,Mesos將大部分調(diào)度任務(wù)授權(quán)給了計(jì)算框架;而YARN是一個單層調(diào)度架構(gòu),各種框架的任務(wù)一視同仁,全由Resource Manager進(jìn)行統(tǒng)一調(diào)度??偨Y(jié)來說,Mesos master首先完成粗粒度的資源分配,即:將資源分配給框架,然后由框架進(jìn)行細(xì)粒度的資源分配;而Resource manager直接進(jìn)行細(xì)粒度的分配,即:直接將資源分配給某個任務(wù)(Task)。
其他各個特性對比如下表:
個人認(rèn)為Mesos和YARN均不成熟,很多承諾的功能還未實(shí)現(xiàn)或者實(shí)現(xiàn)得不全,但總體看,它們發(fā)展很快,尤其是YARN,在去年年末推出Hadoop-0.23.0后,近期又推出Hadoop-0.23.1。隨著各種計(jì)算框架(如Spark,S4,Storm等)的日趨成熟,一個統(tǒng)一的資源管理和調(diào)度平臺將不可或缺。
聯(lián)系客服