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

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

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

  Tachyon和Spark

Tachyon和Spark

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

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

  Tachyon架構(gòu)

\

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

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

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

  Tachyon Client。Client為上層用戶提供了一個透明的機(jī)制,其TachyonFS接口負(fù)責(zé)數(shù)據(jù)請求。每個Client中有多個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é)將文件寫到本地機(jī)器上。在Client上,Master Client會與Master交互,Worker Client則與Client交互。

  Tachyon在百度

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

Tachyon在百度

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

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

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

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

責(zé)任編輯:admin