Hadoop 3.x 时代,EC 露个脸呗!

在本文中,笔者将详细研究 HDFS EC(Erasure Coding,纠删码),讲解什么是 HDFS EC,引入 EC 的原因,用于 EC 的算法,以及在 Hadoop 社区中为 EC 做的架构优化,最后再结合 Hive 实战 HDFS EC。

HDFS 复制算法的问题

为了提供容错,HDFS 根据复制因子的大小在不同的 DataNodes 节点复制文件块数据。复制因子默认值为 3,则表明原始数据块有多余的两个副本,这些副本也消耗其他资源,例如网络带宽和存储。

在 N 个复制因子的复制中,存在 N-1 个容错能力,存储效率为 1/N。所以这种方式的复制增加了存储的开销和资源的浪费。对于 I/O 活动较低且很少访问的 cold 数据集和 warm 数据集的副本使用与原始数据集相同的资源。

为了解决这些问题,Hadoop 社区使用 HDFS Erasure Coding 代替默认的复制方式,以提供相同级别的容错能力,并且存储开销不超过 50%。

Erasure Coding 文件的复制因子始终为 1,无法对其进行更改。

HDFS Erasure Coding

在 Hadoop 3 中,Erasure Coding 是默认复制方式的解决方案。

Erasure Coding 本身是一种编码容错技术,其实在存储生态系统中,RAID 就使用了 Erasure Coding。RAID 通过 striping 实现 Erasure Coding,即将逻辑顺序的数据(例如文件)划分为较小的单元(bit、byte 或 block),并将连续的单元存储在不同的磁盘上

对于原始数据集的每个 strip,都会根据 Erasure Coding 算法来计算并存储一定数量的 parity cells,该过程称为编码。

可以基于剩余存活的数据和 parity cells 从计算中恢复任何 striping cell 中的错误,该过程称为解码。

因此,在 HDFS 中使用 Erasure Coding 可提高存储效率,同时提供与传统的基于复制的 HDFS 部署相同水平的容错能力和数据持久性。

例如:一个具有 6 个 blocks 的文件,复制因子为 3,将占用磁盘空间的 18 个 blocks。

如果使用 Erasure Coding,那么一个具有 6 个 blocks 的文件将仅占用磁盘空间的 9 个 blocks(6 data,3 parity)。

HDFS Erasure Coding 算法

HDFS Erasure Coding 使用 EC 算法来计算每个数据 block cell 的 parity。 

Erasure Coding 的支持不同的算法。

1. XOR 算法

它是一种基于 XOR(异或)运算的算法,提供了最简单的 EC 形式。XOR 操作是关联的,可从任意数量的数据 bits 中生成 1 个奇偶校验位(parity bit)。

例如,如果我们有 3 个数据单元,则使用 XOR 运算,我们可以计算奇偶校验位,比如 1 ⊕ 0 ⊕ 1 ⊕ 1 = 1。

如果任何数据位丢失,则通过对其余位和奇偶校验位进行异或来恢复。

XOR 算法对于任何数量的数据单元输入仅生成 1 个奇偶校验位,因此它只能容忍 1 个故障。

因此,对于像 HDFS 这样需要处理多个故障的系统来说,这是不够的。

XOR 算法中的容错能力为 1,存储效率为 75%。

2. Reed-Solomon Algorithm

Reed-Solomon(RS) 算法克服了 XOR 算法的限制,使用线性代数运算生成多个 parity cells,以便能够容忍多个失败。

RS 算法使用生成矩阵(GT,Generator Matrix)与 m 个数据单元相乘,以获得具有 m 个数据单元(data cells)和 n 个奇偶校验单元(parity cells)的 extended codewords。

如果存储失败,则只要 m+n cells 中的 m 个可用,就可以通过将生成器矩阵来恢复存储。

RS 中的容错能力最高为 n,即奇偶校验单元的数量和存储效率为 m / m + n,其中 m 为数据单元(data cells),n 为奇偶校验单元(parity cells)。

Hadoop Erasure Coding 架构

在 EC 的背景下,striping 具有几个关键优势:

  • 首先,它启用在在线 EC(立即以 EC 格式写入数据),避免了转换阶段并立即节省了存储空间。在线 EC 还增强了顺序 I/O 的性能。在具有高端网络的集群中,这尤其可以达到理想的性能。

  • 其次,它自然地将一个小文件分发到多个 DataNode,并且不需要将多个文件捆绑到单个 coding group 中,这极大地简化了文件操作,例如删除、配额报告以及联合名称空间之间的迁移。

为了支持 Erasure Coding,HDFS 体系架构进行了一些更改。

1. NameNode Extension

HDFS 中的文件被 striping 拆分为块组(block groups)。每个 block gro

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值