HDFS PB级数据无感迁移实践

本文介绍了在HDFS Federation Router模式下进行PB级数据无感迁移的挑战与实践经验,包括DistCp的内存问题、map任务失败、长尾任务、带宽限制和数据偏差等五个问题,并分享了解决方案,最终成功实现数据迁移,仅在最后阶段有短暂服务影响。
摘要由CSDN通过智能技术生成

前言


前面文章笔者介绍了比较多关于HDFS RBF如何来解决多集群协调管理的问题,RBF里的Router服务在里面扮演着一个很重要的角色。它能让众多的NN对于client来说完全透明,鉴于这一点,我们可以很好地依托Router服务来做到数据的无感迁移,从而间接达到平衡各个namespace RPC load的效果。本文笔者将要阐述的是我们如何在RBF模式下做到数据的无感迁移。

数据无感迁移的挑战


关于大体量数据的迁移,笔者在前年做过一次PB级规模的数据迁移实践(HDFS千万级别文件数/PB规模量级的数据迁移实战总结),不过这次随着集群数据规模的进一步扩张,需要迁移的数据体量也更加庞大。倘若同样沿用之前的做法的话,对于用户停服的时间影响(数小时的服务影响时间)是无法接受的。因此在这次的数据迁移任务中,对于迁移过程的“无感”要求是最高的,如何做到对于用户接近无感的数据迁移,这是我们最大的一个目标,数据迁移的体量还是控制在PB级别。

数据无感迁移实践


在明确完数据迁移的要求之后,我们在调研实践一种新的无感迁移的方案,最终我们采用了社区Federation balance tool(HDFS-15294)的工具方案。这个工具底层依赖的同样是Hadoop自带的DistCp方案。另外,这个工具方案也能很好的支持RBF模式。

我们采用此方案的一个最大的原因是它实现了我们之前考虑过的一种基于初始拷贝+多循环增量拷贝的数据迁移方案。采用这种方式对于用户的影响时间会降低到一个很小的可以接受的时间值,因为用户只会在最后一次增量数据的拷贝过程里才会受到影响(不能读写目标数据)。Fed balance tool的增量拷贝基于的原理是利用了DistCp现有的支持snapshot diff的增量拷贝功能来做的。

虽然Fed balance tool在实现上已经做到将数据迁移的影响做到最小,但是我们在实际的迁移过程里还是踩了不少的坑。这里笔者来一一分享里面的一些经验总结,里面大部分是fed balance job里面触发的DistCp的一些问题,以及还有一些别的HDFS的问题。

数据迁移的踩坑和填坑


问题1:DistCp build copy list阶段OutOfMemory问题


我们知道DistCp任务在拷贝数据前,会进行一个copy list build的过程,这个过程中它会启动线程向source NameNode查询需要拷贝的数据目录,然后把这些信息写出到一个.seq的文件里面。但是我们在实际任务的运行里,发现这个过程经常会出现内存不够导致OutOfMemory的情况,甚至于我们已经将DistCp的heap调大到几十GB这么一个很大的量级了,问题还是没有解决。

后来通过打了heap dump后,发现是DistCp这边写出.seq文件的速度比实际查询source NN的速度慢导致里面的worker队列堆积,从而导致内存被用光。因为这个.seq结果文件是写在HDFS上面的,偶尔会因为集群有慢DN导致写出变慢。后来我们在队列层面做了size的限制,如果本身queue size大于给定的一个阈值后,进行sleep等待,避免output queue里面积压大量的待写出的文件信息结果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值