目的

HDFS 集群中经常配置的 3 个副本是很占用空间的 - HDFS中的默认 3x 复制方案在存储空间和其他资源(例如,网络带宽)上有  200% 的开销。但是,对于具有较低 I / O 活动的暖数据集和冷数据集,在正常操作期间很少访问其他块副本,但仍然消耗与第一个副本相同的资源。

因此,一种自然的改进是使用 Erasure Coding (EC) 来代替复制,它提供了相同级别的容错能力,但存储空间要小得多。在典型的 Erasure Coding (EC) 设置中,存储开销不超过50%。EC 文件的复制因子是无意义的。它总是 1,不能通过 -setrep 命令更改。

背景

在存储系统中,EC 最显著的用法是廉价磁盘冗余阵列(RAID)。RAID 通过条带实现 EC,条带将逻辑上顺序的数据(如文件)划分为更小的单元(如位、字节或块),并在不同的磁盘上存储连续的单元。在本指南的其余部分中,条带分布的单位被称为条带单元(或单元)。对于每条原始数据单元,计算并存储一定数量的奇偶校验单元,此过程称为编码。任何条带单元上的错误都可以通过基于存活数据和奇偶校验单元的解码计算来恢复。

将 EC 与 HDFS 集成可以提高存储效率,同时仍然提供与传统基于副本的 HDFS 部署类似的数据持久性。例如,一个具有6个块的 3x 复制文件将消耗6*3 = 18块磁盘空间。但是对于 EC (6 data, 3 parity)部署,它只会消耗9块磁盘空间。

架构

在电子商务的背景下,条带化具有几个关键的优势。首先,它启用了在线 EC(立即以 EC 格式写入数据),避免了转换阶段,并立即节省了存储空间。在线电子商务还提高了连续 I/O 性能,利用多个磁盘主轴并行;这在具有高端网络的集群中尤其可取。其次,它自然地将一个小文件分发到多个 datanode,并消除了将多个文件捆绑到单个编码组的需要。这极大地简化了文件操作,例如删除、配额报告和在联邦名称空间之间迁移。

在典型的 HDFS 集群中,小文件占总存储消耗的 3/4 以上。为了更好地支持小文件,在第一阶段的工作中,HDFS 支持带条带的 EC。将来,HDFS 还将支持连续的 EC 布局。

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

  • Client Extensions - 客户端读和写路径得到了增强,可以并行地处理一个块组中的多个内部块。在输出/写入路径上, DFSStripedOutputStream 管理一组数据流,每个 DataNode 都有一个数据流,用于存储当前块组中的一个内部块。流媒体大多是异步工作的。协调器负责对整个块组的操作,包括结束当前块组、分配新块组等等。在输入/读取路径上, DFSStripedInputStream 将请求的逻辑字节范围的数据转换为存储在 datanode 上的内部块。然后并行地发出读请求。如果失败,它会发出额外的读请求进行解码。

  • DataNode Extensions - DataNode 运行一个额外的 ErasureCodingWorker (ECWorker)任务,用于后台恢复失败的擦除代码块。失败的 EC 块由 NameNode 检测,然后由 NameNode 选择一个 DataNode 来执行恢复工作。恢复任务作为心跳响应传递。这个过程类似于在失败时重新复制已复制的块。重构有三个关键任务:

    • 1、从源节点读取数据:使用专用线程池并行地从源节点读取输入数据。基于 EC 策略,它将读请求调度到所有源目标,并且只读取用于重构的最小输入块数。

    • 2、解码数据并生成输出数据:从输入数据中解码出新的数据和奇偶校验块。所有丢失的数据和奇偶校验块一起被解码。

    • 3、将生成的数据块传输到目标节点:解码完成后,将恢复的数据块传输到目标 datanode。

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

    • 1、EC 模式:这包括 EC 组(如6+3)中的数据和奇偶校验块的数量,以及编解码器算法(如Reed-Solomon、XOR)。

    • 2、条带化大小:这决定了条带化读写的粒度,包括缓冲区大小和编码工作。

