Tachyon簡介
Spark平台以分散式記憶體計算的模式達到更高的計算性能,在最近引起了業界的廣泛關注,其開源社區也十分活躍。以百度為例,在百度內部計算平台已經搭建並運行了千台規模的Spark計算集群,百度也通過其BMR的開放雲平台對外提供Spark計算平台服務。然而,分散式記憶體計算的模式也是一柄雙刃劍,在提高性能的同時不得不面對分散式數據存儲所產生的問題,具體問題主要有以下幾個:
當兩個Spark作業需要共享數據時,必須通過寫磁碟操作。比如:作業1要先把生成的數據寫入HDFS,然後作業2再從HDFS把數據讀出來。在此,磁碟的讀寫可能造成性能瓶頸。
由於Spark會利用自身的JVM對數據進行快取,當Spark程式崩潰時,JVM進程退出,所快取數據也隨之丟失,因此在工作重啟時又需要從HDFS把數據再次讀出。
當兩個Spark作業需操作相同的數據時,每個作業的JVM都需要快取一份數據,不但造成資源浪費,也極易引發頻繁的垃圾收集,造成性能的降低。
1.當兩個Spark作業需要共享數據時,必須通過寫磁碟操作。比如:作業1要先把生成的數據寫入HDFS,然後作業2再從HDFS把數據讀出來。在此,磁碟的讀寫可能造成性能瓶頸。
2.由於Spark會利用自身的JVM對數據進行快取,當Spark程式崩潰時,JVM進程退出,所快取數據也隨之丟失,因此在工作重啟時又需要從HDFS把數據再次讀出。
3.當兩個Spark作業需操作相同的數據時,每個作業的JVM都需要快取一份數據,不但造成資源浪費,也極易引發頻繁的垃圾收集,造成性能的降低。
仔細分析這些問題後,可以確認問題的根源來自於數據存儲,由於計算平台嘗試自行進行存儲管理,以至於Spark不能專注於計算本身,造成整體執行效率的降低。Tachyon的提出就是為了解決這些問題:本質上,Tachyon是個分散式的記憶體檔案系統,它在減輕Spark記憶體壓力的同時賦予了Spark記憶體快速大量數據讀寫的能力。Tachyon把存儲與數據讀寫的功能從Spark中分離,使得Spark更專注在計算的本身,以求通過更細的分工達到更高的執行效率。
圖1: Tachyon的部署
圖1顯示了Tachyon的部署結構。Tachyon被部署在計算平台(Spark,MR)之下以及存儲平台(HDFS, S3)之上,通過全局地隔離計算平台與存儲平台, Tachyon可以有效地解決上文列舉的幾個問題,:
•當兩個Spark作業需要共享數據時,無需再通過寫磁碟,而是藉助Tachyon進行記憶體讀寫,從而提高計算效率。
•在使用Tachyon對數據進行快取後,即便在Spark程式崩潰JVM進程退出後,所快取數據也不會丟失。這樣,Spark工作重啟時可以直接從Tachyon記憶體讀取數據了。
•當兩個Spark作業需要操作相同的數據時,它們可以直接從Tachyon獲取,並不需要各自快取一份數據,從而降低JVM記憶體壓力,減少垃圾收集發生的頻率。
Tachyon重要特徵
•類Java的檔案API: Tachyon的原生API同Java的檔案類非常相似,並提供了InputStream和OutputStream接口,還支持記憶體映射IO;
•兼容MapReduce和Spark:Tachyon實現了Hadoop的FileSystem接口,因此,MapReduce和Spark無需做任何修改就可以使用Tachyon;
•外掛程式式的底層檔案系統:Tachyon基於Hadoop並從底層重建了Hadoop平台。Tachyon具有一個通用、方便於接入不同底層檔案系統的接口。目前支持的檔案系統包括HDFS、S3、GlusterFS、單節點本地檔案系統等,對其他檔案系統的支持將很快實現。
•支持本地原始表:Tachyon提供了對多列數據的本地支持,且提供了選擇項,以決定是否將Hot列放入記憶體以節省空間;
•瀏覽檔案系統的Web界面:用戶能夠通過Web界面瀏覽檔案系統,尤其在Debug模式下,管理員還能夠查看每個檔案的詳細信息,如檔案位置、檢查點(Checkpoint)路徑等;
•支持命令行互動:用戶能夠使用命令“./bin/tachyon tfs”同Tachyon進行互動,如往檔案系統中複製數據以及從檔案系統往外複製數據;
•高容錯性:Tachyon具有良好的容錯機制,Master和Worker都有自己的容錯方式。Master使用ZooKeeper進行容錯,Master中保存的元數據使用Journal進行容錯,Master還對各個Worker的狀態進行監控,發現Worker失效時會自動重啟對應的Worker。對於具體的檔案數據,Tachyon使用世代關係進行容錯。
Tachyon採用了Master-Worker模式,運行中的Tachyo n系統由一個Master和多個Worker構成。Tachyon Master管理全部檔案的元數據信息,同時也負責監控各個Tachyon Worker的狀態。為了高效地對檔案進行管理,Tachyon檔案在記憶體中按塊組織。檔案和塊信息保存在Master端,每個Worker以塊為單位進行存儲和管理。