UCBerkeley研發(fā)的Tachyon(超光子['t?ki???n],,名字要不要這么太囂張啊:)是一款為各種集群并發(fā)計(jì)算框架提供內(nèi)存數(shù)據(jù)管理的平臺(tái),,也可以說(shuō)是一種內(nèi)存式的文件系統(tǒng)吧,。如下圖,它就處于這樣一個(gè)層次:在現(xiàn)有存儲(chǔ)系統(tǒng)如HDFS之上,,在Spark,,MapReduce,Impala等各種計(jì)算框架之下,。
為什么要有這么一個(gè)框架呢,?MapReduce就不說(shuō)了,但像Spark這種內(nèi)存計(jì)算框架,,為什么還需要再加一層內(nèi)存管理的文件系統(tǒng),?因?yàn)橄?span lang="EN-US">Spark這種,框架其實(shí)只提供了強(qiáng)大的內(nèi)存計(jì)算能力,,但未提供存儲(chǔ)能力,。那么默認(rèn)讓Spark自己直接在內(nèi)存管理數(shù)據(jù)還不夠嗎?下面就看一下現(xiàn)有的幾個(gè)問(wèn)題,。 問(wèn)題1:不同任務(wù)或框架間交換數(shù)據(jù)慢不同任務(wù)或不同計(jì)算框架間的數(shù)據(jù)共享情況在所難免,,例如Spark的分屬不同Stage的兩個(gè)任務(wù),,或Spark與MapReduce框架的數(shù)據(jù)交互。在這種情況下,,一般就需要通過(guò)磁盤(pán)來(lái)完成數(shù)據(jù)交換,,而這通常是效率很低的。
而引入Tachyon中間層后,,數(shù)據(jù)交換實(shí)際上也是在內(nèi)存中進(jìn)行的。
問(wèn)題2:執(zhí)行引擎和存儲(chǔ)引擎是同一進(jìn)程這就是前面提到過(guò)的,,讓Spark自己來(lái)管理內(nèi)存會(huì)出現(xiàn)的問(wèn)題,。默認(rèn)情況下,Spark的任務(wù)執(zhí)行和數(shù)據(jù)本身都在一個(gè)進(jìn)程內(nèi),。當(dāng)執(zhí)行出現(xiàn)問(wèn)題時(shí)就會(huì)導(dǎo)致整個(gè)進(jìn)程崩潰,,并丟失進(jìn)程內(nèi)的所有數(shù)據(jù)。
而Tachyon這一層的引入,,就相當(dāng)于將存儲(chǔ)引擎從Spark中抽離出來(lái),,從而每個(gè)任務(wù)進(jìn)程只負(fù)責(zé)執(zhí)行。進(jìn)程的崩潰不會(huì)丟失數(shù)據(jù),,因?yàn)閿?shù)據(jù)都在Tachyon里面了,。
問(wèn)題3:數(shù)據(jù)被重復(fù)加載和GC不同的Spark任務(wù)可能會(huì)訪問(wèn)同樣的數(shù)據(jù),例如兩個(gè)任務(wù)都要訪問(wèn)HDFS中的某些Block,,像下圖中的Block1和3,。這樣就沒(méi)辦法了,每個(gè)任務(wù)都要自己去磁盤(pán)加載數(shù)據(jù)到內(nèi)存中,。而Tachyon不僅只保存一份數(shù)據(jù),,而且它還使用堆外內(nèi)存,避免GC開(kāi)銷(xiāo),。
Tachyon如何容錯(cuò),?前面我們已經(jīng)看到了Tachyon如何進(jìn)一步提升Spark的性能的,包括避免數(shù)據(jù)落地到磁盤(pán),,共享數(shù)據(jù)以及堆外內(nèi)存避免GC等,。但Tachyon本身又是如何容錯(cuò)的呢?不落地DFS中數(shù)據(jù)不是照樣會(huì)丟失嗎,?而且Tachyon只在內(nèi)存中保存一份數(shù)據(jù)拷貝,。有一種形象的說(shuō)法是:Tachyon將lineage從Spark中下移到了自己。既然手握lineage,,就有辦法了,。跟Spark類(lèi)似,它利用lineage信息(lineage-based recovery)和異步記錄的checkpoint來(lái)恢復(fù)數(shù)據(jù) (與Spark類(lèi)似,,都是基于RDD不可變性以及粗粒度操作才能完成的,,不同點(diǎn)是Tachyon管理的可以是跨框架的lineage而不限于RDD和Spark的轉(zhuǎn)換,?),所以Tachyon放心大膽地積極(aggressively)使用內(nèi)存,。
其次,,Tachyon本身的master通過(guò)ZooKeeper集群管理,down機(jī)時(shí)會(huì)自動(dòng)選舉出新的leader,,并且worker會(huì)自動(dòng)連接到新的leader上,。
現(xiàn)在Tachyon版本還只是0.5,資料也比較少,。關(guān)于其異步checkpointing的圖算法也找到什么資料,,還沒(méi)有搞懂。但看起來(lái)還挺有意思的,,持續(xù)關(guān)注吧,。 參考資料1 Tachyon-A Reliable Memory Centric Storage for Big Data Analytics 2 Tachyon-Reliable File Sharing at Memory-Speed Across Cluster Frameworks
|