HDFS EC在滴滴的实践
桔妹导读:HDFS中默认的3副本方案在存储空间和其他资源(例如网络带宽)上有200%的开销。对于冷数据,使用纠删码(ErasureCoding,EC)存储代替副本存储是一种非常不错的替代方案。EC存储在保证容错能力不低于副本存储的同时,有着更低的存储空间消耗。HDFS EC在滴滴内部稳定落地已超过半年,为公司节约了大量的存储成本。本文将介绍EC在滴滴内部的实践情况。
▍1. EC算法
XOR Codes
Reed-Solomon Codes
▍2.HDFS EC块布局
先回顾一下3副本存储的连续存储方式(Contiguous Block Layout),3副本存储以块(Block)为单位,会将数据连续写入Block中,直至达到该Block大小(如128M)再去申请下一个Block,每个Block会有3个相同数据的副本存于3个DataNode(DN)上。连续存储示意图如图2(a)所示。HDFS EC采用条带条带式存储布局(Striping Block Layout)。条带式存储是以块组(BlockGroup)为单位,横向式地将数据保存在各个Block上,同一个Block上的不同分段的数据是不连续的。写完一个块组再申请下一个块组。条带式的存储结构图2(b)所示(图示为RS(6,3)策略下1个BlockGroup布局示意图)。
图2(a) 3副本存储示意图
图2(b) EC存储示意图
▍1. EC落地工作
为了将EC存储引入生产环境,我们做了如下的定制和优化。
升级NameNode与DataNode到3.2版本
定制Hadoop2兼容EC读写客户端
自研转EC系统
定制distcp工具。在将副本文件转EC文件后,必须要保证数据一致性。这就要求复制的源和目标文件checksum必须相同。由于存储方式不同,使用传统的CRC校验方式不能适用于副本文件和EC文件的校准。因此,定制版本将Hadoop3中的COMPOSITE_CRC校验方式(HDFS-13056)引入到Hadoop2的distcp中供内部使用。
自研转EC系统(Anty系统)用于周期性(或手动)执行转EC作业,以及统计集群EC文件存储量、占比等信息。具体介绍见后文的实践场景部分。
定制离线计算物理空间工具
第一个块的cell写满了,则校验块cell大小也写满
第一个块的cell只写了k (k<cellSize) 字节,则每个校验块也是k字节
图3 最后一个strip cell写满情况示意图
FastCopy支持EC文件的改进
表1 EC策略特性对比
图5 转EC文件数据源
转EC存储流程如下(自研Anty系统将自动化完成所有过程):
周期性地(每天)从fsimage表中计算出需要转EC的叶子目录
每个目录的转EC、替换原文件操作记为一次pipeline。多个pipeline并行操作进行转EC
每个目录的转EC状态记为该目录的生命周期lifecycle,生命周期有变化时更新到mysql,用于前端页面对转EC情况的展示
整个转EC流程如图6所示。
图6 转EC流程图
通过数据资产平台每天的定时分析,获得01机房核心增量数据
自研的Anty系统将增量核心数据通过定制的distcp写到02机房存储为EC文件
图7 核心数据跨机房备份流程示意图
▍3.遇到的问题及解决办法
写EC文件客户端hang住问题
DN下线失败问题
DN重构EC块有脏数据问题
Standby内存泄露问题
图8 standby PendingDataNodeMessages内存泄露示意图
参考文献:
[1] https://issues.apache.org/jira/browse/HDFS-7285
▬
团队招聘
▬
滴滴大数据架构部主要负责滴滴大数据存储与计算等引擎的开发与运维工作,通过持续应用和研发新一代大数据技术,构建稳定可靠、高性能、低成本的大数据基础设施,更多赋能业务,创造更多价值。
团队近期招聘:
Flink/ClickHouse/ElasticSearch/HDFS/Presto/融合计算等领域专家,参与滴滴大数据建设工作,欢迎加入。可
投递简历至
[email protected]。
扫码了解更多岗位
内容编辑 | Sherry
联系我们 | [email protected]