策略被命名为 codec-num 数据块 -num奇偶校验块-单元大小。目前支持5种内置策略:RS-3-2-1024k、RS-6-3-1024k、RS-10-4-1024k、RS-LEGACY-6-3-1024k、XOR-2-1-1024k。

还支持默认的复制方案。它只能在目录上设置,以强制目录采用 3x 复制方案,而不是继承其祖先的 EC 策略。该策略使 3x 复制方案目录与 EC 目录交叉成为可能。

始终启用复制。在所有 EC 策略中,RS(6,3)在默认情况下是启用的。

与 HDFS 存储策略类似,EC 策略是在目录上设置的。创建文件时,它继承最近的祖先目录的 EC 策略。

目录级的 EC 策略只影响在目录中创建的新文件。一旦创建了一个文件,就可以查询它的 EC 策略,但不能更改它。如果将 EC 文件重命名为具有不同 EC 策略的目录,则该文件将保留其现有 EC 策略。将文件转换为不同的 EC 策略需要重写其数据;通过复制文件(例如,通过 distcp)而不是重命名文件来实现这一点。

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

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

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

  3. policies: 这包括所有用户定义的 EC 策略,每个策略由模式 id 和分段单元格(cellsize)的大小组成。

一个名为 user_ec_policies.xml 的示例 EC 策略 XML 文件。模板位于 Hadoop conf 目录中,用户可以引用它。

  • Intel ISA-L Intel ISA-L 代表 Intel 智能存储加速库。ISA-L 是一个为存储应用程序设计的优化的底层函数的开源集合。它包括为英特尔 AVX 和 AVX2 指令集优化的快速块 Reed-Solomon 类型擦除代码。HDFS EC 可以利用 ISA-L 加速编码和解码计算。ISA-L 支持大多数主要的操作系统,包括 Linux 和 Windows。默认情况下没有启用 ISA-L。有关如何启用 ISA-L,请参阅下面的说明。

部署

集群和硬件配置

EC 在 CPU 和网络方面对集群提出了额外的要求。

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

EC 要求集群中的 DataNode 数量至少与配置的 EC 条带宽度相同。对于 EC 策略 RS(6,3),这意味着至少有 9个 datanode。

EC 文件也分布在机架上,以获得机架的容错能力。这意味着当读取和写入条带文件时,大多数操作都是 off-rack。因此,网络对分带宽非常重要。

对于机架容错,拥有足够的机架数量也很重要,这样,平均而言,每个机架拥有的块的数量不超过 EC 奇偶校验块的数量。计算这个的公式是(数据块+奇偶校验块)/奇偶校验块,向上舍入。对于 EC 策略 RS(6,3),这意味着最少3个机架(通过(6 + 3)/ 3 = 3计算),理想情况下是 9 个或更多机架来处理计划内和计划外停机。对于机架数量少于奇偶校验单元数量的集群,HDFS 不能维护机架的容错能力,但仍然会尝试跨多个节点传播带条文件,以保持节点级别的容错能力。由于这个原因,建议使用相同数量的 datanode 来设置机架。

配置 Keys

默认情况下,所有内置的 EC 策略都是禁用的,除了在默认情况下启用的 dfs.namenode.ec.system.default.policy 中定义的策略。集群管理员可以根据集群的大小和所需的容错属性,通过 hdfs ec [-enablePolicy -policy <policyName>] 命令启用一组策略。例如,对于有 9 个机架的集群,RS-10-4-1024k 这样的策略将不能保持机架级容错,而 RS-6-3-1024k 或 RS-3-2-1024k 可能更合适。如果管理员只关心节点级容错,只要集群中至少有14个 datanode, RS-10-4-1024k 仍然是合适的。

系统默认的 EC 策略可以通过' dfs.namenode.ec.system.default.policy '配置来配置。使用此配置,当“-setPolicy”命令中没有将策略名称作为参数传递时,将使用默认的 EC 策略。

默认情况下,“dfs.namenode.ec.system.default.policy”为“RS-6-3-1024k”。

Reed-Solomon 和 XOR 的编解码器实现可以使用以下客户机和 DataNode 配置键配置:io.erasurecode.codec.rs。默认 RS 编解码器的 rawcoders, io.erasureco.codec . RS -legacy。为遗留RS编解码器的 rawcoders, io.erasureco.codec .xor。XOR 编解码器的 rawcoders。用户也可以配置自定义的编解码器与配置键像:io.erasurecode.codec.self-defined-codec.rawcoders。这些键的值是带有回退机制的编码器名称列表。这些编解码器工厂将按照配置值指定的顺序加载,直到成功加载编解码器为止。默认的 RS 和 XOR 编解码器配置更喜欢本机实现,而不是纯 Java 实现。没有 rs 遗留的本地编解码器实现,因此默认是纯 Java 实现。所有这些编解码器都用纯 Java 实现。对于默认的 RS 编解码器,还有一个原生实现,它利用 Intel ISA-L 库来提高编解码器的性能。对于 XOR 编解码器,还支持利用 Intel ISA-L 库来提高编解码器性能的本地实现。请参阅“启用Intel ISA-L”一节以获得更多详细信息。RS Legacy 的缺省实现是纯 Java,缺省 RS 和 XOR 的缺省实现是使用 Intel ISA-L 库的本机实现。

DataNode 上的 EC 后台恢复工作也可以通过以下配置参数进行调整:

  1. dfs.datanode.ec.reconstruction.stripedread.timeout.millis - 条带读取的超时。默认值是5000毫秒。
  2. dfs.datanode.ec.reconstruction.stripedread.buffer.size - 阅读器服务的缓冲区大小。默认值为64KB。
  3. dfs.datanode.ec.reconstruction.threads - Datanode 用于后台重构工作的线程数。默认值是8个线程。
  4. dfs.datanode.ec.reconstruction.xmits.weight - EC 后台恢复任务中 xmits 的相对权重与复制块恢复的比较。默认值是0.5。它设置为 0 来禁用 EC 恢复任务的计算权重,即 EC 任务总是有 1 xmits。EC 恢复任务的 xmits 计算为读流数和写流数之间的最大值。例如,一个 EC 恢复任务需要从 6 个节点读取数据,向 2 个节点写入数据,那么它的 xmits max(6,2) * 0.5 = 3。复制文件的恢复任务总是计算为1 xmit。NameNode 利用 dfs. NameNode . copy .max-streams 减去合并了来自复制文件的xmits 和 EC 文件的 DataNode 上的 xmitsInProgress 总数,将恢复任务调度到该 DataNode。

启用 Intel ISA-L

默认 RS 编解码器的 HDFS 本机实现利用 Intel ISA-L 库来改进编码和解码计算。要启用和使用 Intel ISA-L,需要三个步骤。

  1. Build ISA-L library. 详细信息请参考官方网站“https://github.com/01org/isa-l/”。
  2. Build Hadoop with ISA-L support. 请参阅源代码(build .txt)中“Hadoop构建说明”中的“Intel iso - l构建选项”一节。
  3. Use -Dbundle. 复制 isal 的内容。将 lib 目录转换为最终的 tar 文件。使用 tar 文件部署 Hadoop。确保 iso - l 在 HDFS 客户机和 DataNode 上可用。

要验证 Hadoop 正确地检测到 ISA-L,请运行 Hadoop checknative 命令。

管理命令

HDFS 提供了一个 ec 子命令来执行与 EC 相关的管理命令。

  hdfs ec [generic options][-setPolicy -path <path> [-policy <policyName>] [-replicate]][-getPolicy -path <path>][-unsetPolicy -path <path>][-listPolicies][-addPolicies -policyFile <file>][-listCodecs][-enablePolicy -policy <policyName>][-disablePolicy -policy <policyName>][-help [cmd ...]]

下面是关于每个命令的详细信息。

  • [-setPolicy -path <path> [-policy <policyName>] [-replicate]]

    在指定路径上的目录上设置 EC 策略。

    path: HDFS 中的一个目录。这是一个强制参数。设置策略只影响新创建的文件,而不影响现有的文件。

    policyName: 用于此目录下文件的 EC 策略。如果设置了“dfs.namenode.ec.system.default.policy”配置,则可以省略此参数。该路径的 EC 策略将在配置中使用默认值设置。

    -replicate 对目录应用默认复制方案,强制该目录采用3x复制方案。

    -replicate 和 -policy <policyName> 是可选的参数。不能同时指定它们。

  • [-getPolicy -path <path>]

    获取指定路径上文件或目录的 EC 策略的详细信息。

  • [-unsetPolicy -path <path>]

    取消先前对目录上的 setPolicy 调用所设置的 EC 策略。如果该目录从一个祖先目录继承 EC 策略,则 unsetPolicy 为无操作。在没有显式策略集的目录上取消策略设置不会返回错误。

  • [-listPolicies]

    列出在 HDFS 中注册的所有(启用、禁用和删除)EC 策略。只有启用的策略适合与 setPolicy 命令一起使用。

  • [-addPolicies -policyFile <file>]

    添加用户定义的 EC 策略列表。请参考等/ hadoop / user_ec_policies.xml。示例策略文件的模板。最大单元格大小在属性' dfs.namenode.ec.policies.max.cellsize '中定义,默认值为 4MB。目前 HDFS 允许用户总共添加 64 个策略,添加的策略 ID在 64 到 127 之间。如果已经添加了 64 个策略,则添加策略将失败。

  • [-listCodecs]

    获取系统中支持的 EC 编解码器和编码器的列表。编码器是编解码器的一种实现。一个编解码器可以有不同的实现,因此不同的编码器。编解码器的编码器是列出在一个后退顺序。

  • [-removePolicy -policy <policyName>]

    删除用户定义的 EC 策略。

  • [-enablePolicy -policy <policyName>]

    启用 EC 策略。

  • [-disablePolicy -policy <policyName>]

    禁用 EC 策略。

局限

某些 HDFS 操作,例如。删除编码文件不支持 hflush、hsync、concat、setReplication、truncate和append,因为存在重大的技术挑战。

  • append() and truncate() on an erasure coded file will throw IOException.
  • concat() will throw IOException if files are mixed with different erasure coding policies or with replicated files.
  • setReplication() is no-op on erasure coded files.
  • hflush() and hsync() on DFSStripedOutputStream are no-op. Thus calling hflush() or hsync() on an erasure coded file can not guarantee data being persistent.

客户端可以使用 StreamCapabilities API 来查询 OutputStream 是否支持 hflush()和 hsync()。如果客户端希望通过 hflush()和 hsync()实现数据持久性,当前的补救方法是在一个非 EC 的目录中创建常规 3x 复制文件,或者使用 FSDataOutputStreamBuilder# replication () API 在一个 EC 的目录中创建 3x 复制文件。

HDFS 纠删码 EC相关推荐

  1. HDFS纠删码(Erasure Coding)

    目的 HDFS默认的3副本策略,在存储空间和其他比如网络带宽上有200%的开销,因而副本策略是昂贵的.但是对于具有相对较低I/O的冷热数据集,在正常操作期间很少访问其他副本块,但仍然消耗与第一个副本相 ...

  2. 全网最新最全的 HDFS 文件纠删码技术分析

    前言 本文隶属于专栏<1000个问题搞定大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技 ...

  3. Ceph 进阶系列(四):Ceph的纠删码特性 EC(Erasure Code)

    从GitHub上Clone Ceph项目,我是基于(ceph version 12.2.11 luminous 版本)的代码来分析的 一.EC(Erasure Code)是什么? Ceph的纠删码特性 ...

  4. 0460-HDFS纠删码的机架感知

    Fayson的github: https://github.com/fayson/cdhproject 推荐关注微信公众号:"Hadoop实操",ID:gh_c4c535955d0 ...

  5. Hadoop纠删码算法启用ISA-L加速库

    在前文HDFS纠删码(Erasure Coding)一文中提到,HDFS启用ISA-L存储加速库,有有助于提升HDFS纠删码的编码和解码效率. 版本说明如下: 软件 版本 Hadoop 3.1.0 i ...

  6. Hadoop hdfs副本存储和纠删码(Erasure Coding)存储优缺点

    The advantages and disadvantages of hadoop hdfs replicating storage and erasure coding storage. Hado ...

  7. 分布式系统下的纠删码技术(一) -- Erasure Code (EC)

    近几个月主要参与一个分布式存储系统的纠删码部分(用于数据容错),纠删码在学术界出现比较早,现在ceph,微软的存储系统,Hadoop 3.0等都用了EC.文章会分为多篇,主要将Erasure Code ...

  8. Hadoop3.0时代,怎么能不懂EC技术纠删码? 个推为你解读

    根据云存储服务商Backblaze发布的2021年硬盘"质量报告",现有存储硬件设备的可靠性无法完全保证,我们需要在软件层面通过一些机制来实现可靠存储.一个分布式软件的常用设计原则 ...

  9. Erasure Code - EC纠删码原理

    Erasure Code - EC纠删码原理 查看全文 http://www.taodudu.cc/news/show-3010091.html 相关文章: 楞严咒全文正确注音版_楞严咒全文注音 积分 ...

  10. 关于多副本和纠删码(二)--EC(纠删码)原理

    文章目录 一.Erasure Coding(纠删码)和Raid比较 二.Erasure Coding(纠删码)介绍 2.1正常场景时EC读写原理 2.2故障场景时EC读写原理 2.3EC冗余配比 一. ...

最新文章

  1. DMB DSB ISB 简介
  2. WCF生成客户端对象方式解析
  3. Boost:使用 type <>语法测试功能
  4. rem是如何实现自适应布局的?
  5. 打工人的健康修炼记:2021卷里求生(附报告下载)
  6. 百亿级日访问量的应用如何做缓存架构设计?
  7. ie登录显示登录到ftp服务器,用IE登录FTP服务器怎么消除记住的密码
  8. 三思笔记专区,即将闪亮登场
  9. matlab中样条插值,样条插值的MATLAB实现
  10. 回顾计算机主板中南北桥的作用
  11. 【二〇二一·立春】读书笔记
  12. openbci/bciduino脑电放大器lsl数据解释
  13. MFC软件欢迎界面(基于对话框,VS2013)
  14. 关于人像后期处理基础的相关技术步骤
  15. 万字长文!深度剖析《数据安全法》下多方数据协同应用和隐私计算发展趋势
  16. ORACLE exp时出现1455错误,全网唯一正解,建议收藏
  17. windows下如何配置AWS进行深度学习
  18. 第15讲:Python列表对象的反转与排序
  19. Java用正则表达式验证用户输入的手机号和QQ邮箱
  20. 计算机专业能评电子工程师吗,电子工程师评审条件早知道!

热门文章

  1. C#中的String编码转换 BIG5 转换 GB2312
  2. 当AI邂逅电能:与图知科技一起探索工业AI王座|白洞战报
  3. excel学习-自定义图表颜色(QQ截图+colorpix取色器)
  4. android word文档预览(支持doc/docx两种格式)
  5. 运维 之 常用运维工具
  6. Qt之QThread介绍(常用接口及实现、自动释放内存、关闭窗口时停止线程运行、同步互斥)
  7. selenium 清空缓存
  8. 中国计算机省份排名,2019中国省份经济排行_中国各省份经济排名
  9. AI(人工智能)的英文全称是什么?AI指什么?包含什么?
  10. QT线程创建的两种方法