大數據經過了多年的發展,以Hadoop生態為核心的大數據框架已經十分成熟,這個過程伴隨著對存儲需求的不斷變化,從而演進出了數據湖的概念以及在數據湖存儲方面的幾個新需求特征:
如數據的分布組織與元數據的高效管理;存儲和計算分離,大幅降低成本;數據全生命周期管理;多訪問協議支持達到All in One的存儲能力;具備數據的智能感知,能夠更好地輔佐、支撐上層業務。
從業務需求和大數據發展的趨勢來看,大數據存算分離是大勢所趨。
當前Hadoop存儲方案的局限
目前Hadoop生態的默認存儲組件為HDFS,其本質上是存算一體的方案,存在很多不足,除了HDFS與計算應用組件的融合部署,導致整體集群擴容時計算與存儲資源不平衡的問題之外,更主要在于HDFS自己的元數據架構存在瓶頸以及數據冗余效率的問題。總之,HDFS的發展適應不了當下快速增長的數據量對存儲的需求。
Hadoop社區也支持采用S3A適配器的方式,將兼容S3協議的對象存儲鏈接到Hadoop計算生態,實現存算分離。
杉巖數據的對象存儲產品杉巖MOS完全兼容S3協議,可通過S3A適配器實現對Hadoop大數據平臺的存儲供應,并且杉巖MOS支持大比例EC、數據自動分層存儲等特性。相比HDFS存儲,在不降低可靠性的情況下,提供了高性價比的海量數據管理能力。但是S3A的方案仍然面臨著一些問題:
對象存儲自身KV形式的數據管理方式,在上層Hadoop計算框架使用的一些類POSIX語義的操作(比如目錄的重命名,或對子目錄的list操作)時成為了影響性能的關鍵因素,主要原因為對象存儲自身沒有目錄的概念,上層計算側的目錄重命名和list操作,都會轉換為時間復雜度極高的大量對象的“Copy+Delete”操作與遍歷操作,在大規模作業時瓶頸效應尤其突出。
針對這些問題,S3A方案的業界頭部用戶與主要貢獻廠商也在支持S3的場景下開發了各種S3A Committer,通過S3協議里的一些高級特性,巧妙地規避掉了如目錄重命名的操作,但在流程上面的這些調整改造,也引入了如異常處理與任務回退的懲罰放大問題,以及第三方組件依賴等問題。因此,目前S3A的方案在私有云大數據處理環境中,更多地使用于小規模數據處理或備份歸檔的場景。
基于杉巖MOS的存儲分離解決方案
面對以上HDFS與S3A的問題,杉巖數據推出了基于杉巖MOS海量對象存儲的大數據存算分離場景的存儲解決方案。除了提供業界通用的S3A方案,以解決普通大數據業務和大數據中的備份歸檔場景的需求之外,杉巖數據研發實現了兼容HDFS接口能力的高性能MOSFS數據湖文件網關,MOSFS核心組件分為以下幾個部分:
1、元數據服務:即MOSFS-MDS,數據湖文件網關擁有獨立的類文件系統的分布式元數據服務,具備橫向擴展能力,同時也解決了HDFS NameNode在海量小文件場景下的元數據性能瓶頸問題。
2、數據部分:MOSFS的數據部分基于杉巖 MOS底層的對象存儲,通過IO路徑優化,拋棄了S3A通過S3協議網關(即下圖中的RGW)訪問底層數據的方式,實現了通過文件網關客戶端直接與底層存儲平臺層(即下圖中的RADOS)進行數據交互的能力,進一步提升了數據訪問的效率與性能。
3、MOSFS客戶端:即MOSFS-Client,實現了對HDFS接口協議完全兼容,可以保證應用層就像使用原生HDFS存儲一樣使用MOSFS。同時,為了解決存算分離后存儲與計算之間的網絡延遲問題,MOSFS 提供了客戶端緩存能力,利用客戶端的內存或SSD資源,加速數據的讀取。
圖1 杉巖MOS存算分離方案架構圖
實際場景中,通過在計算平臺部署我們提供的MOSFS-Hadoop.jar包與簡單的配置,即可方便地實現Hadoop平臺的組件與分離部署的存儲交互。同時針對業界使用比較廣泛的CDH平臺,MOSFS也開發了配套的Parcel資源包,利用CDH自身的管理便捷地配置使用MOSFS提供的存儲空間。
幾種方案的性能對比
針對大數據的場景,我們使用相同的4節點CDH計算集群和杉巖MOS做了上文提及的HDFS/S3A/MOSFS三種方案的性能對比測試。為了體現存算一體與存算分離架構的測試環境公平性,存算一體時的HDFS存儲與存算分離時所用的MOS存儲,均使用相同的節點數和相同的數據盤。
1、TeraGen/TeraSort/TeraValidate測試TeraGen/TeraSort/TeraValidate是Hadoop提供的測試HDFS文件系統的讀寫性能,及對MapReduce自動排序能力測試的標準測試用例,主要分為三步:1)通過TeraGen生成排序的隨機數據;2)對輸入數據執行TeraSort排序;3)對排序的輸出數據利用TeraValidate進行校驗。
我們使用相同的Hadoop MapReduce配置執行100多億條100Byte的數據,合計1TB數據規模的對應任務。
結果顯示,MOSFS在TeraGen與TeraSort任務中執行效率明顯高于HDFS與S3A方案。其中在相同的TeraGen任務上,HDFS耗時為MOSFS的2.31倍,S3A方案耗時為MOSFS的3.3倍;相同的TeraSort任務上,HDFS耗時為MOSFS的1.32倍,S3A方案耗時為MOSFS的1.56倍;在TeraValidate任務中計算的消耗比重大于數據訪問的比重,所以三者的效率相當。
2、RandomTextWriter/WordCount測試
RandomTextWriter用來隨機數據生成壓力測試,且經典的單詞計數WordCount 是CPU 算力壓力測試的常用用例。其中,RandomTextWriter 使用Map & Reduce來運行分布式作業,每個任務生成一個大的未排序的隨機單詞序列(其中鍵為5-10個單詞,值為20-100個單詞),我們用它來模擬生成1TB數據的壓力測試,然后對該1TB數據量進行WordCount任務統計單詞計數測試。
結果顯示,RandomTextWriter生成任務時,MOSFS對比HDFS和S3A方案具有明顯的優勢,HDFS與S3A方案的執行時間都約為MOSFS的1.9倍。對于WordCount在計算節點同等配置下,Reduce階段執行效率大體一致,性能優化主要為Map讀取數據階段,WordCount整個任務耗時HDFS與S3A方案分別為MOSFS的1.7倍于1.2倍。
3、TestDFSIO測試
針對帶寬型的讀寫,我們執行的是HDFS常用I/O性能評估工具TestDFSIO的測試,本次測試采用文件數1024個1GB大小文件共1T數據量的規模來進行讀寫測試對比,測試結果如下:
結果顯示,TestDFSIO讀寫時MOSFS的性能優于HDFS和S3A,HDFS寫1T數據量執行的時間是MOSFS的1.5倍,S3A方案相同任務執行時間為MOSFS的1.3倍;且讀該1T數據量時HDFS的耗時是MOSFS的1.69倍,S3A方案相同任務執行時間是MOSFS的1.4倍。
4、HBase性能測試
YCSB是雅虎開源的分布式性能測試工具,常用于測試NoSQL數據庫的讀寫性能。我們使用 YCSB套件對HBase測試了1億條數據規模的寫入與讀取測試,且YCSB使用多計算節點并發測試讀寫性能。
結果顯示,MOSFS在HBase小文件IO場景業務中,HBase寫一億數據量時的OPS統計MOSFS分別是HDFS與S3A的2.15倍與2.3倍,讀該一億數量時的OPS統計MOSFS分別是HDFS與S3A的1.77倍與1.92倍,即MOSFS在HBase業務模型下,讀寫性能明顯優于HDFS與S3A方案。
總結
圖2 杉巖湖倉一體解決方案
作為國內SDS的頭部廠商,杉巖數據近年來深耕行業場景,尤其在應對海量數據爆炸式增長的條件下,潛心打磨分布式對象存儲杉巖MOS。上述文章中的測試數據也體現出了數據湖文件網關MOSFS方案在Hadoop生態中的優勢,與杉巖MOS自身的高性能EC糾刪碼、生命周期管理、智能處理引擎、ES檢索等高級特性相結合,使基于杉巖MOS為基座的湖倉一體方案更加完善,為客戶實現All in One的存儲能力。