Alluxio簡(jiǎn)介
Alluxio簡(jiǎn)介
Alluxio是什么
Alluxio(之前名為 Tachyon)是世界上第一個(gè)以?xún)?nèi)存為中心的虛擬的分布式存儲(chǔ)系統(tǒng)。 它統(tǒng)一了數(shù)據(jù)訪(fǎng)問(wèn)的方式,為上層計(jì)算框架和底層存儲(chǔ)系統(tǒng)構(gòu)建了橋梁。應(yīng)用只需要連接Alluxio即可訪(fǎng)問(wèn)存儲(chǔ)在底層任意存儲(chǔ)系統(tǒng)中的數(shù)據(jù)。此外,Alluxio的以?xún)?nèi)存為中心的架構(gòu)使得數(shù)據(jù)的訪(fǎng)問(wèn)速度能比現(xiàn)有常規(guī)方案快幾個(gè)數(shù)量級(jí)。
在大數(shù)據(jù)生態(tài)系統(tǒng)中,Alluxio 介于計(jì)算框架(如 Apache Spark,Apache MapReduce,Apache Flink)和現(xiàn)有的存儲(chǔ)系統(tǒng)(如 Amazon S3,OpenStack Swift,GlusterFS,HDFS, Ceph,OSS)之間。Alluxio 為大數(shù)據(jù)軟件棧帶來(lái)了顯著的性能提升。 用戶(hù)可以以獨(dú)立集群方式(如Amazon EC2)運(yùn)行Alluxio,也可以從Apache Mesos或Apache YARN上啟動(dòng)Alluxio。

Alluxio 與 Hadoop是兼容的。 這意味著已有的Spark和MapReduce程序可以不修改代碼直接在 Alluxio上運(yùn)行。Alluxio 是一個(gè)已在多家公司部署的開(kāi)源項(xiàng)目(Apache License 2.0)。
Alluxio 是發(fā)展最快的開(kāi)源大數(shù)據(jù)項(xiàng)目之一。 自 2013 年 4 月開(kāi)源以來(lái),已有超過(guò) 100 個(gè)組織機(jī)構(gòu)的 250 多貢獻(xiàn)者參與到 Alluxio 的開(kāi)發(fā)中。包括阿里巴巴, Alluxio, 百度, 卡內(nèi)基梅隆大學(xué),IBM,Intel, 南京大學(xué), Red Hat,UC Berkeley和 Yahoo。Alluxio 處于伯克利數(shù)據(jù)分析棧(BDAS)的存儲(chǔ)層,也是 Fedora 發(fā)行版的一部分。

Alluxio的由來(lái)
內(nèi)存計(jì)算思想在三個(gè)層面的體現(xiàn):
內(nèi)存數(shù)據(jù)庫(kù):HANA,Redis,MemCached等 內(nèi)存計(jì)算引擎:Spark、Pregel、Trinity等 內(nèi)存文件系統(tǒng):Tachyon=>Alluxio
最初的設(shè)計(jì)思想:研究實(shí)現(xiàn)一個(gè)基于分布式內(nèi)存的文件存儲(chǔ)系統(tǒng),提高大數(shù)據(jù)處理時(shí)的IO性能。
隨著Tachyon系統(tǒng)逐步深入的研發(fā),設(shè)計(jì)目標(biāo)有了很大的提升
分布式文件系統(tǒng):加速大數(shù)據(jù)處理系統(tǒng)數(shù)據(jù)訪(fǎng)問(wèn) 現(xiàn)有底層大數(shù)據(jù)存儲(chǔ)系統(tǒng)的集成與統(tǒng)一訪(fǎng)問(wèn):避免已有大數(shù)據(jù)存儲(chǔ)平臺(tái)的遷移代價(jià) 形成統(tǒng)一化的數(shù)據(jù)共享與交換平臺(tái):支持各種上層的大數(shù)據(jù)處理系統(tǒng)
問(wèn)題:
傳統(tǒng)大數(shù)據(jù)分析系統(tǒng)通過(guò)磁盤(pán)文件系統(tǒng)(如HDFS)來(lái)共享數(shù)據(jù),大量磁盤(pán)I/O成為影響分析性能的瓶頸 大數(shù)據(jù)計(jì)算引擎的處理進(jìn)程(spark的Executor,MapReduce的Child JVM等)崩潰出錯(cuò)后,緩存的數(shù)據(jù)也會(huì)丟失。 基于內(nèi)存的存儲(chǔ)數(shù)據(jù)冗余,對(duì)象太多導(dǎo)致Java GC 時(shí)間過(guò)長(zhǎng)。
解決方案:
Alluxio為大數(shù)據(jù)分析流水線(xiàn)提供內(nèi)存級(jí)數(shù)據(jù)共享服務(wù) 內(nèi)存中的數(shù)據(jù)存放在Alluxio中,即使計(jì)算引擎處理進(jìn)程崩潰,內(nèi)存中的數(shù)據(jù)仍然不會(huì)丟失。 存放在Alluxio內(nèi)存中的數(shù)據(jù)無(wú)冗余,同時(shí)GC開(kāi)銷(xiāo)大大減少
系統(tǒng)架構(gòu)

