关于hive 的迁移 之 表结构批量迁移

image.png

我们在做数据治理 数据仓库的时候 ,集群数据迁移时必不可少的一项,因为什么呢,
比如
1刚开始集群搭在亚马逊aws,几十万美金的创业红包用完了,差不多三四个月,
2aws的小规模集群也有 900TB 的数据,迁移到 腹黑的阿里云平台,
3过几天有人来你公司搞推销,告诉你使用他们 阿里云大集团账号上六折折扣,结果迁移到他们的上面,
4结果过了半年阿里云开始清查,发现他们的大集团账号违规操作,收回折扣价,公司为了节约成本 ,限期迁移,这回又自己买服务器捯饬搭建本地集群,可算是一次投入 ,只交电网费了
5又过了半年,办公区老限闸停电,业务受阻苦不堪言,结果又含泪 找了 第三方的实体机房配置新的集群,这回可算消停了一下,
6 结果公司业务扩张,又不得不在更多大中华区各个片区机房购买机器配置集群,
7.过了半年 又嫌机器性能不够好,同地异地 统统更换性能硬件更好的机器
8.过了一段时间公司烧钱厉害,要倒闭,有价值的数据清洗打包卖给 第三方数据商贩
来来回回没有终点,一段曲折的历史 倒出不尽人意的辛酸苦楚,上面的过程都要迁移数据,迁移数据包括 表结构和表数据,迁移还不是终点,还要rebalance

下面先讲讲 hvie 的迁移 之一 表结构 迁移,
假设我们在A 集群上有一个库 fkdb ,有上千张表,
如果自己用最笨的方法迁移, 比如说登录到 hive上,
desc table name ,显示出表的结构,然后粘贴复制到文本文件里,然后自己再组织结构成创建表的语句,然后再 在B 集群上 执行创建表语句,那么一个表大于 20分钟才可以,上千张表的话,一个月都干不完,平均一天 也才30张表,
那我们一定要结合 shell 脚本的便利,能用脚本自动化执行的,就交给脚本就可以了,

为了方便大家理解,我们先做一些解释说明
hive -e 字符串语句hive 命令, 这个可以 执行hsql 语句
hive -f hsql脚本文件 这个可以 执行hsql 文件 ,比如创建表
show create table database.tablename 这个会显示创建表的语句
desc table tablename 这个会显示表的结构

output.hql 追加到文件中
我们可以一步到位
hive -e 'show create table database.tablename' >>tab_create.hql 这样就把创建表的语句追加到文件中了
然后我们在B 集群执行
hive -f tab_create.hql 就可以把 创建表语句执行

面对上千张表,我们使用 shell 的for 来遍历
for tab in hive -e 'use fkdb;show tables;do script ;done

下面是 执行 过程

mkdir  export_tab
cd export_tab
vi  export_tab.sh

#!/bin/bash

for tab in  `hive -e  'use fkdb;show tables'`;do
    suffix=_create.hql
    hive -e "show create table fkdb.$tab" >> ./$tab$suffix ;
done

esc : wq #保存退出
chmod  u+x export_tab.sh
sh ./export_tab.sh

#等待脚本执行完毕,此目录会生成 所有表的创建语句,其实也可以吧所有表的创建语句追加到同一个文件里,这样 在B 集群导入表结构会一次到位 
 cat *_create.hql >> tab_create_all.hql
zip -r  tab_cre.zip ./*_create.hql

然后将 tab_cre.zip 传输到B 集群上,然后执行

mkdir import_tab
cd import_tab
unzip tab_cre.zip -d ./
vi  import_tab.sh

#!/bin/bash
for tab in `ls **_create.hql`;do
  hive  -f  $tab

esc : wq #保存退出
chmod  u+x import_tab.sh
sh ./import_tab.sh

这样fkdb上的所有表结构就完成了 跨集群的创建,而且是原汁原味,自己粘贴复制 上千张表必然会出事故,出错就在所难免了
这个时候需要注意的是 在B 集群上的 同名数据库是否存在 ,库表的权限和操作用户是否和A 集群上相同

你可能感兴趣的:(关于hive 的迁移 之 表结构批量迁移)