总体思路:
1、从旧集群中导出表结构,库和表众多的情况下,使用shell脚本批量导出
2、从旧集群导出的sql建表语句做一些修改,在新集群中执行即可
3、使用distcp命令复制数据文件,需要指定hive表的路径
4、验证是否数据是否迁移成功,可以到hdfs网页查看和在hive库中查看
一、导出表结构
1、首先在hive中执行 show databases;
2、把需要导出的hive库都准备好,然后修改下面的命令,导出某个库里的所有表名到文件中
hive -e "use mxsj;show tables;" > tables.txt
3、修改下面的脚本,下面的脚本是把某库中的所有表结构导出到文件中,把脚本内容写到一个文件exporttab.sh中
#!/bin/bash
cat trajx_tables.txt |while read eachline
do
hive -e "use trajx;show create table $eachline" >>trajx_tablesDDL.txt
echo ";" >> trajx_tablesDDL.txt
done
二、在新集群中导入表结构
把导出的trajx_tablesDDL.txt文件scp 到新集群的服务器上
需要用vim修改一下文件内容,在开头增加建库语句和use语句
如下:
create database mxsj;
use mxsj;
以及注释掉无用行,否则执行会报错
sed -i 's/WARN/--WARN/g' /root/trajx_tablesDDL.txt
最后执行导入
hive -f trajx_tableDDL.txt
三、复制数据到新集群
在新集群的主节点上执行如下命令
hadoop distcp hdfs://老集群主节点ip:8020/user/hive/warehouse/trajx.db/adm_gj_wp_ds hdfs://新集群主节点ip:8020/user/hive/warehouse/trajx.db
每次需要修改hive库和表,目的地不需要写表名,否则会在表名下面建子文件夹。
四、验证数据是否可查
在hive中查看数据
select * from xxx limit 10;
如果是分区表需要执行分区修复,否则无法查到数据
MSCK REPAIR TABLE xxx;