概述

在编码理论里,有一种前向纠错(FEC)编码方式,也称为纠删码。这种技术可以将原始数据中丢失的k字节数据从n个含编码字节的信息中进行恢复。在纠删码技术中,Reed-Solomon(里所码)码是一种常见的纠删码。

纠删码的应用对于在分布式环境下数据存储的可靠性保证,有两种策略:

1)引入副本冗余机制策略 

2)利用纠删码技术,相比于副本策略,纠删码技术可以节省更多磁盘的空间。即有更高的磁盘利用率

拿Hadoop的HDFS来说,策略一般是三副本,当某个副本丢失时,可以通过其他副本复制回来。所以在这种情况下,Hadoop集群的磁盘利用率为1/3。而如果使用纠删码技术后,可以提高磁盘的利用率。

纠删码的思想上图的含义是:有n个原始数据块,再引入m个数据校验块,然后通过编码(encode)使得原始数据块和数据校验块产生关联。

hdfs 纠删码使用 hadoop 纠删码_hdfs 纠删码使用

纠删码技术是一种数据恢复技术,最早用于通信行业中数据传输中的数据恢复,是一种编码容错技术。它通过在原始数据中加入新的校验数据,使得各个部分的数据产生关联性。在一定范围内的数据出错情况下,通过纠删码技术都可以进行恢复。比如:有原始数据块n个,然后加入m个校验数据块。原始数据块和校验数据块在丢失时,都可以通过现有的数据块进行恢复

举例:

①x=1

②y=2

③z=3

④x+y+z=6

2x+3y+z=11

⑥x+2y+3z=14

1)如果我们丢了3个原始数据块,可以恢复

④x+y+z=6

2x+3y+z=11

⑥x+2y+3z=14

2)如果我们丢失了3个数据校验块,可以恢复

①x=1

②y=2

③z=3

3)可以

②y=2

③z=3

④x+y+z=6

2x+3y+z=11

⑥x+2y+3z=14

4)可以

③z=3

④x+y+z=6

2x+3y+z=11

⑥x+2y+3z=14

5)不可以

③z=3

⑥x+2y+3z=14

Reed-solomon codes(里所码)

概述

Reed-Solomon里所码(RS)码是存储系统较为常用的一种纠删码,也称为里所码。它有两个参数n和 m,记为RS(n,m)。n代表原始数据块个数。m代表校验块个数。接下来介绍RS码的原理。

Reed-Solomon(RS)码的编码和解码过程

1 )编码过程(encoding)

2)解码过程(decoding)

RS的优缺点:优点:低冗余度,高磁盘利用率。比如一个文件有5个文件块,假设用3副本冗余机制,最后总的文件块是15块,则磁盘利用率是:5 /15=1/ 3=33 %

而用RS码来实现,5个文件块+3个数据校验块,则磁盘利用率是:5 /8=62.5%

缺点:

1)计算代价高。 丢失数据块或者编码块时, RS需要读取n个数据块和剩余的校验块才能恢复数据。

2)数据更新代价高。 数据更新相当于重新编码, 代价很高, 因此常常针对只读数据,或者冷数据。

工程实践中,一般对于热数据还是会使用多副本策略来冗余,冷数据使用纠删码

两种冗余技术对比如下:

两种技术

 磁盘利用率

 计算开销

网络消耗

恢复效率

多副本(3副本) 

1/3 

几乎没有

较低

较高

纠删码(n+m)

n/(n+m)

高 

 较高

较低