互联网技术 / 互联网资讯 · 2024年1月10日 0

Hadoop数据迁移的使用方法详解

一般用法 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

当指定-update或-OVeRwRITe时,源目录的内容将复制到目标,而不是源目录本身。

从而:

disTCP -update hdfs://nn1:8020/souRce/fiRst hdfs://nn1:8020/souRce/second hdfs://nn2:8020/taRget

上述命令将在/ taRget中生成以下内容:

hdfs://nn2:8020/taRget/1 hdfs://nn2:8020/taRget/2 hdfs://nn2:8020/taRget/10 hdfs://nn2:8020/taRget/20

如果设置了这两个选项,每个源目录的内容都会和目标目录的内容做比较。如果两个源文件夹都包含一个具有相同名称的文件(例如“0”),那么这两个源文件将在目的地映射到同一个目录:/taRget/0。DisTCP碰到这类冲突的情况会终止操作并退出。现在,请考虑以下复制操作:

disTCP hdfs://nn1:8020/souRce/fiRst hdfs://nn1:8020/souRce/second hdfs://nn2:8020/taRget

其中源路径/大小:

hdfs://nn1:8020/souRce/fiRst/1 32 hdfs://nn1:8020/souRce/fiRst/2 32 hdfs://nn1:8020/souRce/second/10 64 hdfs://nn1:8020/souRce/second/20 32

和目的路径/大小:

hdfs://nn2:8020/taRget/1 32 hdfs://nn2:8020/taRget/10 32 hdfs://nn2:8020/taRget/20 64

会产生:

hdfs://nn2:8020/taRget/1 32 hdfs://nn2:8020/taRget/2 32 hdfs://nn2:8020/taRget/10 64 hdfs://nn2:8020/taRget/20 32

文件“1”因为文件长度和内容匹配而被跳过。文件“2”被复制,因为它不存在/taRget中。因为目标文件内容与源文件内容不匹配,文件“10”和文件“20”被覆盖。如果使用-update 选项,文件“1”也被覆盖。

3 高效的性能

执行的分布式特性

高效的MR组件

Hive数据迁移

1.Hive数据expoRt到hdfs

expoRt table HM2.helpeR to ””/tMp/expoRt/HM2/helpeR””;

如下:

Hive> expoRt table HM2.helpeR to ””/tMp/expoRt/HM2/helpeR””; Copying data fRoM file:/app/data/Hive/tMp/scRatchdiR/ce4c15d9-6875-40ed-add4-deedd75a4a92/Hive_2018-10-26_10-58-21_552_8465737459112285307-1/-local-10000/_Metadata Copying file: file:/app/data/Hive/tMp/scRatchdiR/ce4c15d9-6875-40ed-add4-deedd75a4a92/Hive_2018-10-26_10-58-21_552_8465737459112285307-1/-local-10000/_Metadata Copying data fRoM hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-12/houR=13/MSGtype=helpeR Copying data fRoM hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-12/houR=14/MSGtype=helpeR Copying file: hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-12/houR=14/MSGtype=helpeR/paRt-M-00001 Copying file: hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-12/houR=14/MSGtype=helpeR/paRt-M-00003 Copying file: hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-12/houR=14/MSGtype=helpeR/paRt-M-00004 Copying file: hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-12/houR=14/MSGtype=helpeR/paRt-M-00005 Copying file: hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-12/houR=14/MSGtype=helpeR/paRt-M-00006 Copying file: hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-12/houR=14/MSGtype=helpeR/paRt-M-00007 Copying file: hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-12/houR=14/MSGtype=helpeR/paRt-M-00008 Copying file: hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-12/houR=14/MSGtype=helpeR/paRt-M-00009 Copying file: hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-12/houR=14/MSGtype=helpeR/paRt-M-00010 Copying file: hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-12/houR=14/MSGtype=helpeR/paRt-M-00011 Copying file: hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-12/houR=14/MSGtype=helpeR/paRt-M-00012 Copying file: hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-12/houR=14/MSGtype=helpeR/paRt-M-00013 Copying file: hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-12/houR=14/MSGtype=helpeR/paRt-M-00014 Copying file: hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-12/houR=14/MSGtype=helpeR/paRt-M-00015 Copying data fRoM hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-13/houR=13/MSGtype=helpeR Copying file: hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-13/houR=13/MSGtype=helpeR/paRt-M-00002 Copying data fRoM hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-13/houR=14/MSGtype=helpeR Copying file: hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-13/houR=14/MSGtype=helpeR/paRt-M-00000 Copying file: hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-13/houR=14/MSGtype=helpeR/paRt-M-00002 Copying file: hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-13/houR=14/MSGtype=helpeR/paRt-M-00006 Copying file: hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-13/houR=14/MSGtype=helpeR/paRt-M-00016 Copying data fRoM hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-22/houR=08/MSGtype=helpeR Copying file: hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-22/houR=08/MSGtype=helpeR/paRt-M-00006 Copying data fRoM hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-22/houR=09/MSGtype=helpeR Copying file: hdfs://naMeseR/Hive/waRehouse/HM2.db/helpeR/dt=2018-06-22/houR=09/MSGtype=helpeR/paRt-M-00000 OK TiMe taken: 1.52 seconds

2.集群间数据复制

需要保证原始集群目录有读权限,