最近需要做两个集群之间的数据迁移,这里记录一下DistCp用法。
1. 概述
DistCp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具。 它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成。
DistCp可以在千兆网络下实现TB/小时级别数据拷贝,对于大数据环境的迁移效率很高。
注意:需要源HDFS集群的/etc/hosts中添加目标HDFS集群的host。
2. 用法:
1. 常见用法
从旧集群 hdfs://hadoop-master:8020 迁移Hive到全新集群 hdfs://cdh-master:8020,在目标集群上运行:
注意:CDH环境HDFS端口是8020,Hadoop环境HDFS端口是9000
hadoop distcp src des
hadoop distcp hdfs://hadoop-master:8020/user/hive/* hdfs://cdh-master:8020/user/hive
2. 不同Hadoop版本之间迁移
两个集群之间的版本不同,使用hftp协议或者webhdfs协议。源集群的格式是 hftp://<dfs.http.address>/<path> ,默认dfs.http.address是 <namenode>:50070。
新的webhdfs协议代替了hftp后,源地址和目标地址都可以使用http协议webhdfs,可以完全兼容 。
hadoop distcp src des
# 实例
sudo -uhdfs hadoop distcp webhdfs://hadoop-master:50070/tmp/hive-export/ \
webhdfs://cdh-master:9870/tmp/hive-export/
3. 带参数:
hadoop distcp -skipcrccheck -update -m 500 -D dfs.checksum.type=CRC32 \
hdfs://hadoop-master:8020/user/hive/warehouse/cp_data.db/test \
hdfs://cdh-master:8020/data/hive/cp_data.db/