环境说明:
136.64.69.10(e3base02) 原集群Hive服务端
136.64.69.49(e3base49) 目标集群Hive服务端
136.64.69.75(e3base55) 目标集群Hive客户端
weixh_test Hive测试库
1、创建目录
原集群导出数据临时目录
hdfs dfs -mkdir /tmp/weixh_test
2、生成导出数据脚本
在136.64.69.10主机执行:
beeline -u jdbc:hive2://e3base02:9066/weixh_test -n e3base -p 111111 -e "show tables" | awk '{printf "export table %s to |/tmp/weixh_test/%s|;\n",$1,$1}' | sed "s/|/'/g" > /e3base/weixh/export.hql
测试中发现beeline命令出来的格式不正确,需要使用如下的hive -e 命令:
但注意,需要在hive命令中加入 use database_name
hive -e "use weixh_test;show tables" | awk '{printf "export table %s to |/tmp/weixh_test/%s|;\n",$1,$1}' | sed "s/|/'/g" > /e3base/weixh/export.hql
导出的export.hql样例:
export table ind_cpc_activity_user_list_d_old to '/tmp/weixh_test/ind_cpc_activity_user_list_d_old';
注意:以上的方法是导出整个weixh_test数据库下的表,
如果只需要迁移个别表,可以单独的写export.hql,
内容参考以上的样例,更改表名与路径名即可。
3、手工导出数据到hdfs
beeline -u jdbc:hive2://e3base02:9066/weixh_test -n e3base -p 111111 -f /e3base/weixh/export.hql
4、下载数据到本地
在136.64.69.10主机执行:
hadoop fs -get /tmp/weixh_test /e3base/weixh
5、上传到目标集群
在136.64.69.10主机执行:
scp -r /e3base/weixh/weixh_test e3base55:/e3base/tmp
hdfs dfs -put /e3base/tmp/weixh_test /tmp/
这样目标集群HDFS下就会有/tmp/weixh_test路径了。
注意:原集群与目标集群的目录名字一定要一样,脚本里需要。
并且,下载和上传数据时,都要保证本地主机满足数据的存储量。
6、构造导入语句
在136.64.69.10主机执行:
cp /e3base/weixh/export.hql /e3base/weixh/import.hql
sed -i 's/export table/import table/g' /e3base/weixh/import.hql
sed -i 's/ to / from /g' /e3base/weixh/import.hql
scp /e3base/weixh/import.hql e3base55:/e3base/tmp/
导入脚本import.hql样例:
import table ind_cpc_activity_user_list_d_old from '/tmp/weixh_test/ind_cpc_activity_user_list_d_old';
注意:以上的方法是导入整个weixh_test数据库下的表,
如果只需要迁移个别表,可以单独的写import.hql,
内容参考以上的样例,更改表名与路径名即可。
7、手动导入数据
e3base55(136.64.69.75)主机,连接新集群的hive端口:
beeline -u jdbc:hive2://e3base49:10000/weixh_test -n e3base -p 111111 -f /e3base/tmp/import.hql
导入后,迁移的表数据就能在目标集群Hive中查到。