Master 管理文件和對(duì)象元數(shù)據(jù) 監(jiān)控各個(gè)Worker狀態(tài) Worker 管理本地MEM、SSD和HDD Client 向用戶(hù)和應(yīng)用提供訪(fǎng)問(wèn)接口 向Master和Worker發(fā)送請(qǐng)求 Under File System 用于備份
優(yōu)勢(shì)
通過(guò)簡(jiǎn)化應(yīng)用程序訪(fǎng)問(wèn)其數(shù)據(jù)的方式(無(wú)論數(shù)據(jù)是什么格式或位置),Alluxio 能夠幫助克服從數(shù)據(jù)中提取信息所面臨的困難。Alluxio 包括如下優(yōu)勢(shì)。
內(nèi)存速度 I/O
Alluxio 能夠用作分布式共享緩存服務(wù),這樣與 Alluxio 通信的計(jì)算應(yīng)用程序可以透明地緩存頻繁訪(fǎng)問(wèn)的數(shù)據(jù)(尤其是從遠(yuǎn)程位置),以提供內(nèi)存級(jí) I/O 吞吐率。此外,Alluxio的層次化存儲(chǔ)機(jī)制能夠充分利用內(nèi)存、固態(tài)硬盤(pán)或者磁盤(pán),降低具有彈性擴(kuò)張?zhí)匦缘臄?shù)據(jù)驅(qū)動(dòng)型應(yīng)用的成本開(kāi)銷(xiāo)。
統(tǒng)一數(shù)據(jù)訪(fǎng)問(wèn)接口
Alluxio 能夠屏蔽底層持久化存儲(chǔ)系統(tǒng)在API、客戶(hù)端及版本方面的差異,從而使整個(gè)系統(tǒng)易于擴(kuò)展和管理。

能夠?qū)⒍鄠€(gè)數(shù)據(jù)源中的數(shù)據(jù)掛載到Alluxio中 多個(gè)數(shù)據(jù)源使用統(tǒng)一的命名空間 用戶(hù)使用統(tǒng)一的路徑訪(fǎng)問(wèn)
提升遠(yuǎn)程存儲(chǔ)讀寫(xiě)性能
以Hadoop為代表的存儲(chǔ)計(jì)算緊耦合的傳統(tǒng)架構(gòu)具有優(yōu)良的計(jì)算本地性。通過(guò)在鄰近所需數(shù)據(jù)的節(jié)點(diǎn)上來(lái)部署運(yùn)行計(jì)算任務(wù),可以盡量減少通過(guò)網(wǎng)絡(luò)傳輸數(shù)據(jù),從而有效地提升性能。然而,維持這種緊耦合結(jié)構(gòu)所需要付出的成本代價(jià)正逐漸讓性能優(yōu)勢(shì)帶來(lái)的意義變得微乎其微。
Alluxio通過(guò)在當(dāng)前主流的存儲(chǔ)計(jì)算分離解耦的架構(gòu)中,提供與緊耦合架構(gòu)相似甚至更優(yōu)的性能,來(lái)解決解耦后性能降低的難題。推薦把Alluxio與集群的計(jì)算框架并置部署(co-locate),從而能夠提供靠近計(jì)算的跨存儲(chǔ)緩存來(lái)實(shí)現(xiàn)高效本地性。

