集群间hive数据表的迁移

集群间hive数据表的迁移


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

  1. 在原集群hive上查看迁移表的建表语句及所在库,然后在新集群hive上建库建表;
show create table tb_name;

create database db_name;
create table tb_name .....
  1. 原集群下载文件系统文件到本地;
 hadoop fs  -get /user/hive/warehouse/dc_ods.db/tb_name /home/zhang.xl/tb_name;
  1. 如果文件过大则压缩,再发送到新集群(若两集群网络互通则使用scp拷贝过去,不互通下载到本地再上传到新集群);
tar -czvf tb_name.tar.gz tb_name

scp -p端口 tb_name.tar.gz  用户@ip:目标目录 
  1. 新集群解压文件,数据导入到新集群文件系统中;
tar -xf tb_name.tar.gz

hadoop fs  -put /home/zhang.xl/tb_name/* /user/hive/warehouse/dc_ods.db/tb_name ;
  1. 新集群使用beeline进入hive,修复分区表,执行后自动退出hive客户端;
beeline -u " jdbc:hive2://10.9.xx.xx:10000 name pwd"  -e "msck repair table tb_name;"
  1. 刷新impala元数据,执行后自动退出impala客户端;
impala-shell -i 10.9.xx.xx:21001 -q 'INVALIDATE METADATA tb_name';
  1. 检查是否迁移成功;
impala-shell -i 10.9.xx.xx:21001 -q 'select count(*) from tb_name';

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

  1. 原集群将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;
  1. 下载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
  1. 压缩下载到本地的文件并上传到新集群
hadoop -put /zxl_local/* /zxl2

4.将文件导入新集群hive里

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

5.检查hive是否迁移成功;

beeline -u " jdbc:hive2://10.9.xx.xx:10000 name pwd"  -e "select count(*) from dc_ods.tb_name1;"

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

sudo -u hue impala-shell -i 10.9.xx.xx:21001 -q 'INVALIDATE METADATA dc_ods. tb_name1';
sudo -u hue impala-shell -i 10.9.xx.xx:21001 -q 'select count(*) from  dc_ods. tb_name1';

Shylin

猜你喜欢

转载自blog.csdn.net/Shyllin/article/details/88663184