百度美國(guó)硅谷研發(fā)中心高級(jí)架構(gòu)師劉少山——Fast big data analytics with Spark on Tachyon

百度美國(guó)硅谷研發(fā)中心高級(jí)架構(gòu)師劉少山

  Tachyon是一個(gè)分布式的內(nèi)存文件系統(tǒng),可以在集群里以訪問(wèn)內(nèi)存的速度來(lái)訪問(wèn)存在Tachyon里的文件。Tachyon是架構(gòu)在分布式文件存儲(chǔ)和上層各種計(jì)算框架之間的中間件,主要負(fù)責(zé)將那些不需要落到DFS里的文件,落到分布式內(nèi)存文件系統(tǒng)中,從而達(dá)到共享內(nèi)存,以提高效率。1月10日下午的最后一場(chǎng)分享中,劉少山帶來(lái)了一場(chǎng)Tachyon的深入解析。

  Tachyon和Spark

Tachyon和Spark

  劉少山表示,在Spark使用過(guò)程中,用戶經(jīng)常困擾于3個(gè)問(wèn)題:首先,兩個(gè)Spark 實(shí)例通過(guò)存儲(chǔ)系統(tǒng)來(lái)共享數(shù)據(jù),這個(gè)過(guò)程中對(duì)磁盤(pán)的操作會(huì)顯著降低性能;其次,因?yàn)镾park崩潰所造成的數(shù)據(jù)丟失;最后,垃圾回收機(jī)制,如果兩個(gè)Spark實(shí)例需求同樣的數(shù)據(jù),那么這個(gè)數(shù)據(jù)會(huì)被緩存兩次,從而造成很大的內(nèi)存壓力,更降低性能。

  使用Tachyon,存儲(chǔ)可以從Spark中分離處理,讓其更專注于計(jì)算,從而避免了上述的3個(gè)問(wèn)題。

  Tachyon架構(gòu)

\

  劉少山從Spark的角度分享了Tachyon的部署。在與Spark搭配使用時(shí),系統(tǒng)會(huì)建立一個(gè)Tachyon的job,通過(guò)Tachyon Client來(lái)訪問(wèn)同一個(gè)機(jī)器上的Tachyon Worker,也就是機(jī)器上的內(nèi)存。而Tachyon Client則會(huì)與Tachyon Master交互,來(lái)清楚每個(gè)分節(jié)點(diǎn)所包含的數(shù)據(jù)。由此可見(jiàn),在整個(gè)Tachyon 系統(tǒng)中,Master、Client和Worker為最重要的三個(gè)部分。

  Tachyon Master。Master主要部件是Inode和Master Worker Info:Inode會(huì)負(fù)責(zé)系統(tǒng)的監(jiān)視,Master Worker Info則存儲(chǔ)了所有Worker的信息。

  Tachyon Worker。Worker主要負(fù)責(zé)存儲(chǔ),其中Worker Storage是最主要的數(shù)據(jù)結(jié)構(gòu),包含Local data folder和Under File System兩個(gè)部分。其中Local data folder表示存在本地的Tachyon文件,Under File System則負(fù)責(zé)從HDFS中讀取Worker中未發(fā)現(xiàn)的數(shù)據(jù)。

  Tachyon Client。Client為上層用戶提供了一個(gè)透明的機(jī)制,其TachyonFS接口負(fù)責(zé)數(shù)據(jù)請(qǐng)求。每個(gè)Client中有多個(gè)Tachyon File,其中Block In Stream負(fù)責(zé)文件讀取(Local Block In Stream負(fù)責(zé)本地機(jī)器讀取,Remote Block In Stream則負(fù)責(zé)讀取遠(yuǎn)程機(jī)器);Block Out Stream主要負(fù)責(zé)將文件寫(xiě)到本地機(jī)器上。在Client上,Master Client會(huì)與Master交互,Worker Client則與Client交互。

  Tachyon在百度

  為什么要使用Tachyon,劉少山指出,在百度,計(jì)算集群和存儲(chǔ)集群往往不在同一個(gè)地理位置的數(shù)據(jù)中心,在大數(shù)據(jù)分析時(shí),遠(yuǎn)程數(shù)據(jù)讀取將帶來(lái)非常高的延時(shí),特別是ad-hoc查詢。因此,將Tachyon作為一個(gè)傳輸緩存層,百度通常會(huì)將之部署在計(jì)算集群上。首次查詢時(shí),數(shù)據(jù)會(huì)從遠(yuǎn)程存儲(chǔ)取出,而在以后的查詢中,數(shù)據(jù)就會(huì)從本地的Tacnyon上讀取,從而大幅的改善了延時(shí)。

Tachyon在百度

  在百度,Tachyon的部署還處于初始階段,大約部署了50臺(tái)機(jī)器,主要服務(wù)于ad-hoc查詢。

  實(shí)踐中遭遇的挑戰(zhàn)

  通過(guò)劉少山了解到,Tachyon的使用過(guò)程并不是一帆風(fēng)順,比如:因?yàn)門(mén)achyon需求對(duì)Block完全讀取,從而可能造成Blocks并未被緩存;有時(shí)候,雖然scheduler已經(jīng)確認(rèn)了數(shù)據(jù)存在本地,Spark workers仍然從遠(yuǎn)程blocks讀取,而緩存命中率也只有可憐的33%(如果你需要的是2號(hào)block,Tachyon會(huì)分別從1、2、3號(hào)block讀取,從而將block讀取了3份)。因此,劉少山表示,如果要使用好Spark與Tachyon,一定要對(duì)用例和Tachyon進(jìn)行充分的了解。

  分享最后,劉少山還介紹了Hierarchical Storage Feature特性以及百度未來(lái)的工作,其中包括緩存替換策略等。

責(zé)任編輯:admin