写点什么

详解 HDFS3.x 新特性 - 纠删码

发布于: 2021 年 01 月 15 日
详解HDFS3.x新特性-纠删码

EC 介绍

Erasure Coding 简称 EC,中文名:纠删码

EC(纠删码)是一种编码技术,在 HDFS 之前,这种编码技术在廉价磁盘冗余阵列(RAID)中应用最广泛(RAID 介绍:大数据预备知识-存储磁盘、磁盘冗余阵列RAID介绍),RAID 通过条带化技术实现 EC,条带化技术就是一种自动将 I/O 的负载均衡到多个物理磁盘上的技术,原理就是将一块连续的数据分成很多小部分并把他们分别存储到不同磁盘上去,这就能使多个进程同时访问数据的多个不同部分而不会造成磁盘冲突(当多个进程同时访问一个磁盘时,可能会出现磁盘冲突),而且在需要对这种数据进行顺序访问的时候可以获得最大程度上的 I/O 并行能力,从而获得非常好的性能。在 HDFS 中,把连续的数据分成很多的小部分称为条带化单元,对于原始数据单元的每个条带单元,都会计算并存储一定数量的奇偶检验单元,计算的过程称为编码,可以通过基于剩余数据和奇偶校验单元的解码计算来恢复任何条带化单元上的错误

HDFS 数据冗余存储策略

HDFS 的存储策略是副本机制,这种存储方式使得数据存储的安全性得到提高,但同时也带来了额外的开销,HDFS 默认的 3 副本方案在存储空间和其他资源(如网络带宽)上有 200%的额外开销,但是对于 I/O 活动相对较低的数据,在正常期间很少访问其他块副本,但是仍然消耗与第一个副本相同的资源量。因此,HDFS 3.x 版本一个重大改进就是使用纠删码(EC)代替副本机制,纠删码技术提供了与副本机制相同的容错能力,而存储空间却少得多。在典型的纠删码(EC)设置中,存储开销不超过 50%。

EC 算法实现原理

EC 的实现算法有很多种,较为常见的一种算法是 Reed-Solomon(RS),它有两个参数,记为 RS(k,m),k 表示数据块,m 表示校验块,有多少个校验块就最多可容忍多少个块(包括数据块和校验块)丢失,具体原理通过如下例子解释:

我们使用 RS(3,2),表示使用 3 个原始数据块,2 个校验块

例:有 7、8、9 三个原始数据,通过矩阵乘法,计算出来两个校验数据 50、122。这时原始数据加上校验数据,一共五个数据:7、8、9、50、122,可以任意丢两个,然后通过算法进行恢复

矩阵乘法

矩阵乘法

GT 是生成矩阵,RS(k,m)的生成矩阵就是 m 行 k 列的矩阵

Data 代表原始数据,7,8,9 代表原始数据块

Parity 代表校验数据,50,122 代表校验数据块

所以 3 个原始数据块,如果使用 2 个校验块,EC 编码总共占用 5 个数据块的磁盘空间,与 2 副本机制占用 6 个数据块的磁盘空间容错能力相当。

EC 的应用场景

将 EC 技术集成进 HDFS 可以提高存储效率,同时仍提供与传统的基于副本的 HDFS 部署类似的数据持久性。例如,一个具有 6 个块的 3 副本文件将消耗 6 * 3 = 18 个磁盘空间。但是,使用 EC(6 个数据,3 个校验)部署时,它将仅消耗 9 个磁盘空间块。

但是 EC 在编码过程及数据重建期间会大量的使用 CPU 资源,并且数据大部分是执行远程读取,所以还会有大量的网络开销。

所以,对于 CPU 资源紧张且存储成本较低的情况下,可以采用副本机制存储数据,对于 CPU 资源有剩余且存储成本较高的情况下,可以采用 EC 机制存储数据

EC 在 HDFS 的架构

HDFS 是直接使用 Online EC(以 EC 格式写入数据),避免了转换阶段并节省了存储空间。Online EC 还通过并行利用多个磁盘主轴来增强顺序 I / O 性能。在具有高端网络的群集中,这尤其理想。其次,它自然地将一个小文件分发到多个 DataNode,而无需将多个文件捆绑到一个编码组中。这极大地简化了文件操作,例如删除,磁盘配额以及 namespaces 之间的迁移。

