EB 級 HDFS 集羣磁帶存儲資源池的建設實踐

HDFS是一個Apache基金會開源的一款分佈式文件系統。HDFS文件系統可以部署在低成本的硬件上,對外提供高吞吐的數據訪問和海量數據存儲的服務。本文總結HDFS磁帶存儲資源池建設的實踐,拓展HDFS異構存儲到磁帶存儲介質,強化了HDFS低成本海量數據存儲能力。

HDFS在2.6.0版本後引入了異構存儲架構,支持內存、固態盤、HDD磁盤、SATA盤等存儲介質。HDFS異構存儲可以根據各種介質讀寫特性,發揮各自的優勢。針對低頻訪問數據存儲的需求,採用容量大的,讀寫性能不高的大容量磁盤存儲介質存儲。對比普通的Disk磁盤,容量大成本低。而對於熱數據而言,可以採用SSD的方式進行存儲,這樣就能保證高效的讀性能,在速率上甚至能做到十倍於或百倍於普通磁盤讀寫的速度。對於最熱的數據,甚至可以直接存放內存。HDFS通過定義各種存儲策略,可以根據數據的使用要求,把數據存儲到相應的介質上,實現性能和成本的平衡。

目前HDFS的存儲資源池有:

  • 熱 -用於存儲和計算。流行且仍用於處理的數據將保留在此策略中。塊熱時,所有副本都存儲在DISK中。

  • 冷 -僅適用於計算量有限的存儲。不再使用的數據或需要歸檔的數據從熱存儲移動到冷存儲。當塊處於冷狀態時,所有副本都存儲在ARCHIVE中。

  • 溫暖 -部分熱和部分冷。當一個塊變熱時,其某些副本存儲在DISK中,其餘副本存儲在ARCHIVE中。

  • All_SSD-用於將所有副本存儲在SSD中。

  • One_SSD-用於將副本之一存儲在SSD中。其餘副本存儲在DISK中。

  • Lazy_Persist-用於在內存中寫入具有單個副本的塊。首先將副本寫入RAM_DISK,然後將其延遲保存在DISK中。

但是HDFS目前支持的存儲介質也存各種不足。相對SAN和NAS存儲,分佈式文件系統HDFS的成本不高($1000/TB),但是對於EB級別的數據量而言,HDFS仍然高達億元的存儲成本。其次HDFS文件系統基於廉價的通用硬件,通過數千上萬臺PC服務器組成龐大的分佈式集羣才能提供EB級存儲空間服務,這種架構的數據能耗密度高,數據空間密度低,不適合綠色數據中心的長久發展。

爲了克服HDFS異構存儲介質的不足,本項目嘗試採用磁帶技術進行數據存儲。磁帶技術發源於上世紀五十年代,是一項悠久的計算機存儲技術。磁帶技術具有成本低(¥500/TB)、存儲時間長(理論保存時間長達30多年)、低能耗(磁帶不使用時不消耗電力)、高空間密度(9P/機櫃)等特性,磁帶技術廣泛應用於數據備份、數據歸檔、異地備援等方面。

本項目採用LTFS磁帶文件系統技術,構建HDFS磁帶存儲資源池。LTFS格式是由全球網絡存儲工業協會(SNIA)標準化的自描述的媒體格式,該LTFS格式是包含定義格式的文件的剩餘部分頭部中的自描述的媒體格式。標頭包含有關數據數組,文件元素和屬性以及元數據使用的說明。

LTFS卷有兩個或多個分區,在IBM Spectrum®歸檔程序始終使用以下兩個分區:數據和索引。數據分區包含所有數據和元數據。索引分區包含數據分區和元數據中的數據子集。所有分區都從VOL1開始。首先使用XML標頭信息寫入分區,然後再寫入文件數據和元數據。所有元數據都放在文件標記之間。

LTFS卷使用標準的POSIX(便攜式操作系統接口)文件操作,從而允許掛載LTFS,而無需訪問其他信息源。LTFS在操作系統級別工作,可以將LTFS文件寫入和讀取LTFS卷,然後僅使用該卷中寫入的信息在其他站點和應用程序之間傳遞。該體系結構的目標允許LTFS可以通過非專有或替代的數據管理和歸檔解決方案進行尋址。

LTFS支持LTO帶機和IBM企業級帶機,支持IBM入門級的TS2900和企業級的TS4500帶庫。

HDFS磁帶存儲資源池由多個data node節點組成,每個data node則是由節點服務器和帶庫組成。節點服務器採用IBM的HSM技術, HDFS塊文件以存根文件(stub file)的形似存儲在節點服務器上,HDFS塊文件可以通過存根文件進行檢索文件大小等屬性。帶庫連接節點服務器,爲HDFS塊文件提供LTFS格式的存儲空間。節點據服務器一般帶有少量的本地磁盤,提供數據緩存服務。HDFS客戶端寫數據時,數據通常先緩存在節點服務器的本地磁盤上,然後由遷移服務把數據遷移至位於帶庫的磁帶中。HDFS客戶端讀數據時,節點服務器首先通過存根文件實時召回位於磁帶上的數據回本地磁盤緩存中,然後HDFS客戶端讀取位於本地磁盤緩存中的數據。由於採用HSM技術,磁帶存儲資源池支持隨機讀文件和批量預讀文件的功能。

