桔妹導讀:HDFS中默認的3副本方案在存儲空間和其他資源(例如網絡帶寬)上有200%的開銷。對於冷數據,使用糾刪碼(ErasureCoding,EC)存儲代替副本存儲是一種非常不錯的替代方案。EC存儲在保證容錯能力不低於副本存儲的同時,有着更低的存儲空間消耗。HDFS EC在滴滴內部穩定落地已超過半年,爲公司節約了大量的存儲成本。本文將介紹EC在滴滴內部的實踐情況。
▍1. EC算法
XOR Codes
Reed-Solomon Codes
▍2.HDFS EC塊佈局
先回顧一下3副本存儲的連續存儲方式(Contiguous Block Layout),3副本存儲以塊(Block)爲單位,會將數據連續寫入Block中,直至達到該Block大小(如128M)再去申請下一個Block,每個Block會有3個相同數據的副本存於3個DataNode(DN)上。連續存儲示意圖如圖2(a)所示。HDFS EC採用條帶條帶式存儲佈局(Striping Block Layout)。條帶式存儲是以塊組(BlockGroup)爲單位,橫向式地將數據保存在各個Block上,同一個Block上的不同分段的數據是不連續的。寫完一個塊組再申請下一個塊組。條帶式的存儲結構圖2(b)所示(圖示爲RS(6,3)策略下1個BlockGroup佈局示意圖)。
圖2(a) 3副本存儲示意圖
圖2(b) EC存儲示意圖
▍1. EC落地工作
爲了將EC存儲引入生產環境,我們做了如下的定製和優化。
升級NameNode與DataNode到3.2版本
定製Hadoop2兼容EC讀寫客戶端
自研轉EC系統
定製distcp工具。在將副本文件轉EC文件後,必須要保證數據一致性。這就要求複製的源和目標文件checksum必須相同。由於存儲方式不同,使用傳統的CRC校驗方式不能適用於副本文件和EC文件的校準。因此,定製版本將Hadoop3中的COMPOSITE_CRC校驗方式(HDFS-13056)引入到Hadoop2的distcp中供內部使用。
自研轉EC系統(Anty系統)用於週期性(或手動)執行轉EC作業,以及統計集羣EC文件存儲量、佔比等信息。具體介紹見後文的實踐場景部分。
定製離線計算物理空間工具
第一個塊的cell寫滿了,則校驗塊cell大小也寫滿
第一個塊的cell只寫了k (k<cellSize) 字節,則每個校驗塊也是k字節
圖3 最後一個strip cell寫滿情況示意圖
FastCopy支持EC文件的改進
表1 EC策略特性對比
圖5 轉EC文件數據源
轉EC存儲流程如下(自研Anty系統將自動化完成所有過程):
週期性地(每天)從fsimage表中計算出需要轉EC的葉子目錄
每個目錄的轉EC、替換原文件操作記爲一次pipeline。多個pipeline並行操作進行轉EC
每個目錄的轉EC狀態記爲該目錄的生命週期lifecycle,生命週期有變化時更新到mysql,用於前端頁面對轉EC情況的展示
整個轉EC流程如圖6所示。
圖6 轉EC流程圖
通過數據資產平臺每天的定時分析,獲得01機房核心增量數據
自研的Anty系統將增量核心數據通過定製的distcp寫到02機房存儲爲EC文件
圖7 核心數據跨機房備份流程示意圖
▍3.遇到的問題及解決辦法
寫EC文件客戶端hang住問題
DN下線失敗問題
DN重構EC塊有髒數據問題
Standby內存泄露問題
圖8 standby PendingDataNodeMessages內存泄露示意圖
參考文獻:
[1] https://issues.apache.org/jira/browse/HDFS-7285
▬
團隊招聘
▬
滴滴大數據架構部主要負責滴滴大數據存儲與計算等引擎的開發與運維工作,通過持續應用和研發新一代大數據技術,構建穩定可靠、高性能、低成本的大數據基礎設施,更多賦能業務,創造更多價值。
團隊近期招聘:
Flink/ClickHouse/ElasticSearch/HDFS/Presto/融合計算等領域專家,參與滴滴大數據建設工作,歡迎加入。可
投遞簡歷至
[email protected]。
掃碼瞭解更多崗位
內容編輯 | Sherry
聯繫我們 | [email protected]
本文分享自微信公衆號 - 滴滴技術(didi_tech)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。