在工作中难免会遇到需要迁移大数据库,这时候就涉及到迁移hive等HDFS文件
解决方案:
采用hadoop distcp 来整体迁移
#!/bin/sh
database=$1
table_names=`hive -e "use $database;show tables;" `
#获取hive的表结构语句
for table in $table_names
do
hive -e "use $database;show create table $table; " >> desc_table.txt
echo -e ";\c" >> desc_table.txt
done
#迁移HDFS源数据
for table in $table_names
do
hadoop distcp "hdfs://master:9000/usr/hive/warehouse/$database.db/$table" "hdfs://new_master:8020/usr/hive/warehouse/$database.db/$table"
done
在完成源数据导出后,修改之前导出的表结构sql语句,修改hive 的外部表的location路径(新的HDFS路径),执行后,即可在新的集群上访问hive表了。
完毕!!!!