纠删码可以将HDFS的存储开销降低约50%,同时与三分本策略一样,还可以保证数据的可用性
前言
测试环境上搭建了一套 CDH 6.3.1 集群,发现有个隐患,说需要9个DN,ec 什么来着。
之前从没遇过,带着好奇心我对其进行搜索查询后,了解到这是 Hadoop3 新特性纠删码,打开了新的技术世界。
个人写的只是理解性,感兴趣的小伙伴自行阅读下方链接:
多副本和纠删码
多副本策略即将数据存储多个副本(一般是三副本,比如HDFS),当某个副本丢失时,可以通过其他副本复制回来。三副本的磁盘利用率为1/3。
纠删码技术主要是通过纠删码算法将原始的数据进行编码得到校验数据块来达到冗余,并将数据块和校验块一并存储起来,以达到容错的目的。磁盘利用率为 n/(n+m)。
问:与纠错码的区别
如果严格的区分,实际上按照误码控制的不同功能,可分为检错、纠错和纠删三种类型
检错码仅具备识别错码功能 而无纠正错码功能
纠错码不仅具备识别错码功能,同时具备纠正错码功能
纠删码则不仅具备识别错码和纠正错码的功能,而且当错码超过纠正范围时,还可把无法纠错的信息删除
EC
纠删码是一种前向错误纠正技术,英文名叫Erasure Code,简称EC。前向是指纠错过程是单方向的,不存在差错的信息反馈,即在传输过程中发生错误后能在收端自行发现或纠正的码。
Reed-Solomon(RS) 码
Reed-Solomon(RS)码是存储系统较为常用的一种纠删码,它有两个参数 n 和 m,记为 RS(n,m)。n 代表原始数据块个数。m 代表校验块个数。具体原理参阅下方文章
快速入门
列出当前集群中所有支持的EC编解码算法
1 | hdfs ec -listCodecs |
列出当前集群中所有的EC策略
1 | hdfs ec -listPolicies |
启用指定的EC策略
1 | hdfs ec -enablePolicy -policy <policyName> |
停用指定的EC策略
1 | hdfs ec -disablePolicy -policy <policyName> |
EC与三副本转换
总结
工程实践中,一般对于热数据还是会使用多副本策略来冗余,冷数据使用纠删码。
纠删码和RAID技术看起来是有些类似,但与RAID5、RAID6不同的是纠删码从功能上来看最大的区分特点是校验和数据的比例按N+M可调整,并且校验块数量不再受限于2个(RAID最多2个,比如RAID6),纠删码的M可以是3、4甚至更多。
参考链接