美文网首页
关于 hive的迁移之数据迁移和跨集群 备份

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

作者: Helen_Cat | 来源:发表于2018-06-28 17:20 被阅读24次

    昨天讲了 表结构的迁移,结合 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的迁移之数据迁移和跨集群 备份

          本文链接:https://www.haomeiwen.com/subject/wutnyftx.html