hdfs 跨集群数据迁移

背景

测试环境数据缺失,需从开发环境同步数据过去,考虑采用Hadoop自带的数据迁移工具

分析

迁移数据评估

开发环境数据比较杂乱,不是所有数据都需要迁移,且全部迁移即浪费时间,又没有价值,根据时间情况按库(甚至按表)进行迁移

迁移工具

使用Hadoop自带数据迁移工具Distcp,只需要简单的命令即可完成数据迁移。

hadoop distcp hdfs://nn1:8020/dir1 hdfs://nn2:8020/dir2

如果dir2目录不存在,按照dir1的目录创建
如果dir2目录存在,则在dir2目录下创建dir1的目录,即变为dir2/dir1,也可以通过指定 -overwrite强制覆盖,来保持dir1与dir2一致

Distcp的本质是一个MapReduce任务,只有Map阶段,没有Reduce阶段,具备分布式执行的特性。在Map任务中从老集群读取数据,然后写入新集群,以此来完成数据迁移。

该命令在任一集群运行即可,如果在新集群上执行就向新集群的Yarn申请资源,老集群只有数据读取和网络传输的消耗。

Distcp提供了 -m 参数来设置map任务的最大数量(默认20),以提高并发性。注意这里要结合最大网络传输速率来设置。

Distcp提供了-bandwidth 参数来控制单个Map任务的最大带宽,单位是MB。

Distcp提供了-p 参数来在新集群里保留状态(rbugpcaxt)(复制,块大小,用户,组,权限,校验和类型,ACL,XATTR,时间戳)。如果没有指定-p 参数,权限是执行MapReduce任务的用户权限,迁移完成以后需要手动执行chown命令变更。

Distcp在任务启动的时候就会将需要copy的文件列表从源HDFS读取出来。如果迁移期间新增了文件,新增的文件会被漏掉。删除文件会导致改文件copy失败,可以通过 -i参数忽略失败。

Distcp提供了-overwrite 参数来覆盖已存在的文件,-append参数将源HDFS文件的数据追加写入。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值