关注我,回复"资料",获取大数据资料
目录
一般用法
hive数据迁移
Export/Import方式
同步元数据
总结
数据迁移使用场景
冷热集群数据分类存储,详见上述描述.
集群数据整体搬迁.当公司的业务迅速的发展,导致当前的服务器数量资源出现临时紧张的时候,为了更高效的利用资源,会将原A机房数据整体迁移到B机房的,原因可能是B机房机器多,而且B机房本身开销较A机房成本低些等.
数据的准实时同步.数据的准实时同步与上一点的不同在于第二点可以一次性操作解决,而准实时同步需要定期同步,而且要做到周期内数据基本完全一致.数据准实时同步的目的在于数据的双备份可用,比如某天A集群突然宣告不允许再使用了,此时可以将线上使用集群直接切向B的同步集群,因为B集群实时同步A集群数据,拥有完全一致的真实数据和元数据信息,所以对于业务方使用而言是不会受到任何影响的.
hadoop 集群间拷贝数据:
需要将数据源集群的/etc/hosts中的hadoop节点拷贝到目标集群所有节点的/etc/hosts中,保证新集群所有节点可以ping同老集群所有节点;
hadoop distcp hdfs://qcloud-hadoop02:9000/hive/warehouse/hm2.db/helper/dt=2018-10-17 /data
说明:我们这里是apache hadoop 到cdh数据迁移,这个命令仍然是可以用的。
一般用法
1、迁移之前需要把两个集群的所有节点都互通/etc/hosts文件(重要,包括各个数据节点)
2、配置当前集群主节点到老集群各个节点的ssh免密登陆(可选)
3、由于老集群是HDP2.7.1,新集群是cdh5.8.5,版本不同,不能用hdfs协议直接拷贝,需要用http协议 即不能用:distcp hdfs://src:50070/foo /user
而要用:distcp hftp://src:50070/foo /user
最终的命令为:
hadoop distcp hftp://192.168.57.73:50070/hive3/20171008 /hive3/
4、如果两个集群的版本相同,则可以使用hdfs协议,命令如下:
hadoop distcp hdfs://namenodeip:9000/foo hdfs://namenodeip:9000/foo
5、由于迁移数据运行了mr任务,对集群资源有一定的消耗
DistCp优势特性
1 带宽限流
DistCp是支持带宽限流的,使用者可以通过命令参数bandwidth来为程序进行限流,原理类似于HDFS中数据Balance程序的限流.
2 增量数据同步
对于增量数据同步的需求,在DistCp中也得到了很好的实现.通过update,append和diff2个参数能很好的解决.官方的参数使用说明:
Update: Update target, copying only missing files or directories
Append: Reuse existing data in target files and append new data to them if possible.
Diff: Use snapshot diff report to identify the difference between source and target.
第一个参数,解决了新增文件目录的同步;第二参数,解决已存在文件的增量更新同步;第三个参数解决删除或重命名文件的同步.
这里需要额外解释一下diff的使用需要设置2个不同时间的snapshot进行对比,产生相应的DiffInfo.在获取快照文件的变化时,只会选择出DELETE和RENAME这2种类型的变化信息.
相同hadoop版本同步数据
hadoop distcp -skipcrccheck -update -m 20 hdfs://dchadoop002.dx:8020/user/dc/warehouse/test /user/dc/warehouse/test
不同hadoop版本同步数据
hadoop distcp -skipcrccheck -update -m 20 hftp://ns1/user/test /user/dc/test
参数:
-m 表示并发数
-skipcrccheck 跳过hdfs校验
-update 更新文件
理源路径的方式与默认值不同,有些细节需要注意。这里给出一些 -update和 -overwrite的例子。考虑从/source/first/ 和 /source/second/ 到 /target/的拷贝,源路径包括:
hdfs://nn1:8020/source/first/1
hdfs://nn1:8020/source/first/2
hdfs://nn1:8020/source/second/10
hdfs://nn1:8020/source/second/20
当不使用-update或-overwrite选项时,DistCp默认会在/target下创建/first和/second目录。因此将在/target之前先创建目录。
从而:
hadoop distcp hdfs://nn1:8020/source/first hdfs://nn1:8020/source/second hdfs://nn2:8020/target
上述命令将在/target中生成以下内容:
hdfs://nn2:8020/target/first/1
hdfs://nn2:8020/target/first/2
hdfs://nn2:8020/target/second/10
hdfs://nn2:8020/target/second/20