在一般 HDFS 集群中,小文件可占总存储消耗的 3/4 以上,为了更好的支持小文件,HDFS 在第一阶段支持条形布局(Striping Layout)的 EC 方案,目前 HDFS 连续布局(Contiguous Layout)方案也在进行中

条形布局:

条形布局

条形布局

优点:

  • 客户端缓存数据较少

  • 无论文件大小都适用

缺点:

  • 会影响一些位置敏感任务的性能,因为原先在一个节点上的块被分散到了多个不同的节点上

  • 和多副本存储策略转换比较麻烦

连续布局:

连续布局

连续布局

优点:

  • 容易实现

  • 方便和多副本存储策略进行转换

缺点:

  • 需要客户端缓存足够的数据块

  • 不适合存储小文件

传统模式下 HDFS 中文件的基本构成单位是 block,而 EC 模式下文件的基本构成单位是 block group。以 RS(3,2)为例,每个 block group 包含 3 个数据块,2 个校验块。

HDFS 对于引入 EC 模式所做的主要扩展如下

  • NameNode:HDFS 文件在逻辑上由 block group 组成,每个 block group 包含一定数量的内部块,为了减少这些内部块对 NameNode 内存消耗,HDFS 引入了新的分层块命名协议。可以从其任何内部块的 ID 推断出 block group 的 ID。这允许在块组而不是块的级别进行管理

  • Client:客户端读取和写入路径得到了增强,可以并行处理 block group 中的多个内部块

  • DataNode:DataNode 运行额外 ErasureCodingWorker(ECWorker)任务,用于对失败的纠删编码块进行后台恢复。NameNode 检测到失败的 EC 块, 会选择一个 DataNode 进行恢复工作。此过程类似于失败时如何重新恢复副本的块。重建执行三个关键的任务节点:

  • 纠删码策略:为了适应异构的工作负载,HDFS 群集中的文件和目录允许具有不同的复制和纠删码策略。纠删码策略封装了如何对文件进行编码/解码。每个策略由以下信息定义:

我们可以通过 XML 文件定义自己的 EC 策略,该文件必须包含以下三个部分:

  1. layoutversion:这表示 EC 策略 XML 文件格式的版本。

  2. schemas:这包括所有用户定义的 EC 模式。

  3. policies:这包括所有用户定义的 EC 策略,每个策略均由 schema id 和条带化单元的大小(cellsize)组成。

Hadoop conf 目录中有一个配置 EC 策略的 XML 示例文件,配置时可以参考该文件,文件名称为 user_ec_policies.xml.template。

集群的硬件配置

纠删码对群集在 CPU 和网络方面提出了其他要求:

  1. 编码和解码工作会消耗 HDFS 客户端和 DataNode 上的额外 CPU。

  2. 纠删码文件也分布在整个机架上,以实现机架容错。这意味着在读写条带化文件时,大多数操作都是在机架上进行的。因此,网络二等分带宽非常重要。

  3. 对于机架容错,拥有至少与配置的 EC 条带宽度一样多的机架也很重要。对于 EC 策略 RS(6,3),这意味着最少要有 9 个机架,理想情况下是 10 或 11 个机架,以处理计划内和计划外的中断。对于机架少于条带宽度的群集,HDFS 无法保持机架容错,但仍将尝试在多个节点之间分布条带化文件以保留节点级容错。

最后

在 HDFS 默认情况下,所有的 EC 策略是被禁止的,我们可以根据群集的大小和所需的容错属性,通过 hdfs ec [-enablePolicy -policy]命令启用 EC 策略。例如,对于具有 9 个机架的群集,像 RS-10-4-1024k 这样的策略将不会保留机架级的容错能力,而 RS-6-3-1024k 或 RS-3-2-1024k 可能更合适。

在副本机制下,我们可以设置副本因子,指定副本的数量,但是在 EC 策略下,指定副本因子是没有意义的,因为它始终为 1,无法通过相关命令进行更改。

搜索公众号“五分钟学大数据”,深入钻研大数据技术


发布于: 2021 年 01 月 15 日阅读数: 19
用户头像

公众号:五分钟学大数据 2020.11.10 加入

大数据领域原创技术号,专注于大数据技术

评论

发布
暂无评论
详解HDFS3.x新特性-纠删码