1. 背景介绍
在 Hadoop 的分布式文件系统 HDFS 中,传统的数据容错方式是 副本机制(Replication)。
默认情况下,每一份数据会保存 3 个副本,这样即使某个节点宕机,系统也能从其他副本中恢复数据。
但是,副本机制存在一个明显的问题:
-
存储开销大:3 副本意味着 1TB 的数据需要占用 3TB 的存储空间。
-
存储利用率低:大规模数据集下,硬件成本压力巨大。
为了解决这一问题,HDFS 在 Hadoop 3.x 版本引入了 纠删码(Erasure Coding,简称 EC) 技术。
2. 什么是纠删码(Erasure Coding)?
纠删码是一种 数据冗余校验技术,其思想来源于 RAID5/RAID6。
核心思路是:
-
将数据划分成多个数据块(Data Blocks)。
-
通过编码算法生成额外的校验块(Parity Blocks)。
-
即使部分块丢失,也能通过剩余数据块 + 校验块重建原始数据。
例如,Reed-Solomon 编码是一种常见的纠删码方案:
-
把数据分成
k个数据块。 -
额外生成
m个校验块。 -
最终总共有
k + m个块。
只要其中任意k个块可用,就能恢复完整数据。
3. HDFS 中的纠删码工作原理
在 HDFS 中,纠删码替代了副本机制,用于冷数据或对存储成本敏感的场景。
举例说明:
-
传统 3 副本存储:100MB 数据需要 300MB 存储空间。
-
使用 RS(6,3) 纠删码:
-
k=6个数据块 +m=3个校验块 = 9 个块。 -
存储开销 = 100MB × (9/6) = 150MB。
-
存储利用率提升一倍!
-
工作流程:
-
Client 写入数据 → HDFS 把数据切分为多个块。
-
通过 Reed-Solomon 编码生成校验块。
-
数据块与校验块被分散存放在不同 DataNode 上。
-
读取时,如果某些块丢失,系统自动重建缺失部分。
4. HDFS 纠删码 vs 副本机制
| 特性 | 副本机制 | 纠删码(EC) |
|---|---|---|
| 容错方式 | 多副本存储 | 编码 + 校验块恢复 |
| 存储开销 | 高(3 副本约 300%) | 低(如 RS(6,3) 约 150%) |
| 读写性能 | 高,直接读副本 | 写入 & 读取较慢,需要编码/解码 |
| 恢复速度 | 快(直接复制副本) | 较慢(需计算恢复数据) |
| 适用场景 | 热数据,频繁访问 | 冷数据,大规模存储 |
总结:EC 更适合存储冷数据,副本机制更适合热数据。
5. HDFS 中的 EC 策略与应用场景
在 Hadoop 3.x 中,可以通过 Erasure Coding Policy 配置 EC。
常见的 EC 策略:
-
RS(3,2):3 数据块 + 2 校验块,容错 2 个块。
-
RS(6,3):6 数据块 + 3 校验块,存储效率与容错性较平衡。
-
RS(10,4):10 数据块 + 4 校验块,适合超大规模冷数据归档。
应用场景:
-
大数据冷存储(日志归档、历史数据、备份)。
-
云存储系统(对象存储、数据湖)。
-
成本敏感型企业数据仓库。
6. HDFS 纠删码的优缺点
优点:
-
大幅降低存储开销(50% 甚至更高节省)。
-
同样具备容错能力(最多可容忍 m 个块丢失)。
-
分布式场景下灵活性强。
缺点:
-
计算复杂度高(需要编码/解码)。
-
恢复速度慢(读取缺失数据需重建)。
-
对 CPU/网络带宽有额外消耗。
7. 总结
HDFS 的 纠删码(Erasure Coding)技术 是 Hadoop 3.x 引入的一项关键特性,用于替代传统的副本机制,解决存储利用率低的问题。
-
副本机制:适合热数据,读写快但成本高。
-
纠删码机制:适合冷数据,存储成本低但恢复慢。
一句话总结:
纠删码是 HDFS 在大规模冷数据场景下的一种更经济高效的数据冗余容错技术。

8396

被折叠的 条评论
为什么被折叠?



