方式一:(此方法需要建库建表)
第一步:建库建表
在原集群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对比查看是否一致