與傳統(tǒng)的架構(gòu)方案相比,Alluxio架構(gòu)帶來(lái)兩個(gè)關(guān)鍵區(qū)別。
Alluxio存儲(chǔ)中不需要保存底層存儲(chǔ)中的所有數(shù)據(jù),它只需要保存工作集(WorkingSet)。即使全體數(shù)據(jù)的規(guī)模非常大,Alluxio也不需要大量存儲(chǔ)空間來(lái)存儲(chǔ)所有數(shù)據(jù),而是可以在有限的存儲(chǔ)空間中只緩存作業(yè)所需要的數(shù)據(jù)。 Alluxio存儲(chǔ)采用了一種彈性的緩存機(jī)制來(lái)管理、使用存儲(chǔ)資源。訪(fǎng)問(wèn)熱度越高的數(shù)據(jù)(如被很多作業(yè)讀取的數(shù)據(jù)表),會(huì)產(chǎn)生越多的副本,而請(qǐng)求很少甚至沒(méi)有復(fù)用的數(shù)據(jù)則會(huì)被逐漸替換出Alluxio存儲(chǔ)層(其在遠(yuǎn)端存儲(chǔ)系統(tǒng)中的副本不會(huì)被清除)。而以HDFS為代表的存儲(chǔ)系統(tǒng)通常是采用一個(gè)固定的副本數(shù)目(如3副本),很難根據(jù)具體的數(shù)據(jù)訪(fǎng)問(wèn)熱度動(dòng)態(tài)調(diào)節(jié)存儲(chǔ)資源的使用。
數(shù)據(jù)快速?gòu)?fù)用與共性
Alluxio可以幫助實(shí)現(xiàn)跨計(jì)算、作業(yè)間的數(shù)據(jù)快速?gòu)?fù)用和共享。
對(duì)于用戶(hù)應(yīng)用程序和大數(shù)據(jù)計(jì)算框架來(lái)說(shuō),Alluxio存儲(chǔ)通常與計(jì)算框架并置。這種部署方式使Alluxio可以提供快速存儲(chǔ),促進(jìn)作業(yè)之間的數(shù)據(jù)共享,無(wú)論它們是否在同一計(jì)算平臺(tái)上運(yùn)行。

集成機(jī)器學(xué)習(xí)和深度學(xué)習(xí)

機(jī)器學(xué)習(xí)和深度學(xué)習(xí)框架往往需要從Hadoop或?qū)ο蟠鎯?chǔ)中提取大規(guī)模數(shù)據(jù),這通常是手動(dòng)且非常耗時(shí)的過(guò)程。通過(guò)Alluxio POSIX API克服該問(wèn)題。
Alluxio的FUSE功能支持POSIX兼容的API,因此通過(guò)Alluxio,TensorFlow、 Caffe等框架以及其他基于Python的模型可以使用傳統(tǒng)文件系統(tǒng)的訪(fǎng)問(wèn)方式直接訪(fǎng)問(wèn)任何存儲(chǔ)系統(tǒng)中的數(shù)據(jù)。
集群運(yùn)維問(wèn)題
權(quán)限問(wèn)題
需要賦值alluxio client客戶(hù)端文件及其父目錄 755權(quán)限,最好放到 /opt 或者/usr/local 目錄下,不要放到/home/用戶(hù)/ 目錄下,因?yàn)?home/用戶(hù) 目錄及其父目錄賦值 755權(quán)限后可能會(huì)破壞ssh免密登錄。
掛載HDFS問(wèn)題
掛載HDFS文件需要打通 alluxio到 hdfs namenode 8020端口和hdfs datanode 9866端口
