hive库历史数据迁移

Hive的元数据迁移

从Mysql导出完整的hive元数据

最简单的方式:从Mysql导出完整的hive元数据。然后把语句在新环境运行。能最大限度的保证hive元数据的完整性,也是最省时间的一种方法。但条件是:1.要保证原环境和新环境的HDFS路径一致,不一致的话需要修改元数据的路径与新环境的路径相同。2.迁移的时候要保证新环境的hive是空的,不然运行时有可能会影响其他的数据,有风险。

用shell脚本导出元数据

这个方案使用show create table获取创建table的sql语句,然后在新集群的hive上面执行对应的语句。可执行下面的shell脚本批量获取语句:

#!/bin/bash
################################
#脚本功能:从旧环境导出元数据语句
#脚本参数:database_array tablename_path createtable_path                                                       
#功能实现:将数据表的建表语句打印,形成sql文件                                                               
#示    例: sh export_matedata.sh "ods dwd dws" /data/tablename /data/createtable
################################################################################
database_array=$1
tablename_path=$2
createtable_path=$3
for database in ${database_array[@]}
do
#echo $database
hive -e "use $database;show tables;" >$tablename_path/$database.txt
#不需要去掉首行
#sed -i '1d' /data/zyfiles/hivedata/$database.txt
done
for database in ${database_array[@]}
do
cat $tablename_path/$database.txt |while read line
do
hive -e "use $database;show create table $line;" | sed '$ a;'>>$createtable_path/createtable_$database.sql
#如果需要去掉首行,加上下面的语句
# | sed '1d'
echo "use $database;show create table $line"
done
done
#状态
if [ $? -ne 0 ]
then
echo "[ERROR][`date +"%Y-%m-%d %H:%M:%S"`] Failed export hive metadata."
exit 1;
fi
#结束
echo "[INFO][`date +"%Y-%m-%d %H:%M:%S"`] Successfully export hive metadata."
exit 0;

此脚本执行可获取sql执行,运行截图示例如下:
!](https://img-blog.csdnimg.cn/66bdfdd0677b4c5b969a1111a43b0035.png)
在这里插入图片描述
下一步:将获取到的createtable_KaTeX parse error: Expected group after '_' at position 36: …。在获取createtable_̲database.sql之后,要将文件里的LOCATION修改为新环境的HDFS地址。
注意:在执行获取到的ddl文件前注意,对应的database需要先创建出来,然后在新集群上面执行下面的语句。
新集群运行示例:
创建对应的database
例:hive -e ‘create database KaTeX parse error: Expected group after '_' at position 43: … -f createtable_̲database.sql
待脚本都运行成功之后,元数据迁移完成。

第二步:hdfs数据文件迁移

对于数据的迁移,可以用hadoop distcp命令进行文件夹的迁移。但前提是保证两个集群网络是连通的状态。CDH版本保持一致。
可用下面的语句:

例:hadoop distcp -updata hdfs://cdh01:8020/user/hive/warehouse/ hdfs://cdh02:8020/user/hive/warehouse/

如果两个环境的CDH有版本差异,低版本向高版本迁移的话,可以加上参数-skipcrccheck:

例:hadoop distcp -skipcrccheck -updata hdfs://cdh01:8020/user/hive/warehouse/ hdfs://cdh02:8020/user/hive/warehouse/

如果环境有Kerberos认证,需要加上参数-D ipc.client.fallback-to-simple-auth-allowed=true:

例:hadoop distcp -D ipc.client.fallback-to-simple-auth-allowed=true -update hdfs://cdh01:8020/user/hive/warehouse/ hdfs://cdh02:8020/user/hive/warehouse/

例如,对某个库进行迁移,执行命令如下:

hadoop distcp -updata hdfs://cdh01:8020/user/hive/warehouse/test.db 	hdfs://cdh02:8020/user/hive/warehouse/test.db

运行时会形成一个MR任务,成功结果如图:
在这里插入图片描述
1.参数说明:
cdh01是源环境地址,cdh02是目标环境地址
-updata:迁完元数据,会在新环境中存在空的文件目录,-updata可以将空的文件目录替换掉。-updata会对比两个同名目录,如果有差异,就会更新。
-skipcrccheck:省略crc检查,如果CDH版本一样,可以不加。CDH版本不一致,需要加上。
-D ipc.client.fallback-to-simple-auth-allowed=true:环境有Kerberos认证,运行hadoop distcp会报出客户端配置了安全连接, 但是服务器请求回退到非安全的SIMPLE模式的错误。加上-D ipc.client.fallback-to-simple-auth-allowed=true可以解决。
2.语句运行成功后,查看hdfs是否已经有了迁移的数据文件。如果已经有了,数据迁移完成。
注意:如果两个环境网络不互通,就需要将数据文件先迁出到本地,然后上传到新环境的HDFS相应的目录下。
参考步骤如下:
先将源环境的HDFS数据文件导出到本地命令:
hdfs dfs -get /user/hive/warehouse/test.db /data/warehouse/
然后将数据文件拷贝到新环境的目录下。
将新环境的目录下的数据文件上传到新环境HDFS的相应目录下:
hdfs dfs -put /data/warehouse/test.db /user/hive/warehouse/

第三步:元数据与数据文件关联

因为元数据和数据文件是分开迁移的,需要msck命令将表和数据关联起来,可用下面的脚本完成关联:

#!/bin/bash
################################
#脚本功能:将元数据和数据文件关联
#脚本参数:database_array                                                    
#功能实现:将元数据和数据文件关联,行成完成的hive数据表                                                               
#示    例: sh msck_repair.sh "ods dwd dws" /data/databases
################################################################################
database_array=$1
tablename_path=$2
for database in ${database_array[@]}
do
cat $tablename_path/$database.txt |while read line
do
hive -e "use $database;msck repair table $line;;"
done
done
#状态
if [ $? -ne 0 ]
then
echo "[ERROR][`date +"%Y-%m-%d %H:%M:%S"`] Be connected with data Failed."
exit 1;
fi
#结束
echo "[INFO][`date +"%Y-%m-%d %H:%M:%S"`] Be connected with data Successful."
exit 0;

运行语句示例,执行:
sh msck_repair.sh “ods dwd dws”
运行结果如图:
在这里插入图片描述

风险点

1.DistCp命令迁移注意CDH集群版本差异
2.不同表的元数据存储格式和路径可能存在差异,在新环境创建表时,需要确认好。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值