对于需要跨集群迁移Hive表的,只需要迁移表结构的,可以采取从原始集群导出Hive表结构,然后在新集群导入Hive表结构,实现Hive元数据的迁移。
导出所有的hive库
#!/bin/bash
# 1-export_database.sh
dir="output/database"
if [ ! -d ${dir} ]; then
mkdir -p ${dir}
fi
beeline -u 'jdbc:hive2://hive01:10000/default' --silent=true --outputformat=tsv2 --showHeader=false -e "show databases" > ${dir}/databases.txt
导出库的所有hive表
#!/bin/bash
# 2-export_table.sh
for database in `cat output/database/databases.txt`
do
dir="output/table"
if [ ! -d ${dir} ]; then
mkdir -p ${dir}
fi
beeline -u 'jdbc:hive2://hive01:10000/default' --silent=true --outputformat=tsv2 --showHeader=false -e "use ${database}; show tables" > ${dir}/${database}_tables.txt
sed -i "s|^|${database}.|g" ${dir}/${database}_tables.txt
done
导出所有hive表的建表语句
#!/bin/bash
# 3-export_create_table.sh
for database in `cat output/database/databases.txt`
do
dir="output/create/${database}"
if [ ! -d ${dir} ]; then
mkdir -p ${dir}
fi
for tablename in `cat output/table/${database}_tables.txt`
do
beeline -u 'jdbc:hive2://hive01:10000/default' --silent=true --outputformat=tsv2 --showHeader=false -e "show create table ${tablename}" > ${dir}/${tablename}.txt
done
done
处理一下导出的建表语句,比如去掉一些表路径信息等
#!/bin/bash
# 4-sed_table.sh
for database in `cat output/database/databases.txt`
do
for tablename in `ls output/create/${database}/*.txt`
do
sed -i 's/CREATE EXTERNAL TABLE/CREATE TABLE/g' ${tablename}
sed -i '/LOCATION/,$d' ${tablename}
done
done
导入hive表
#!/bin/bash
# 5-load_table.sh
for database in `cat output/database/databases.txt`
do
for tablename in `ls output/create/${database}/*.txt`
do
echo "load ${tablename}"
beeline -u 'jdbc:hive2://hive01:10000/default' --silent=true --outputformat=tsv2 --showHeader=false -f ${tablename}
echo ""
done
done
欢迎关注我的公众号“九万里大数据”,原创技术文章第一时间推送。