hive全库数据及表结构的备份与恢复

本文介绍了一个利用Python脚本实现Hive数据库指定库列表的全库数据及元数据备份与恢复的方法。通过结合awk、sed命令与Hive命令行,脚本能够自动遍历库名列表,导出并备份所有表数据,随后生成相应的恢复脚本。此方案适用于批量操作,提高数据管理效率。
部署运行你感兴趣的模型镜像

在之前的文章中介绍了hive的export和import的使用方式,下面提供一个简单的脚本实现对指定的库列表做全库的数据及元数据的备份以及恢复。

hive的数据导入导出,备份恢复

很简单,是利用了awk和sed命令结合hive命令行。

首先传入库名列表,再遍历库名使用hive查看该库下所有表,然后拼接字符串到export文件内,前面介绍了export和import的命令仅仅是export和import以及to 和from的区别,所以这里直接对export文件处理得到import文件,然后读取export文件里的命令,使用hive命令行执行。这里推荐改为使用beeline更安全。备份之后的元数据以及数据都在/tmp/warehouse_bak 下,参考下面的代码即可写出批量import的脚本:传入库名列表,读取import文件,使用hive执行。

如不想使用python也可以将代码改为shell,思路同上,这里就不提供shell代码了。

import subprocess

schema_list=['dh_party','dh_sales','dh_t3_group_index','dh_t3_group_index_pre','dl_h_nccp','dl_h_noahwm_trans','dl_h_noahwm_cbs','dh_t3_mutual_fund','dh_t3_report_hlwpp','dh_event','dh_t3_report_crm']
# schema_list=['dh_party','dh_sales','dh_t3_group_index','dh_t3_group_index_pre','dh_t3_mutual_fund','dh_t3_report_hlwpp','dh_event']
for s in schema_list:
    try:
        print('----------start: '+s+' --------------------')
        hive_export_cmd=r"""hive -e 'use """+s+r""";show tables;' | awk '{printf "export table """+s+r""".%s to |/tmp/warehouse_bak/"""+s+r"""/%s|;\n",$1,$1}' | sed "s/|/'/g" > /home/tools/warehouse_bak/"""+s+r"""_export.hql"""
        subprocess.getstatusoutput(hive_export_cmd)
        cp_cmd = r"""cp /home/tools/warehouse_bak/{}_export.hql /home/tools/warehouse_bak/{}_import.hql""".format(s,s)
        subprocess.getstatusoutput(cp_cmd)
        sed1 = r"""sed -i 's/export table/import table/g' /home/tools/warehouse_bak/{}_import.hql""".format(s)
        sed2 = r"""sed -i 's/ to / from /g' /home/tools/warehouse_bak/{}_import.hql""".format(s)
        subprocess.getstatusoutput(sed1)
        subprocess.getstatusoutput(sed2)

        #export

        with open(r"""/home/tools/warehouse_bak/{}_export.hql""".format(s),'r') as f:
            cmd_list = f.readlines()
        print(cmd_list)
        for i in range(cmd_list.__len__()-2):
            hive_tbl_export = r""" hive -e "{}" """.format(cmd_list[i].replace(r'\n',''))
            try:
                subprocess.getstatusoutput(hive_tbl_export)
            except Exception as e:
                print(e)
                pass
        # hive_export = r"""hive -f /home/tools/warehouse_bak/{}_export.hql""".format(s)
        # subprocess.getstatusoutput(hive_export)

        print('----------end: '+s+' --------------------')
    except Exception as e:
        print(e)
        pass

 

#!/bin/bash
nohup /home/tools/python3/python36/bin/python3 /home/tools/warehouse_bak/hive_backup.py > /home/tools/warehouse_bak/log/backup_log.out 2>&1 &

 

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王义凯_Rick

遇见即是缘,路过就给个评论吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值