HDFS多介質存儲架構如下:

基於磁帶順序讀寫的特點,建議HDFS磁帶存儲資源池獨立建HDFS集羣。現有的HDFS的自動遷移的存儲策略不適合於HDFS磁帶存儲資源池;磁帶資源池和其他的存儲資源池之間的數據同步需要採用HDFS集羣間數據拷貝的方式進行。

和傳統的Hadoop部署架構一樣,連接磁帶介質的數據節點用來存儲數據,節點連接接入交換機,同時通過FC光纖直接連接帶庫(也可以通過以太網交換機連接)。HDFS的Name Node存儲用來HDFS文件的索引信息,對外提供統一的命名空間。由於磁帶節點的計算負載比較重,一般磁帶節點不同時提供計算服務。

整個Hadoop的部署架構如下:

大數據計算時Hadoop客戶端向Resource Manager提交一個計算請求,計算節點的Node Manager產生若干個計算task(Map/Reduce),Task所在的計算節點作爲HDFS客戶端,向HDFS文件系統進行讀寫操作。當向HDFS文件系統寫數據時,客戶端首先向Name Node發送一個寫文件請求,Name Node則會檢查是否已存在文件、檢查權限。若通過檢查,直接先將操作寫入EditLog,並返回客戶端輸出流對象。然後HDFS客戶端按一定大小進行文件切片,一般大小爲128MB。再後HDFS客戶端將Name Node返回的分配的可寫的Data Node列表和Data數據一同發送給最近的第一個Data Node節點,此後HDFS客戶端和Name Node分配的多個Data Node構成pipeline管道,HDFS客戶端向輸出流對象中寫數據。HDFS客戶端每向第一個Data Node寫入一個packet,這個packet便會直接在pipeline裏傳給第二個、第三個…Data Node。每個Data Node寫完一個塊後,會返回確認信息。HDFS客戶端在寫完數據後,關閉輸輸出流。最後HDFS客戶端向Name Node發送完成信號。

HDFS磁帶存儲資源池的寫操作比傳統的HDFS寫還多一個異步操作,位於節點服務器的遷移程序會把位於本地磁盤緩存的數據以異步的方式遷移到後端的磁帶上,同時創建一個文件的存根文件(Stub file)。

HDFS磁帶存儲資源池的讀操作比寫操作要更復雜。一般HDFS讀操作時, HDFS客戶端首先訪問Name Node,查詢文件的元數據信息,獲得這個文件的數據塊位置列表,返回輸入流對象。然後HDFS客戶端會就近挑選一臺data node服務器,請求建立輸入流。Data Node向輸入流中中寫數據,並以packet爲單位來校驗。最後HDFS客戶端關閉輸入流,數據讀取成功。

由於HDFS磁帶存儲資源池的數據真實存儲在節點服務器的後端磁帶中,Data Node沒有數據可以向輸入流中中寫。所以Data Node在讀取服務器上的塊文件Stub file時,會觸發一個HSM的recall操作,這個操作會自動把位於磁帶上的數據複製到本地磁盤緩存中。

整個HDFS磁帶存儲資源池的讀寫操作流程如下:

隨着項目的上線投產,通過對系統的監控,系統單個Data Node的寫性能能夠達到600MB/s,讀性能能夠達到500MB/s。整套系統由多個數據節點和多套帶庫組成,整套HDFS文件系統磁帶存儲資源池能夠提供幾十GB/s級別的數據吞吐能力和EB級別的數據存儲能力。

目前整套HDFS磁帶存儲資源池系統支持海量數據的連續寫能力,每天可以持續寫入的數據多達數PB。同時系統也支持隨機讀數據,大數據計算的大批量使用數據,則建議使用批量預讀取數據的方式,批量複製磁帶上的數據到其他存儲資源池後才能使用數據。

項目通過對HDFS磁帶存儲資源池的建設,實現了HDFS的內存存儲、閃存存儲、磁盤存儲、磁帶存儲等多種存儲介質的有機整合。在企業層面的統一文件命名空間的前提下,實現了數據在不同存儲資源池之間無縫流轉。磁帶存儲資源池極大地提高了IT對業務的支持力度,滿足了業務的低成本存儲需求。相比其他存儲介質存儲資源池,磁帶存儲資源池有低成本、低功耗、高空間數據密度,綠色數據中心等特點,極大的降低企業對低頻數據歸檔數據的存儲成本。

當然HDFS磁帶存儲資源池建設還處於初級摸索階段,項目建設過程中也遇到很多困難,踩過很多坑,整套系統還有很多需要完善的地方,在後續項目中會繼續優化完善。由於磁帶和帶庫的機械特性,整套系統不足以支持隨機高併發數據訪問請求,隨機讀數據性能也不是很高。在HDFS磁帶存儲資源池建設時,需要調研業務的IO需求特性,選擇合適的使用場景。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章