HDFS集群数据迁移方案-distcp
1. 原理
distcp原理是在Hadoop集群中使用MapReduce分布式拷贝数据。
2. 资源消耗
- 源集群有只有数据读取和网络传输的消耗
- 目的集群需要执行MapReduce任务,并且有数据写入的消耗(3副本需要有3倍的写入)
3. 兼容性
- 同版本集群拷贝(或者协议兼容版本之间的拷贝)使用HDFS协议
hadoop distcp hdfs://src-name-node:3333/user/src/dir hdfs://dst-name-node:4444/user/dst/dir
- 不同版本集群拷贝(比如1.x到2.x)使用hftp协议或者webhdfs协议,都是使用hdfs的HTTP端口:
hadoop distcp hftp://src-name-node:80/user/src/dir hftp://dst-name-node:80/user/dst/dir
hadoop distcp webhdfs://src-name-node:80/user/src/dir webhdfs://dst-name-node:80/user/dst/dir
4. 迁移速度
- distcp吞吐很大,理论上来说受限于网络带宽以及目标集群的写性能
- distcp可以配置Mapper数量,以及限制Mapper的带宽(通过
-bandwidth
参数控制迁移速度) - 测试数据:6个小时完成120TB数据迁移
5. 数据一致性
- 支持CRC校验,可以通过-skipcrccheck参数来跳过校验来性能
- 可以通过
-overwrite
参数来覆盖已存在的文件,不设置该参数,默认跳过重复的文件 - 设置
-update
,如果源和目标的大小,块大小或校验和不同,则覆盖 - 支持大文件的断点续传,通过设置
-append
参数
6. 其他优化方式
- 关闭目标集群占用io操作的服务,比如:balancer等
- 写成功2副本即返回
- 等
6. reference
杭研这边的测试结果:
http://doc.hz.netease.com/pages/viewpage.action?pageId=179606369
官方文档:
https://s0hadoop0apache0org.icopy.site/docs/stable/hadoop-distcp/DistCp.html
https://hadoop.apache.org/docs/current/hadoop-distcp/DistCp.html
问题定位:
http://zhang-jc.github.io/2017/10/19/Hadoop-distcp-%E6%95%B0%E6%8D%AE%E5%90%8C%E6%AD%A5/
distcp的速度:
https://developer.ibm.com/hadoop/2016/02/05/fast-can-data-transferred-hadoop-clusters-using-distcp/
https://blog.csdn.net/weichanhua/article/details/92746057