隨着實時計算的需求日益增多,分佈式內存計算也持續升溫,怎樣將海量數據近乎實時地處理,或者說怎樣把離線批處理的速度再提高到一個新的高度是當前研究的重點。近年來,內存的吞吐量成指數倍增加,而磁盤的吞吐量增加緩慢,那麼將原有計算框架中文件落地磁盤替換爲文件落地內存,也是提升效率的優化點。 node
目前已經使用基於內存計算的分佈式計算框架有:Spark、Impala及SAP的HANA等。可是其中不乏一些仍是有文件落地磁盤的操做,若是能讓這些落地磁盤的操做所有落地到一個共享的內存中,那麼這些基於內存的計算框架的效率會更高。 緩存
Tachyon是AmpLab的李浩源所開發的一個分佈式內存文件系統,能夠在集羣裏以訪問內存的速度來訪問存在Tachyon裏的文件。Tachyon是架構在最底層的分佈式文件存儲和上層的各類計算框架之間的一種中間件,其主要職責是將那些不須要落地到DFS裏的文件落地到分佈式內存文件系統中來達到共享內存,從而提升效率。同時能夠減小內存冗餘、GC時間等,Tachyon的在大數據中層次關係以下圖所示: 服務器
Tachyon容許文件之內存的速度在集羣框架中進行可靠的共享,就像Spark和 MapReduce那樣。經過利用信息繼承、內存侵入,Tachyon得到了高性能。Tachyon工做集文件緩存在內存中,而且讓不一樣的 Jobs/Queries以及框架都能之內存的速度來訪問緩存文件。所以,Tachyon能夠減小那些須要常用數據集經過訪問磁盤來得到的次數。 架構
Tachyon在Spark平臺的部署:總的來講,Tachyon有三個主要的部件:Master, Client,與Worker。在每一個Spark Worker節點上,都部署了一個Tachyon Worker,Spark Worker經過Tachyon Client訪問Tachyon進行數據讀寫。全部的Tachyon Worker都被Tachyon Master所管理,Tachyon Master經過Tachyon Worker定時發出的心跳來判斷Worker是否已經崩潰以及每一個Worker剩餘的內存空間量。 框架
Tachyon Master的結構其主要功能以下:首先,Tachyon Master是個主管理器,處理從各個Client發出的請求,這一系列的工做由Service Handler來完成。這些請求包括:獲取Worker的信息,讀取File的Block信息,建立File等等;其次,Tachyon Master是個Name Node,存放着全部文件的信息,每一個文件的信息都被封裝成一個Inode,每一個Inode都記錄着屬於這個文件的全部Block信息。在Tachyon中,Block是文件系統存儲的最小單位,假設每一個Block是256MB,若是有一個文件的大小是1GB,那麼這個文件會被切爲4個Block。每一個Block可能存在多個副本,被存儲在多個Tachyon Worker中,所以Master裏面也必須記錄每一個Block被存儲的Worker地址;第三,Tachyon Master同時管理着全部的Worker,Worker會定時向Master發送心跳通知本次活躍狀態以及剩餘存儲空間。Master是經過Master Worker Info去記錄每一個Worker的上次心跳時間,已使用的內存空間,以及總存儲空間等信息。 分佈式
Tachyon Worker主要負責存儲管理:首先,Tachyon Worker的Service Handler處理來自Client發來的請求,這些請求包括:讀取某個Block的信息,緩存某個Block,鎖住某個Block,向本地內存存儲要求空間等等。第二,Tachyon Worker的主要部件是Worker Storage,其做用是管理Local Data(本地的內存文件系統)以及Under File System(Tachyon如下的磁盤文件系統,好比HDFS)。第三,Tachyon Worker還有個Data Server以便處理其餘的Client對其發起的數據讀寫請求。當由請求達到時,Tachyon會先在本地的內存存儲找數據,若是沒有找到則會嘗試去其餘的Tachyon Worker的內存存儲中進行查找。若是數據徹底不在Tachyon裏,則須要經過Under File System的接口去磁盤文件系統(HDFS)中讀取。 oop
如今咱們經過一個簡單的場景把各個部件都串起來:假設一個Spark做業發起了一個讀請求,它首先會經過Tachyon Client去Tachyon Master查詢所須要的Block所在的位置。若是所在的Block不在本地的Tachyon Worker裏,此Client則會經過Remote Block In Stream向別的Tachyon Worker發出讀請求,同時在Block讀入的過程當中,Client也會經過Block Out Stream把Block寫入到本地的內存存儲裏,這樣就能夠保證下次一樣的請求能夠由本機完成。 性能
HDFS(Hadoop Distributed File System)是一個分佈式文件系統。HDFS具備高容錯性(fault-tolerant)特色,而且設計用來部署在低廉的硬件上。並且它提供高吞吐量(high throughput)來訪問應用程序的數據,適合那些有着超大數據集(large data set)的應用程序。HDFS放寬了POSIX的要求,這樣能夠實現以流的形式訪問(streaming access)文件系統中的數據。 大數據
HDFS採用Master/Slave架構。HDFS集羣是由一個Namenode和必定數目的Datanode組成的。Namenode是一臺中心服務器,負責管理文件系統的名字空間(namespace)以及客戶端對文件的訪問。集羣中的Datanode通常是一個節點一個,負責管理它所在節點上的存儲。HDFS暴露了文件系統的名字空間,用戶可以以文件的形式在上面存儲數據。從內部看,一個文件其實被分紅一個或多個數據塊,這些塊存儲在一組Datanode上。Namenode執行文件系統的名字空間操做,好比打開、關閉、重命名文件或目錄,它也負責肯定數據塊到具體Datanode節點的映射。Datanode負責處理文件系統客戶端的讀寫請求,在Namenode的統一調度下對數據塊進行建立、刪除和複製。 優化
HDFS架構示意圖以下圖所示。
Namenode和Datanode被設計成能夠在普通的商用機器上運行,這些機器通常運行着GNU/Linux操做系統。HDFS採用Java語言開發,所以任何支持Java的機器均可以部署Namenode或Datanode。因爲採用了可移植性極強的Java語言,使得HDFS能夠部署到多種類型的機器上。一個典型的部署場景是一臺機器上只運行一個Namenode實例,而集羣中的其餘機器則分別運行一個Datanode實例。這種架構並不排斥在一臺機器上運行多個Datanode,只不過這樣的狀況比較少見。
集羣中單一Namenode的結構大大簡化了系統的架構。Namenode是全部HDFS元數據的仲裁者和管理者,這樣用戶數據永遠不會流過Namenode。
對比HDFS和Tachyon,首先從二者的存儲結構來看,HDFS設計爲用來存儲海量文件的分佈式系統,Tachyon設計爲用來緩存經常使用數據的分佈式內存文件系統。從這點來看,Tachyon能夠認爲是操做系統層面上的Cache,HDFS能夠認爲是磁盤。
在可靠性方面,HDFS採用副本技術來保證出現系統宕機等意外狀況時文件訪問的一致性以及可靠性;而Tachyon是依賴於底層文件系統的可靠性來實現自身文件的可靠性的。因爲相對於磁盤資源來講,內存是很是寶貴的,因此Tachyon經過在其underfs(通常使用HDFS)上寫入CheckPoint日誌信息來實現對文件系統的可恢復性。
從文件的讀取以及寫入方式來看,Tachyon能夠更好地利用本地模式來讀取文件信息,當文件讀取客戶端和文件所在的Worker位於一臺機器上時,客戶端會直接繞過Worker直接讀取對應的物理文件,減小了本機的數據交互。而HDFS在遇到這樣的狀況時,會經過本地Socket進行數據交換,這也會有必定的系統資源開銷。在寫入文件時,HDFS只能寫入磁盤,而Tachyon卻提供了5種數據寫入模式用以知足不一樣需求。