纠删码是CDH6/Hadop3引入的新功能,之前的HDFS都是副本方式容错,默认情况下,一个文件有三个副本,可以容忍任意2个副本(Datanode)不可用,是以牺牲空间的代价提供了数据的可用性,带来了2倍的冗余开销。例如1TB的数据,需要3TB的空间来进行存储。而纠删码可以在同等可用性的情况下,节省更多的空间。
以RS-6-3-1024k为例,6份原始数据,编码后生成3份校验数据,一共9份数据,只要最终有6份数据存在,就可以得到原始数据,它可以容忍任意3份数据不可用,而冗余的空间(3)只有原始空间(6)的0.5倍,只有副本方式(6*3-6=12)的1/4,因此,可以节约更多的空间成本。
对于RS-3-2-1024k来说,3份原始数据,编码后生成2分校验数据,一共5份数据,可以容忍任意2份数据不可用,冗余空间(2)只有原始空间67%,只有副本方式的(3*3-3=6)的1/3。可见RS-6-3-1024k比RS-3-2-1024k策略能节约更多空间。
1、CDH6 默认没有开启纠删码,需要在cloudera manager中进行设置,启用后需要重启HDFS服务。
2、CM6.1上提供的纠删码策略有3种,RS-3-2-1024k、RS-6-3-1024k、RS-10-4-1024k,然而通过命令行可以看到有5种:
hdfs ec –listPolicies
3、纠删码是以目录为单位的,该目录的属主可以对该目录设置策略;默认纠删码策略是disabled的状态,需要通过命令行对目录进行开启生效,
hdfs ec -getPolicy -path /user/dl
4、给目录设置纠删码策略
hdfs ec -setPolicy -path /user/wangkuan -policy RS-3-2-1024k
提示该策略对之前存在的文件不会生效
5、测试
向一个没有设置纠删码策略的目录上传一个文件,可以看到实际大小为原大小的3倍;
向一个设置有纠删码RS-3-2-1024k策略的目录上传一个文件,可以看到实际大小为原大小的1.66倍。
6、纠删码策略对datanode数量与要求,比如RS-6-3-1024k,即需要6个数据块,3个校验码,至少需要9个datanode节点。由于测试环境节点数较少,因此采用了RS-3-2-1024k策略进行验证,生产环境大规模集群,建议使用RS-6-3-1024k或RS-10-4-1024k策略。