HDFS ErasureCode方案對比


HDFS目前存儲文件的方案是將一個文件切分成多個Block進行存儲,通常一個Block 64MB或者128MB,每個Block有多個副本(replica),每個副本作為一個整體存儲在一個DataNode上,這種方法在增加可用性的同時也增加了存儲成本。ErasureCode通過將M個數據block進行編碼(Reed-Solomon,LRC),生成K個校驗(parity)block, 這M+K個block組成一個block group,可以同時容忍K個block失敗,任何K個block都可以由其他M個block算出來. overhead是K/M.

以M=6,K=3為例,使用EC之前,假設block副本數為3,那么6個block一共18個副本,overhead是200%,使用EC后,9個block,每個block只需一個副本,一共9個副本,其中6個數據副本,3個校驗副本,overhead是3/6=50%.

HDFS-RAID

HDFS-RAID 這個方案是facebook在 Hadoop 0.20-append分支上做的,為了不引入復雜度,基於HDFS,沒有修改HDFS。只支持離線(異步)EC。RaidNode定期掃描配置發現需要轉成EC的文件,轉換過程可以本地計算也可以通過MapReduce Job。RaidNode內部有一個BlockFixer線程定期檢查被配置成EC的文件路徑,如果文件有丟失的block或者corrupt的block,就本地重算或者通過MapReduce Job來重算,然后將生成的block插入文件系統中。客戶端方面,不需要修改任何代碼,只需要修改配置告訴它使用的文件系統是DistributedRaidFileSystem,它封裝了DFSClient,截獲DFSClient的請求,當DFSClient拋出CheckSumException或者BlockMissingException時,DRFS捕獲這些異常,定位到相應的parity file,然后重新算出丟失的block,隨后返回給客戶端. HDFS-RAID 詳解看

集成EC在HDFS中

HDFS-7285 和HDFS-RAID不同,它是社區最新的正在開發中的將編碼過程集成到HDFS內部的方案,需要對整個HDFS內部實現進行改造,包括DataNode,NameNode還有DFSClient,該方案同時支持在線和離線EC。

在線EC

當前HDFS block的副本作為一個整體連續(contiguous)的存儲在一個DataNode上,在locality上具有一定的優勢,特別是對於MapReduce這樣的應用,但是這種方法不好做在線EC。當前社區方案不以block為單位進行EC,而是以strip為單位進行EC(HDFS依舊管理Block)設計思路參考了QFS。對於配置了EC的文件,客戶端寫入時將文件的數據切成一個個的64KB的strip,相鄰的strip發往不同的DataNode,比如當前使用(6,3)-Reed-solomon編碼,當前正在寫的文件有6個strip: strip1, strip2, strip3, strip4, strip5, strip6, 那么這6個strip和相應的編碼出來的3個校驗strip共9個strip會並行的發往9個不同的DataNode。這種方式寫入性能更好,但是也會對網卡出口帶來一些壓力,同時犧牲了locality。如果文件大小不是64KB * 6的整數倍(本文例子),那么最后一個strip group顯然不是滿的,這時客戶端還會將最后一個strip group的長度記在校驗塊中,后續讀的時候,可以根據這個長度和數據塊長度還有文件長度來校驗。

對於append和hflush操作,最后一個parity strip group很可能還沒有切換成新的strip group,這就需要DataNode更新最后一個parity strip的數據。

讀操作,丟失block時,只需要讀9個DataNode中任意6個DataNode即可修復。修復過程需要讀多個DataNode,耗費網絡帶寬和磁盤IO。Xorbas在facebook的HDFS-RAID基礎上增加了LRC實現,LRC修復數據需要讀的分片數更少,因此比Reed-Solomon修復數據更快,但是在存儲成本上高14%.

ECClient模塊封裝了以上這些讀寫操作。

離線EC

該方案也支持離線EC,可以異步的將多副本文件轉成EC文件,通過集成在NameNode中的ECManager和DataNode上的ECWorker來支持。命令行工具提供replication和ec之間的轉換,可以通過命令行配置哪些文件/目錄使用EC. 在轉換方程中,不支持append。facebook的f4系統同樣做的是離線EC,在做到磁盤,主機,機架,數據中心容錯的情況下,存儲因子做到2.1,看這里

結論

第二個方案比HDFS-RAID更全面,性能更好,在線EC可以馬上降低存儲成本。但是處於開發中,看狀態還需要很久才能完成。如果需要盡快用上EC,使用HDFS-RAID,但是也需要進行port工作。

參考資料

HDFS-RAID

Erasure Coding Support inside HDFS


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM