写点什么

紧急扩散!HDFS3.X 系列的 EC 纠删码策略有个安全隐患 HDFS-16420,极端情况下会造成数据丢失!

  • 2022 年 3 月 09 日
  • 本文字数:1225 字

    阅读完需:约 4 分钟

1. HDFS-16420 BUG 概述

HDFS3.X 的 EC 纠删码功能,近期被发现有个 BUG:该 BUG 会导致,以纠删码机制存放的目录和文件,在某些特殊情况下,会被系统误删,从而造成数据丢失。


目前 HADOOP 社区已经通过 HDFS-16420 在版本 3.4.0/3.2.3/ 3.3.2 中修复了该 BUG,Cloudera 针对该 BUG 也给出了详细的分析和修复建议:



2. HDFS-16420 BUG 原因

该 BUG 的根本原因是,当前 NameNode 在判断某些 block 块是否有多余 replica 副本,并进而删除这些多余的 replica 副本的算法逻辑有问题,会误删某些使用了纠删码策略的文件的 EC block 块。


比如在 NameNode 发生了 fail over 之后不久,就运行了 hdfs balancer 负载均衡操作, 或者 recommission 重新上线了原先退役的某些 datanodes 节点,都有可能会造成某些 EC block 在同一个 rack 机架上有多个副本,即 over-replicated。


此时由于上述 BUG,某些 EC BLOCK 的多余的副本和原始的副本,都有可能会被错误删除。


当然在大多数情况下,上述 BUG 并不会造成用户数据的丢失,因为 HDFS 能检测到 ec block 副本的丢失,并从 ec 剩余的 data block 和 parity block 重新构建生成丢失的 ec block 副本,以补全 block。


但是,如果短时间内,某个 ec block group 中的多个 ec block,都发生了上述被误删除的问题的话,HDFS 就无法从剩余的 ec block 重新构建补全丢失的 block 了, 比如 采用 RS(6,3) 纠删码策略时,如果短时间内 9 个 block 中的 4 个或 4 个以上的 block 都丢失了的话,就没有办法重新构建补全丢失的 block 了,就会造成用户数据的丢失,从而造成大的影响。

3. 受 HDFS-16420 BUG 影响的 HDFS 版本

  • 当前所有没有上线上述 HDFS-16420 修复代码的基于 hadoop 3.x 系列的 HDFS,都有此 BUG, 包括 CDH 6.1.x/6.2.x/6.3.x, HDP 3.1.x,CDP Private Cloud Base 7.1.x,等等;

  • 当然,如果客户使用了上述有问题的 HDFS 版本,但没有启用 EC 纠删码策略,则完全不会受此 BUG 影响;

  • 只有在使用了上述有问题的 HDFS 版本,且配置了某些目录使用 EC 纠删码策略时,才可能会受此 BUG 影响;

  • 用户可以使用以下 fsck 命令来检查,集群中是否配置某些目录使用了 EC 纠删码策略,并确认是否有些 EC file 有 missing blocks,从而判断,是否已经收到了上述 BUG 的影响,进而造成了用户数据的丢失,示例命令和输出如下:


hdfs fsck / -files | grep "erasure-coded: policy="/tmp/root/testfile.xml 583 bytes, erasure-coded: policy=RS-6-3-1024k, 1 block(s):  MISSING 1 blocks of total size 583 B
复制代码

4. HDFS-16420 BUG 修复方案

  • 如果使用的是商业版的大数据平台,可以咨询供应商如何修复,一般供应商会提供升级修复或 hot-fix 修复;

  • 如果使用的是开源的大数据平台,可以升级到已经修复了该 BUG 的版本,如:3.4.0/3.2.3/3.3.2;

  • 如果使用的是开源的大数据平台,且暂时不方便升级版本的话,可以 cherry-pick HDFS-16420 改动的源代码,并编译修复;

  • 最后强调下,如果集群中没有目录使用 EC 纠删码策略,则不会受到上述 BUG 影响。

发布于: 刚刚阅读数: 2
用户头像

Keep Striving! 2018.04.25 加入

明哥,十四年 IT经验,六年大数据经验; 做过大数据集群的搭建运维,大数据应用系统的开发优化,也做过大数据平台的技术选型以及架构咨询; 目前聚焦于泛大数据生态,包括数据仓库/数据湖,云计算和人工智能。

评论

发布
暂无评论
紧急扩散!HDFS3.X 系列的 EC 纠删码策略有个安全隐患 HDFS-16420,极端情况下会造成数据丢失!_hdfs_明哥的IT随笔_InfoQ写作平台