在傳統(tǒng)的Apache Hadoop集群系統(tǒng)中,計算和存儲資源是緊密耦合的,HDFS為大數(shù)據(jù)存儲帶來便利的同時,也面臨著一些挑戰(zhàn):
當(dāng)存儲空間或計算資源不足時,只能同時對兩者進(jìn)行擴(kuò)容。假設(shè)用戶對存儲資源的需求遠(yuǎn)大于對計算資源的需求,那么同時擴(kuò)容計算和存儲后,新擴(kuò)容的計算資源就被浪費了,反之,存儲資源被浪費。
這導(dǎo)致擴(kuò)容的經(jīng)濟(jì)效率較低,額外增加成本。而獨立擴(kuò)展的計算和存儲則更加靈活,同時可顯著降低成本。
現(xiàn)在Hadoop采用存算分離的架構(gòu)的趨勢越來越明顯。
XSKY HDFS Client是為XEOS存儲集群和Hadoop計算集群量身打造的連接器。通過XSKY HDFS Client,Hadoop應(yīng)用可以訪問存儲在XEOS中的所有數(shù)據(jù)。
但是,在引入XEOS存儲后,會出現(xiàn)原有HDFS與XEOS共存的情況,如何將兩套存儲集群都利用起來是需要解決的問題。
01數(shù)據(jù)跨集群拷貝
一般情況下,計算應(yīng)用需要訪問的數(shù)據(jù),如果保存在不同的集群中,那么應(yīng)該將其中一個集群的數(shù)據(jù)拷貝到另一個集群上。一般情況下使用Hadoop自帶的DistCp工具,對數(shù)據(jù)進(jìn)行跨集群的拷貝。
這種方式雖然在一定程度上可以解決數(shù)據(jù)合并的問題,但如果數(shù)據(jù)量比較大,并且機(jī)房帶寬有限制的情況下,可能拷貝數(shù)據(jù)的時間會非常長。還有一個就是在拷貝過程中原始數(shù)據(jù)發(fā)生改動,就還需要考慮增量同步的問題。
02聯(lián)邦HDFS和ViewFS
在Hadoop 2.x發(fā)行版中引入了聯(lián)邦HDFS功能,期望可以解決NameNode的內(nèi)存問題。聯(lián)邦HDFS允許系統(tǒng)通過添加多個NameNode來實現(xiàn)擴(kuò)展,其中每個NameNode管理文件系統(tǒng)命名空間中的一部分。
但是,在實際應(yīng)用中,系統(tǒng)管理員需要維護(hù)多個NameNodes(所有NameNode都需要高可用)和負(fù)載均衡服務(wù),這又增加了管理成本。所以HDFS的聯(lián)邦方案并沒有被生產(chǎn)環(huán)境所采用。
在提供聯(lián)邦HDFS方案同時,Hadoop 2.x還提供了ViewFS,用來管理所有多個命名空間視圖。
雖然聯(lián)邦HDFS方案并沒有被大規(guī)模應(yīng)用,但ViewFS卻可以用來解決XEOS與HDFS共存問題。
03ViewFS的實現(xiàn)
ViewFS全稱是ViewFileSystem,它不是一個新的文件系統(tǒng),只是邏輯上的一個視圖文件系統(tǒng),它實現(xiàn)了標(biāo)準(zhǔn)的Hadoop FileSystem接口。但是,真實的請求處理還是在各自真實的存儲集群上。
ViewFS會維護(hù)一個mount-table,主要是viewfs的邏輯目錄與實際底層存儲的映射關(guān)系。在接收到應(yīng)用的調(diào)用時,ViewFS會解析用戶的訪問請求,并通過mount-table找到對應(yīng)的底層存儲目錄,轉(zhuǎn)發(fā)相應(yīng)的請求到底層存儲。
ViewFS會把所有應(yīng)用層的FileSystem調(diào)用透傳到底層真實文件系統(tǒng)中。由于ViewFs實現(xiàn)了Hadoop文件系統(tǒng)接口,因此使用它透明地運行Hadoop工具。例如,所有shell命令都可以與HDFS和本地文件系統(tǒng)一起使用ViewFS。
在集群的core-site配置中,fs.defaultFS被設(shè)置為ViewFS的root目錄,也就是指定的mount-table。
掛載表的掛載點在標(biāo)準(zhǔn)Hadoop配置文件中指定。ViewFS的所有mount-table配置條目均以“fs.viewfs.mounttable”為前綴,使用“link“標(biāo)記指定鏈接其他文件系統(tǒng)的mount點。建議使用與“link”文件系統(tǒng)目標(biāo)位置相同的mount點名稱。對于未在安裝表中配置的所有名稱空間,我們可以通過linkFallback將它們回退到默認(rèn)文件系統(tǒng)。
在集群的配置中增加ViewFS的mount-table配置,示例如下:
Hadoop系統(tǒng)將在Hadoop配置文件中查找名稱為 “ClusterX” 的mount-table。將所有g(shù)ateway和server配置包含“ClusterX”,如上示例。
04ViewFS的應(yīng)用場景
ViewFS可以在如下場景中使用:
非結(jié)構(gòu)化的原始數(shù)據(jù)可以通過DistCp等工具直接存儲在XEOS上,業(yè)務(wù)數(shù)據(jù)庫結(jié)構(gòu)化數(shù)據(jù)和應(yīng)用買點數(shù)據(jù)可以通過ETL以Hive的外部表方式存儲到XEOS中。HBase和Hive繼續(xù)在原有的HDFS上面運行,也就是HBase表數(shù)據(jù)和Hive內(nèi)部表數(shù)據(jù)仍然通過HDFS來存儲。
這樣的好處是海量非結(jié)構(gòu)化數(shù)據(jù),甚至是海量小文件都可以用XEOS來承載,減輕HBase的壓力,同時Hive新增數(shù)據(jù)全部通過XEOS來存儲,后續(xù)擴(kuò)容容量僅擴(kuò)展XEOS存儲集群即可。
05XEOS配置ViewFS
大數(shù)據(jù)平臺基于CDH 6.3.2。HDFS core-site.xml 增加如下配置:
Hadoop FS命令行:
執(zhí)行wordcount測試結(jié)果如下:
06小結(jié)
XSKY通過ViewFS的方式,在不改變用戶使用習(xí)慣的前提下,將原有HDFS數(shù)據(jù)與新增XEOS數(shù)據(jù)打通,解決了原有HDFS集群與新XEOS集群的共存問題。原有的HDFS數(shù)據(jù)可以繼續(xù)使用,而XEOS可以用于承載新生成的數(shù)據(jù)。
這種方式不僅可以充分利用舊有設(shè)備,達(dá)到節(jié)約成本的目的。同時,能夠借助XEOS橫向擴(kuò)展能力,實現(xiàn)存儲單獨擴(kuò)容。
申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點子。點擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!