方式一:(此方法需要建库建表)

第一步:建库建表

在原集群hive上查看迁移表的建表语句及所在库,然后在新集群hive上建库建表;

show create table tb_name;

create database db_name;

create table tb_name .....

第二步:转移数据文件到新集群;

在旧集群中下载数据到本地

hadoop fs  -get /user/hive/warehouse/dc_ods.db/tb_name /home/zhang.xl/tb_name;

如果文件过大则压缩,再发送到新集群(若两集群网络互通则使用scp拷贝过去,不互通下载到本地再上传到新集群);

tar -czvf tb_name.tar.gz tb_name

scp -p端口 tb_name.tar.gz  用户@ip:目标目录

新集群解压文件,数据导入到新集群文件系统中;

tar -xf tb_name.tar.gz

hadoop fs  -put /home/zhang.xl/tb_name/* /user/hive/warehouse/dc_ods.db/tb_name ;

第三步:新集群中将数据导入hive

新集群使用beeline进入hive,修复分区表,执行后自动退出hive客户端;

beeline -u " jdbc:hive2://10.9.xx.xx:10000 name pwd"  -e "msck repair table tb_name;"

刷新impala元数据,执行后自动退出impala客户端;

impala-shell -i 10.9.xx.xx:21001 -q 'INVALIDATE METADATA tb_name';

第四步:检查数据是否导入成功

常用检查方式:

1、新旧数据对应求count,查看是否一致

2、选择一张表中数据字段,新旧数仓对应求sum,查看是否一致

3、选择一张表对多个字段做排序操作,新旧数仓导出数据使用excell对比查看是否一致

方式二:(此方法需要建库,不需要建表)

第一步:原集群将hive表导入到临时hdfs临时目录下,多条语句用逗号分隔并换行;

# export_hive.sql
export table dc_ods.tb_name1 to '/zxl/tb_name1';
export table dc_ods. tb_name2 to '/zxl/tb_name2';
# 执行命令
beeline -u " jdbc:hive2://10.9.xxx.xxx:10000 name pwd"  -f export_hive.sql;

第二步:下载hdfs临时目录下的文件到本地(本地目录要是一个空目录)

hadoop fs -get /zxl/*  /zxl_local
# 查看每个表对应的目录如下
drwxr-xr-x 2 root root   22 Mar 19 13:48 data
-rw-r--r-- 1 root root 5127 Mar 19 13:48 _metadata


如果文件过大则压缩,再发送到新集群(若两集群网络互通则使用scp拷贝过去,不互通下载到本地再上传到新集群);

第三步:上传到新集群,解压

hadoop -put /zxl_local/* /zxl2

第四步:将文件导入新集群hive里

# importal_hive.sql
import table dc_ods.tb_name1 from '/zxl2/tb_name1';
import table dc_ods. tb_name2 from '/zxl2/tb_name2';

Note:若要使用impala查询该表需要刷新元数据

第五步:检查数据是否导入成功

常用检查方式:

1、新旧数据对应求count,查看是否一致

2、选择一张表中数据字段,新旧数仓对应求sum,查看是否一致

3、选择一张表对多个字段做排序操作,新旧数仓导出数据使用excell对比查看是否一致