关于 hive的迁移之数据迁移和跨集群 备份

昨天讲了 表结构的迁移,结合 shell 和 hive -e 和 hive -f 基本小试牛刀完成了, 重中之重 其实是数据 的迁移和 跨集群的数据定时备份

今天 讲数据迁移,依然使用的是最笨的方法 也是最有效的,
首先我们的表 是分区表, 比如有 client_nmbr batch 两个分区
,我们从A集群 导出,在导入到 B集群,都是批量导入,不可能每条鱼验证它是哪个分区的再插入,这样效率比较低,所以我们必须在 从A集群导出的时候就要 做好他是哪个分区的,根据分区 来生成一个单独的文件,这样我们在B集群导入的时候 就是 以文件件代表分区, 批量写入,

另外内,以后如果数据迁移成为一个定时任务要去备份的话,我们应该是 以增量备份,而不是全量备份,怎么判断增量呢,使用上面的两个字段 都无法做到,那我们就应该考虑 建在分区上该如何表示增量呢,答案是时间字段,假如我 3月20日备份过一次 ,一个月备份一次,那么我在4月20号 要备份的时候就要从3月21日新增的结果进行备份,这样增量可以标识出来,节省了 空间和时间

具体如何通过分区来备份呢,这个看hive为我们提供的几个命令
show tables;
show partitions tablename;
下面可以看看shell 的伪代码

#! /bin/bash

ex_dir=export_zip

mkdir ./$ex_dir
for  table in  `hive -e 'use fkdb,show tables'`;do
     dirsub=_data;
     mkdir -p  ./$table$dirsub;
     for  partition in `show partitions $table`;do
#假设 partition=client_nmbr=AA108/batch=p1
        cli_bat=`echo $partition |grep  -o --color  '[0-9]*'`
        client_nmbr=${cli_bat[0]};
        batch=${cli_bat[1]};
        ex_file=$table$partition
        touch ./$table$dirsub/$ex_file

        hive -e 'select * from $table where client_nmbr=$client_nmbr and  batch=$batch' >> ./$table$dirsub/$ex_file
     zip_extension=.zip
     zip -r ./$ex_dir/$table$dirsub$zip_extension ./$table$dirsub
     

通过这个shell 脚本 就可以批量导出 这些 表分区的数据文件 ,是不是很酷,
并且打包成zip文件

之后将这些文件上传到B 集群,通过 对文件名的正则匹配到分区后
使用 批量插入脚本 for 变量到 hive 仓库中

你可能感兴趣的:(关于 hive的迁移之数据迁移和跨集群 备份)