分布式文件系统之Tachyon是什么?
Tachyon
概念:
Tachyon是一個高性能、高容錯、基于內(nèi)存的開源分布式存儲系統(tǒng)??,并具有類Java的文件API、插件式的底層文件系統(tǒng)、兼容Hadoop MapReduce和Apache Spark等特征。Tachyon能夠為集群框架(如Spark、MapReduce等)提供內(nèi)存級速度的跨集群文件共享服務(wù)。Tachyon充分使用內(nèi)存和文件對象之間的世代(Lineage)信息,因此速度很快,官方號稱最高比HDFS吞吐量高300倍。
本質(zhì)上,Tachyon是個分布式的內(nèi)存文件系統(tǒng),它在減輕Spark內(nèi)存壓力的同時賦予了Spark內(nèi)存快速大量數(shù)據(jù)讀寫的能力。Tachyon把存儲與數(shù)據(jù)讀寫的功能從Spark中分離,使得Spark更專注在計算的本身,以求通過更細的分工達到更高的執(zhí)行效率。
架構(gòu)設(shè)計:
Tachyon的架構(gòu)是傳統(tǒng)的Master—Slave架構(gòu),這里和Hadoop(Hadoop也是master-slave結(jié)構(gòu),Hadoop主要有兩個結(jié)構(gòu)NameNode和DateNode),Tachyon有三個主要的部件:Master, Client,與Worker。在每個Spark Worker節(jié)點上,都部署了一個Tachyon Worker,Spark Worker通過Tachyon Client訪問Tachyon進行數(shù)據(jù)讀寫。所有的Tachyon Worker都被Tachyon Master所管理,Tachyon Master通過Tachyon Worker定時發(fā)出的心跳來判斷spark worker是否已經(jīng)崩潰以及每個spark worker剩余的內(nèi)存空間量
?
Tachyon Master的結(jié)構(gòu)
?
首先:Tachyon Master是個主管理器,處理從各個Tachyon Client發(fā)出的請求,這一系列的工作由Service Handler來完成。這些請求包括:獲取Worker的信息,讀取File的Block信息, 創(chuàng)建File等等;
其次:Tachyon Master是個Name Node,存放著所有文件的元信息,每個文件的信息都被封裝成一個Inode,每個Inode都記錄著屬于這個文件的所有Block信息。在Tachyon 中,Block是文件系統(tǒng)存儲的最小單位,假設(shè)每個Block是256MB,如果有一個文件的大小是1GB,那么這個文件會被切為4個Block。每個 Block可能存在多個副本,被存儲在多個Tachyon Worker中,因此Master里面也必須記錄每個Block被存儲的Worker地址;
第三:Tachyon Master同時管理著所有的Worker,Worker會定時向Master發(fā)送心跳通知本次活躍狀態(tài)以及剩余存儲空間。Master是通過 Master Worker Info去記錄每個Worker的上次心跳時間,已使用的內(nèi)存空間,以及總存儲空間等信息。
?
Tachyon worker的結(jié)構(gòu)
Tachyon Worker的結(jié)構(gòu),它主要負責存儲管理:
首先:Tachyon Worker的Service Handler處理來自Client發(fā)來的請求,這些請求包括:讀取某個Block的信息,緩存某個Block,鎖住某個Block,向本地內(nèi)存存儲要求 空間等等。
第二:Tachyon Worker的主要部件是Worker Storage,其作用是管理Local Data(本地的內(nèi)存文件系統(tǒng))以及Under File System(Tachyon以下的磁盤文件系統(tǒng),比如HDFS)。
第三:Tachyon Worker還有個Data Server以便處理其他的Client對其發(fā)起的數(shù)據(jù)讀寫請求。當由請求達到時,Tachyon會先在本地的內(nèi)存存儲找數(shù)據(jù),如果沒有找到則會嘗試去其 他的Tachyon Worker的內(nèi)存存儲中進行查找。如果數(shù)據(jù)完全不在Tachyon里,則需要通過Under File System的接口去磁盤文件系統(tǒng)(HDFS)中讀取
Tachyon client的結(jié)構(gòu)
它主要功能是向用戶抽象一個文件系統(tǒng)接口以屏蔽掉底層實現(xiàn)細節(jié)。
首先,Tachyon Client會通過Master Client部件跟Tachyon Master交互,比如可以向Tachyon Master查詢某個文件的某個Block在哪里。Tachyon Client也會通過Worker Client部件跟Tachyon Worker交互, 比如向某個Tachyon Worker請求存儲空間。在Tachyon Client實現(xiàn)中最主要的是Tachyon File這個部件。在Tachyon File下實現(xiàn)了Block Out Stream,其主要用于寫本地內(nèi)存文件;實現(xiàn)了Block In Stream主要負責讀內(nèi)存文件。在Block In Stream內(nèi)包含了兩個不同的實現(xiàn):Local Block In Stream主要是用來讀本地的內(nèi)存文件,而Remote Block In Stream主要是讀非本地的內(nèi)存文件。請注意,非本地可以是在其它的Tachyon Worker的內(nèi)存文件里,也可以是在Under File System的文件里。
設(shè)計初衷:
分布式內(nèi)存計算的模式也是一柄雙刃劍,在提高性能的同時不得不面對分布式數(shù)據(jù)存儲所產(chǎn)生的問題,具體問題主要有以下幾個:
1)當兩個Spark作業(yè)需要共享數(shù)據(jù)時,必須通過寫磁盤操作。比如:作業(yè)1要先把生成的數(shù)據(jù)寫入HDFS,然后作業(yè)2再從HDFS把數(shù)據(jù)讀出來。在此,磁盤的讀寫可能造成性能瓶頸。
2)由于Spark會利用自身的JVM對數(shù)據(jù)進行緩存,當Spark程序崩潰時,JVM進程退出,所緩存數(shù)據(jù)也隨之丟失,因此在工作重啟時又需要從HDFS把數(shù)據(jù)再次讀出。
3)當兩個Spark作業(yè)需操作相同的數(shù)據(jù)時,每個作業(yè)的JVM都需要緩存一份數(shù)據(jù),不但造成資源浪費,也極易引發(fā)頻繁的垃圾收集,造成性能的降低。
?
?
?
部署方式:
部署結(jié)構(gòu):
?
?
?
Tachyon被部署在計算平臺(Spark,MR)之下以及存儲平臺(HDFS, S3)之上,通過全局地隔離計算平臺與存儲平臺, Tachyon可以有效地解決上文列舉的幾個問題,:
1)當兩個Spark作業(yè)需要共享數(shù)據(jù)時,無需再通過寫磁盤,而是借助Tachyon進行內(nèi)存讀寫,從而提高計算效率。
2)在使用Tachyon對數(shù)據(jù)進行緩存后,即便在Spark程序崩潰JVM進程退出后,所緩存數(shù)據(jù)也不會丟失。這樣,Spark工作重啟時可以直接從Tachyon內(nèi)存讀取數(shù)據(jù)了。
3)當兩個Spark作業(yè)需要操作相同的數(shù)據(jù)時,它們可以直接從Tachyon獲取,并不需要各自緩存一份數(shù)據(jù),從而降低JVM內(nèi)存壓力,減少垃圾收集發(fā)生的頻率。
?
?
使用方法:
1、類Java的文件API
?
2、假設(shè)一個Spark作業(yè)發(fā)起了一個讀請求,它首先會通過Tachyon Client去Tachyon Master查詢所需要的Block所在的位置。如果所在的Block在本地的Tachyon Worker里,此Client則會通過Local Block In Stream向本地的Tachyon Worker發(fā)出讀請求,如果所在的Block不在本地的Tachyon Worker里,此Client則會通過Remote Block In Stream向別的Tachyon Worker發(fā)出讀請求,同時在Block讀入的過程中,Client也會通過Block Out Stream把Block寫入到本地的內(nèi)存存儲里,這樣就可以保證下次同樣的請求可以由本機完成。
?
3、受益于Tachyon良好的設(shè)計和兼用性,用戶可以很方便地將現(xiàn)有的利用HDFS進行存儲的程序移植至Tachyon,只需要簡單的兩步:添加配置項,修改文件路徑。
?
3.1 對于MapReduce程序
添加配置項<”fs.tachyon.impl”, ” tachyon.hadoop.TFS”>,可以在core-site.xml文件中添加,也可以在程序中使用Configuration.set()方法添加。將原有的”hdfs://ip:port/path”路徑更改為”tachyon://ip:port/path”。
?
需要注意的是,由于Hadoop默認不依賴于Tachyon,還要將Tachyon的jar包添加至$HADOOP_CLASSPATH中。
?
3.2 對于Spark程序
同樣地,添加配置項<”fs.tachyon.impl”, ” tachyon.hadoop.TFS”>。將原有的”hdfs://ip:port/path”路徑更改為”tachyon://ip:port/path”。
?
額外地,添加配置項<”spark.tachyonStore.url”, “tachyon://ip:port/”>后,能夠使用”rdd.persist(StorageLevel.OFF_HEAP)”語句將RDD緩存至Tachyon中以減少Java GC的開銷。
?
3.3 其他使用方式
為了方便用戶使用,Tachyon還提供了命令行工具,能夠?qū)achyon進行簡單的交互
?
tachyon tfs cat|ls|mkdir|rm|copyFromLocal|…
?
此外,Tachyon也有自己的一套API,使用該API能夠很靈活地訪問Tachyon文件系統(tǒng),并充分利用Tachyon的各個特性以獲得最佳性能。
?
TachyonFS.createFile|delete|mkdir|rename|…
?
TachyonFile.getInStream|getOutStream|getPath|…
?
應(yīng)用場景:
由于其解決分布式內(nèi)存計算的分布式數(shù)據(jù)存儲所產(chǎn)生的的問題。所以應(yīng)用場景基于Spark進行大多數(shù)批處理工作。
目前,很多公司(如Pivotal、EMC、紅帽等)已經(jīng)在使用Tachyon,并且來自20個組織或公司(如雅虎、英特、紅帽等)的60多個貢獻者都在為其貢獻代碼。Tachyon是于UC Berkeley數(shù)據(jù)分析棧(BDAS)的存儲層,它還是Fedora操作系統(tǒng)自帶應(yīng)用。
?
部分摘自 一個有理想的代碼狗:https://baijiahao.baidu.com/s?id=1590729598735273612&wfr=spider&for=pc?
總結(jié)
以上是生活随笔為你收集整理的分布式文件系统之Tachyon是什么?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分布式文件系统之Fastdfs是什么?
- 下一篇: 分布式文件系统之ceph是什么?