Tachyon是一個以內(nèi)存為核心的開源分布式存儲系統(tǒng),,也是目前發(fā)展最迅速的開源大數(shù)據(jù)項目之一,。Tachyon為不同的大數(shù)據(jù)計算框架(如Apache Spark,Hadoop MapReduce, Apache Flink等)提供可靠的內(nèi)存級的數(shù)據(jù)共享服務,。此外,,Tachyon還能夠整合眾多現(xiàn)有的存儲系統(tǒng)(如Amazon S3, Apache HDFS, RedHat GlusterFS, OpenStack Swift等),為用戶提供統(tǒng)一的,、易用的,、高效的數(shù)據(jù)訪問平臺。本文首先向讀者介紹Tachyon項目的誕生背景和目前發(fā)展的情況,;然后詳解Tachyon系統(tǒng)的基本架構(gòu)以及目前一些重要的功能,;最后,分享一個Tachyon在百度大數(shù)據(jù)生產(chǎn)環(huán)境下的幾個應用案例,。 1.Tachyon簡介隨著技術(shù)的發(fā)展,,內(nèi)存的吞吐量在不斷地提高,單位容量的內(nèi)存價格在不斷降低,,這為“內(nèi)存計算”提供可能,。在大數(shù)據(jù)計算平臺領(lǐng)域,采用分布式內(nèi)存計算模式的Spark驗證了這一點,。Spark相比于MapReduce大大提升了大數(shù)據(jù)的計算性能,,受到了業(yè)界和社區(qū)的廣泛關(guān)注。然而,還是有很多問題在計算框架層難以解決,,如:不同的Spark應用或不同計算框架(Spark,,MapReduce,Presto)間仍需通過基于磁盤的存儲系統(tǒng)(如HDFS,,Amazon S3等)交換數(shù)據(jù),;當Spark計算任務崩潰,,JVM緩存的數(shù)據(jù)會丟失,; JVM中大量緩存的數(shù)據(jù)增加了Java垃圾回收的壓力。 Tachyon最初出現(xiàn)是為了有效地解決了上述問題,,它計劃構(gòu)建一個獨立的存儲層來快速共享不同計算框架的數(shù)據(jù),,實現(xiàn)方式上將數(shù)據(jù)置于堆外(off-heap)內(nèi)存以避免大量垃圾回收開銷。例如,,對應Spark應用而言,,可以帶來以下作用:
圖1給出了Tachyon部署時所處的位置,。Tachyon被部署在計算平臺之下和現(xiàn)有的存儲系統(tǒng)之上,能夠在不同計算框架間共享數(shù)據(jù),。同時,,現(xiàn)有的海量數(shù)據(jù)不需要進行遷移,上層的計算作業(yè)仍能通過Tachyon訪問到底層存儲平臺上的數(shù)據(jù),。Tachyon作為一個以內(nèi)存為中心的中間存儲層,,不僅能極大地提升上層計算平臺的性能,還能充分利用不同特性的底層存儲系統(tǒng),,更可以有效地整合兩者的優(yōu)勢,。 Tachyon最初是由李浩源博士發(fā)起的源自UC Berkeley AMPLab的研究項目(該實驗室也是Mesos和Spark的發(fā)源地)。自2013年4月開源以來,,Tachyon社區(qū)不斷壯大,,已經(jīng)成為發(fā)展速度最快的開源大數(shù)據(jù)項目之一,目前已有來自超過50個組織機構(gòu)的200多人參與到了對Tachyon項目的貢獻中,也有超過100家公司部署了Tachyon,。于此同時,,Tachyon的核心創(chuàng)建者和開發(fā)人員創(chuàng)立了Tachyon Nexus公司,其中不乏UC Berkeley,、CMU等博士以及Google, Palantir, Yahoo!等前員工,。 2015年3月美國華爾街日報報道了Tachyon Nexus獲得硅谷著名風投Andreessen Horowitz 的750萬美元A輪投資。 在學術(shù)界,, 國內(nèi)的南京大學PASA大數(shù)據(jù)實驗室一直積極關(guān)注并參與到Tachyon項目的開發(fā)中,,共向Tachyon社區(qū)貢獻了100多個PR,近300次commit,,包括為Tachyon實現(xiàn)性能測試框架tachyon-perf,,增加LFU、LRFU等多個替換策略,,改進WebUI頁面,,以及其他一些性能優(yōu)化的工作。此外,,我們還撰寫了Tachyon相關(guān)的中文博客,,以便中文讀者和用戶能夠更深入地了解和使用Tachyon。 在工業(yè)界,,百度也把Tachyon運用到其大數(shù)據(jù)系統(tǒng)中,, Tachyon在過去一年中穩(wěn)定的支持著百度的可交互式查詢業(yè)務,令百度的交互式查詢提速30倍,。在驗證了Tachyon的高性能以及可靠性后,,百度在內(nèi)部使用Tachyon的0.9版成功部署了1000個worker的世界最大Tachyon集群,總共提供50TB的內(nèi)存存儲,。此集群在百度內(nèi)部已經(jīng)穩(wěn)定運行了一個月,,也驗證的Tachyon的可擴展性。于此同時,,百度的另外一個Tachyon部署中用Tachyon層次化數(shù)據(jù)管理了2PB數(shù)據(jù),。 2.Tachyon系統(tǒng)架構(gòu)這一章中我們簡介Tachyon系統(tǒng)的基本架構(gòu),包括Tachyon的基本組件及其功能,。 圖2是Tachyon系統(tǒng)的基本架構(gòu),,主要包括4個基本組件:Master、Worker和Client,,以及可插拔的底層存儲系統(tǒng)(Underlayer Storage System),。每個組件的具體功能職責如下:
在實際部署時, Tachyon Master通常部署在單個主節(jié)點上(Tachyon也支持多個節(jié)點上部署Tachyon Master,并通過使用ZooKeeper來防止單點故障),;將Tachyon Worker部署在多個從節(jié)點,;Tachyon Client和應用相關(guān),可以位于任何一個節(jié)點上,。 3.Tachyon的特色功能本節(jié)我們簡介Tachyon面向上層應用的特色功能,。 3.1 支持多種部署方式 作為大數(shù)據(jù)系統(tǒng)中的存儲層,Tachyon為用戶提供了不同的啟動模式,、對資源管理框架的支持,、以及目標運行環(huán)境,能夠部署多種大數(shù)據(jù)平臺環(huán)境中:
用戶可以自由選擇不同的啟動模式,、資源管理框架和目標運行環(huán)境,,Tachyon為多種組合都提供了相應的啟動腳本,能夠很方便地將Tachyon部署在用戶的環(huán)境中,。 3.2 層次化存儲 Tachyon的層次化存儲充分利用了每個Tachyon Worker上的本地存儲資源,,將Tachyon中的數(shù)據(jù)塊按不同熱度存放在了不同的存儲層中。目前Tachyon所使用的本地存儲資源包括MEM(Memory,,內(nèi)存),、SSD(Solid State Drives,固態(tài)硬盤)和HDD(Hard Disk Drives,,磁盤),。在Tachyon Worker中,每一類存儲資源被視作一層(Storage Tier),,每一層又可以由多個目錄(Storage Directory)組成,,并且用戶可以設置每個存儲目錄的容量。 在讀寫Tachyon數(shù)據(jù)時,,分配器(Allocator)負責為新的數(shù)據(jù)塊選擇目標存儲目錄,,替換器(Evictor)負責將冷數(shù)據(jù)從內(nèi)存剔至SSD和HDD,同時將熱數(shù)據(jù)從SSD和HDD提升至內(nèi)存中,。目前分配器所使用的分配策略包括Greedy,、MaxFree和RoundRobin,。替換器所使用的替換策略包括Greedy、LRU/PartialLRU,、LRFU,。額外地,Tachyon還為用戶提供了Pin功能,,支持用戶將所需要的數(shù)據(jù)始終存放在內(nèi)存中,。關(guān)于如何配置Tachyon層次化存儲,可以進一步參考Tachyon官方文檔,。 3.3 靈活的讀寫機制 為了充分利用多層次的存儲資源和底層存儲系統(tǒng),,Tachyon為用戶提供了不同的讀寫類型(ReadType/WriteType)API,用于靈活控制讀寫數(shù)據(jù)時的行為方式,,不同的讀寫類型及其含義如表1所示,。 除了上述的讀寫類型外,Tachyon還提供了另一套控制方式:TachyonStorageType和UnderStorageType,,用于分別控制在Tachyon存儲和底層存儲系統(tǒng)上的讀寫行為,,具體取值及其含義如表2所示。實際上,,這種控制方式是Tachyon-0.8之后新增的,,控制粒度更細,功能也更多,,因此推薦用戶采用這種方式控制讀寫行為。 3.4 文件系統(tǒng)層的Lineage容錯機制 在Tachyon中,,Lineage表示了兩個或多個文件之間的世系關(guān)系,,即輸出文件集B是由輸入文件集A通過怎樣的操作得到的。有了Lineage信息后,,在文件數(shù)據(jù)意外丟失時,,Tachyon就會啟動重計算作業(yè),根據(jù)現(xiàn)有的文件重新執(zhí)行同樣的操作,,以恢復丟失的數(shù)據(jù),。圖3給出了一個Lineage示例,文件集A通過一個Spark作業(yè)生成文件集B,;文件集C通過另一個Spark作業(yè)生成文件集D,;B和D作為同一個MapReduce作業(yè)的輸入,輸出為文件集E,。那么,,如果文件集E意外丟失,并且沒有備份,,那么Tachyon就會重新啟動對應的MapReduce作業(yè),,再次生成E,。 3.5 統(tǒng)一命名空間 對于Tachyon的用戶而言,通過Tachyon提供的接口所訪問到的是Tachyon文件系統(tǒng)的命名空間,。當用戶需要訪問Tachyon以外的文件和數(shù)據(jù)時,,Tachyon提供了Mount接口,能夠?qū)⑼獠看鎯ο到y(tǒng)的文件或目錄掛載到Tachyon的命名空間中,。這樣用戶就能夠在統(tǒng)一的Tachyon命名空間中,,使用相同或者自定義的路徑,訪問其他存儲系統(tǒng)上的文件和數(shù)據(jù),。 3.6 HDFS兼容接口 在Tachyon出現(xiàn)之前,,諸如Hadoop MapReduce以及Apache Spark的應用大多使用HDFS、Amazon S3等存儲文件,。Tachyon為這些應用提供了一套HDFS兼容的接口(確切地說,,是兼容了org.apache.hadoop.fs.FileSystem的接口),用戶可以在不改動應用源碼的情況下,,通過以下3個步驟,,將目標文件系統(tǒng)更改為Tachyon:
通常,用戶可以結(jié)合使用“HDFS兼容接口”和“統(tǒng)一命名空間”這兩個特性,,將原先的大數(shù)據(jù)應用直接運行在Tachyon之上,,而不需要進行任何代碼和數(shù)據(jù)的遷移。 3.7 豐富的命令行式工具 Tachyon自帶了一個名為 “tfs”的命令行工具,,能夠讓用戶以命令行的方式與Tachyon交互,,而不需要編寫源碼來查看、新建,、刪除Tachyon文件,。例如: “tfs”工具提供的全部命令使用方式詳見Tachyon官方文檔。 3.8 方便管理的WebUI 除了“tfs”工具外,,Tachyon還在Tachyon Master和每個Tachyon Worker節(jié)點上啟動了一個網(wǎng)頁管理頁面,,用戶可以通過瀏覽器打開對應的WebUI(默認為http://:19999和http://:30000)。WebUI上列舉了整個Tachyon系統(tǒng)的基本信息,、所有Tachyon Worker的運行狀態(tài),、以及當前Tachyon系統(tǒng)的配置信息。同時,,用戶可以直接在WebUI上瀏覽整個Tachyon文件系統(tǒng),、預覽文件內(nèi)容、甚至下載具體的某個文件,。 3.9 實時指標監(jiān)控系統(tǒng) 對于高級用戶和系統(tǒng)管理人員,,Tachyon提供了一套實時指標監(jiān)控系統(tǒng),實時地記錄和管理了Tachyon中一些重要的統(tǒng)計信息,,包括存儲容量使用情況,、現(xiàn)有Tachyon文件數(shù)、對文件的操作次數(shù),、現(xiàn)有的數(shù)據(jù)塊數(shù),、對數(shù)據(jù)塊的操作次數(shù)、總共讀寫的字節(jié)數(shù)等,。根據(jù)用戶的配置,,這些指標能夠以多種方式進行輸出:標準控制臺輸出、以CSV格式保存為文件,、輸出到JMX控制臺,、輸出到Graphite服務器以及輸出到Tachyon的WebUI。 3.10支持Linux FUSE Tachyon-FUSE是Tachyon最新開發(fā)版的新特性,,由Tachyon Nexus和IBM共同主導開發(fā),。在Linux系統(tǒng)中,F(xiàn)USE(Filesystem in Userspace,,用戶空間文件系統(tǒng))模塊使得用戶能將其他文件系統(tǒng)掛載到本地文件系統(tǒng)的某一目錄下,,然后以統(tǒng)一的方式進行訪問。Tachyon-FUSE的出現(xiàn)使得用戶同樣可以將Tachyon文件系統(tǒng)掛載到本地文件系統(tǒng)中,。通過Tachyon-FUSE,,用戶/應用可以使用訪問本地文件系統(tǒng)的方式來訪問Tachyon。這更加方便了用戶對Tachyon的管理和使用,,以及現(xiàn)有基于FUSE接口的應用通過Tachyon進行內(nèi)存加速或者數(shù)據(jù)共享,。 4.Tachyon在百度大數(shù)據(jù)平臺的應用案例在百度,我們從2014年底開始關(guān)注Tachyon,。當時我們使用Spark SQL進行大數(shù)據(jù)分析工作,由于Spark是個基于內(nèi)存的計算平臺,,我們預計絕大部分的數(shù)據(jù)查詢應該在幾秒或者十幾秒完成以達到交互查詢的體驗,。然而,我們卻發(fā)現(xiàn)實際查詢幾乎都需要上百秒才能完成,,其原因在于我們的計算資源與數(shù)據(jù)倉庫可能并不在同一個數(shù)據(jù)中心,。 在這種情況下,我們每一次數(shù)據(jù)查詢都可能需要從遠端的數(shù)據(jù)中心讀取數(shù)據(jù),,由于數(shù)據(jù)中心間的網(wǎng)絡帶寬以及延時的問題,,導致每次查詢都需要較長的時間(>100秒)才能完成。更糟糕的是,,很多查詢的重復性或相似性很高,,同樣的數(shù)據(jù)很可能會被查詢多次,,如果每次都從遠端的數(shù)據(jù)中心讀取,必然造成資源浪費,。 為了解決這個問題,,在一年前我們借助Tachyon管理遠程及本地數(shù)據(jù)讀取和調(diào)度,盡量避免跨數(shù)據(jù)中心讀數(shù)據(jù),。 當Tachyon被部署到Spark所在的數(shù)據(jù)中心后,,每次數(shù)據(jù)冷查詢時,我們還是從遠端數(shù)據(jù)倉庫拉數(shù)據(jù),,但是當數(shù)據(jù)再次被查詢時,, Spark將直接從同一數(shù)據(jù)中心的Tachyon中讀取數(shù)據(jù), 從而提高查詢性能,。在我們的環(huán)境和應用中實驗表明:如果是從非本機的Tachyon讀取數(shù)據(jù)的話,,耗時降到10到15秒,比原來的性能提高了10倍,; 最好的情況下,,如果從本機的Tachyon讀數(shù)據(jù),查詢僅需5秒,,比原來的性能提高了30倍,, 效果很明顯。除了性能的提高,,更難能可貴的是Tachyon運行穩(wěn)定,,在過去一年中很好的支持著百度的交互式查詢業(yè)務, 而且社區(qū)在每一版迭代更新中都不斷提供更多的功能以及不斷提高系統(tǒng)的穩(wěn)定性,,讓業(yè)界對Tachyon系統(tǒng)更有信心,。 在過去一個月,百度在為大規(guī)模使用Tachyon做準備,,驗證Tachyon的可擴展性,。我們使用Tachyon的最新版成功部署了1000個worker的Tachyon集群,在本文完成時這應該是世界最大的Tachyon集群,。此集群總共提供超過50TB的內(nèi)存存儲,,在百度內(nèi)部已經(jīng)穩(wěn)定運行了一個月,現(xiàn)在有不同的百度業(yè)務在上面試運行以及壓力測試,。在百度的圖搜變現(xiàn)業(yè)務上,,我們與社區(qū)合作在Tachyon上搭建了一個高性能的Key/Value存儲,提供線上圖片服務,。同時由于圖片直接存在Tachyon里,,我們的線下計算可以直接從Tachyon中讀取圖片。 這使得我們將線上以及線下系統(tǒng)整合成一個系統(tǒng),,既簡化了開發(fā)流程,,也節(jié)省了存儲資源,,達到了事半功倍的效果。本文篇幅有限,,期待在后期給大家詳細介紹百度是1000 worker的Tachyon 集群的實用案例,,包括如何使用Tachyon整合線上線下的存儲資源等。 5.結(jié)語作為一個以內(nèi)存為中心,、統(tǒng)一的分布式存儲系統(tǒng),,Tachyon極大地增強了大數(shù)據(jù)生態(tài)中存儲層的功能。雖然Tachyon項目相對還比較年輕,,但已經(jīng)很成熟穩(wěn)定,,并且已經(jīng)在學術(shù)界以及工業(yè)界取得了成功。隨著整個計算機產(chǎn)業(yè)的發(fā)展,,內(nèi)存變的越來越便宜,,在計算集群中可使用的內(nèi)存容量會不斷增長,我們相信Tachyon也必將會在大數(shù)據(jù)平臺中發(fā)揮越來越重要的作用,。 現(xiàn)在Tachyon項目發(fā)展迅速,,更多的功能也在逐步得到完善,應用前景也頗為廣闊,。Tachyon正不斷地在支持更多的底層存儲系統(tǒng)(特別地,,社區(qū)中已經(jīng)有人正在實施支持阿里云OSS存儲系統(tǒng)以及百度開放云平臺,這對國內(nèi)的用戶和開發(fā)者來說是個很好的機會),;同時Tachyon也在實現(xiàn)安全性相關(guān)的支持,,以充分滿足業(yè)界生成環(huán)境的需要;更進一步地,,Tachyon目前更多地被視為文件系統(tǒng),,而作為一個統(tǒng)一存儲系統(tǒng),Tachyon也將支持更多的數(shù)據(jù)結(jié)構(gòu),,以滿足不同計算框架的需要,。在本文完成時Tachyon已經(jīng)準備發(fā)布下一版,有興趣的讀者們可以多關(guān)注Tachyon,,到社區(qū)里進行技術(shù)討論以及功能開發(fā),。 作者簡介: 顧榮,Tachyon項目核心開發(fā)者之一,,南京大學PASA大數(shù)據(jù)實驗室博士生。曾在Microsoft Research Aisa, Intel, Baidu以及Transwarp從事過大數(shù)據(jù)平臺和算法相關(guān)的實習工作,。目前主要研究興趣為大數(shù)據(jù)計算和存儲平臺,、分布式機器學習。 劉少山,,Tachyon項目核心開發(fā)者之一,,百度公司美國研發(fā)中心高級架構(gòu)師,。加州大學歐文分校計算機博士。曾在LinkedIn, Microsoft, Microsoft Research, INRIA, Intel以及Broadcom工作,。目前主要從事百度大數(shù)據(jù),,深度學習,以及異構(gòu)計算平臺架構(gòu)與開發(fā)。 (責編/魏偉,,關(guān)注Docker和OpenStack,,投稿請聯(lián)系微信“k15751091376”或者郵箱[email protected]) |
|