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.html

以M=6,K=3为例,使用EC以前,假设block副本数为3,那么6个block一共18个副本,overhead是200%,使用EC后,9个block,每一个block只需一个副本,一共9个副本,其中6个数据副本,3个校验副本,overhead是3/6=50%.git

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 详解看github

集成EC在HDFS中

HDFS-7285 和HDFS-RAID不一样,它是社区最新的正在开发中的将编码过程集成到HDFS内部的方案,须要对整个HDFS内部实现进行改造,包括DataNode,NameNode还有DFSClient,该方案同时支持在线和离线EC。apache

在线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的数据。app

读操做,丢失block时,只须要读9个DataNode中任意6个DataNode便可修复。修复过程须要读多个DataNode,耗费网络带宽和磁盘IO。Xorbas在facebook的HDFS-RAID基础上增长了LRC实现,LRC修复数据须要读的分片数更少,所以比Reed-Solomon修复数据更快,可是在存储成本上高14%.异步

ECClient模块封装了以上这些读写操做。ide

离线EC

该方案也支持离线EC,能够异步的将多副本文件转成EC文件,经过集成在NameNode中的ECManager和DataNode上的ECWorker来支持。命令行工具提供replication和ec之间的转换,能够经过命令行配置哪些文件/目录使用EC. 在转换方程中,不支持append。facebook的f4系统一样作的是离线EC,在作到磁盘,主机,机架,数据中心容错的状况下,存储因子作到2.1,看这里工具

结论

第二个方案比HDFS-RAID更全面,性能更好,在线EC能够立刻下降存储成本。可是处于开发中,看状态还须要好久才能完成。若是须要尽快用上EC,使用HDFS-RAID,可是也须要进行port工做。oop

参考资料

HDFS-RAID

Erasure Coding Support inside HDFS

相关文章
相关标签/搜索