迁移背景:
1、hive有30多个库,最大的库有100多张表,这中情况下必须采用 脚本式 迁移
2、2个hive版本不一致,元数据mysql表结构不一致,不能采用mysql数据库覆盖方式
3、hive数据仓库只迁移一部分,另外一部分后续迁移,不能采用mysql数据库覆盖方式
4. 2个集群暂时未开启权限认证
迁移流程:
1.apache集群导出元数据
#导出hive数据库test,脚本的grep -V为了去除导出脚本的警告语句 #/bin/bash database=test datalocalpath=/home/dip/test for tab in `hive -e "use $database;show tables" |grep -v WARN` do hive -e "show create table $database.$tab" |grep -V WARN > $datalocalpath/$tab.sql done
2.cdh集群导入元数据
注意,如果2个集群数据仓库存储目录不一致,需要修改导出的sql脚本 主要修改以下位置
LOCATION
'hdfs://nameservice/user/hive/warehouse/test.db/word'
新集群先建立数据库test
create database test;
test库导入数据
#/bin/bash datalocalpath=/home/dip/test for tab in `ls $datalocalpath` do hive -f $datalocalpath/$tab done
3.hdfs数据迁移(cdh的namenode端口8020)
hadoop distcp -update /hive/warehouse/test.db hdfs://198.2.120.31:8020/user/hive/warehouse/test.db/
4.修复表分区
for tab in `hive -e "use test;show tables" |grep -v WARN` ;do MSCK REPAIR TABLE test.$tab ;done
#这里的数据库只有一级分区,如果有多层分区参考
set hive.msck.path.validation=ignore;
MSCK REPAIR TABLE table_name;