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