hive删除分区_小白篇(十八):恢复Hive误删的表数据

本文介绍了如何恢复Hive中误删的表数据。首先模拟删除Hive表,然后通过Hue或HDFS指令找到回收站中的数据。接着重新创建表结构,将回收站中的数据文件复制到新表目录,并进行数据验证。对于分区表,还需修复分区元数据以完成恢复。
摘要由CSDN通过智能技术生成
简短介绍
大家好,曾几何时你在集群中写sql因为“手贱”误删表和数据,而痛苦不已。莫慌,今天给大家分享下如何 快速恢复数据。( 只能恢复数据,表结构无法自动恢复,需重新创建。 除非用云产品或者自研恢复系统。emm我们中台我会考虑自研恢复系统的)

01

模拟删除表

  • 模拟准备:创建一张普通测试表、一张分区测试表

-- 1、创建hive普通表create table dc_dev.wx_20201103(  name string,  address string,  remark string) COMMENT '普通测试表txtfile格式' STORED AS textfile ;-- 插入测试数据insert into dc_dev.wx_20201103 values('张三','上海','测试数据1');insert into dc_dev.wx_20201103 values('李四','杭州','测试数据2');-- 2、创建hive分区表create table dc_dev.wx_pt_20201103(  name string,  address string,  remark string) COMMENT '分区测试表txtfile格式' PARTITIONED BY (dt string) STORED AS textfile ;-- 插入测试数据到分区表中insert into dc_dev.wx_pt_20201103 partition(dt='20201103') values('王五','上海浦东','分区测试数据1');insert into dc_dev.wx_pt_20201103 partition(dt='20201103') values('赵六','杭州西湖','分区测试数据2');

ab943573365bc52bc73130b43fdc60f9.png

  • 模拟删除Hive表(在真实场景下,删除操作请慎用)

-- 如下操作请谨慎使用,以免带来麻烦-- 模拟删除普通表drop table dc_dev.wx_20201103;-- 模拟删除分区表drop table dc_dev.wx_pt_20201103;

2376810bca6b7836968c03dde75fd0f8.png

说明:如果是生产环境中,表被删除了。估计很多小伙伴就要“疯掉”了。会不停的问自己“我该怎么办?我该怎么办?我是不是改跑路了”。 莫慌 ,解决办法如下。

02

Hive数据恢复步骤

1、通过Hue界面,找到被删除表在Hdfs中垃圾回收站的位置(HDFS默认回收站保留时间为3天,可通过配置调整保留期限)。如果界面用得不习惯,可直接hdfs dfs指令去查找被删除表所在位置。

d101a40e05472d79a665016be6564b8d.png

97dd592f0ab337be0428e72bb3083da6.png

8662651c0ffce9d1d3a1ddcc3db2b1b0.png

1e58594ce53b58254e2589a3428ad3a9.png

说明:hdfs中有一个.Trash(垃圾回收站)目录。里面存放着删除的数据文件。垃圾回收站保留时间是有期限的。默认保留3天,不过可以调整为15天左右。

2、重新创建表,用来接收即将恢复的数据

-- 1、重新创建hive普通表create table dc_dev.wx_20201103(  name string,  address string,  remark string) COMMENT '普通测试表txtfile格式' STORED AS textfile ;-- 2、重新创建hive分区表create table dc_dev.wx_pt_20201103(  name string,  address string,  remark string) COMMENT '分区测试表txtfile格式' PARTITIONED BY (dt string) STORED AS textfile ;

4d602579825ab35b6ea587a895252f42.png

说明:其实表在hdfs中可以理解为是一个目录而已。重要的是数据文件。我们先重新创建好接收目录(即:要恢复的表结构)。

3、将数据文件恢复到表中

在恢复步骤1 中我们已经知道了。被删除的数据文件在回收站的目录。现在要做的就是将回收站下数据文件,拷贝一份到重新创建的表目录下就可以了。

## 通过指令恢复数据文件(其实是一次拷贝的过程)## 执行此指令,执行用户需要足够的权限## hdfs dfs -cp 回收站表目录 目标库目录hdfs dfs -cp /user/hive/.Trash/201103230000/user/hive/warehouse/dc_dev.db/wx_20201103 /user/hive/warehouse/dc_dev.db/hdfs dfs -cp /user/hive/.Trash/201103230000/user/hive/warehouse/dc_dev.db/wx_pt_20201103 /user/hive/warehouse/dc_dev.db/

46aa2db6f9f801622ba161c5b6021ae0.png

4、验证数据(普通表,到此就完全恢复数据了分区表,还没有恢复哦,咱们继续)

select * from dc_dev.wx_20201103; ## 普通表,到此数据已恢复

e34c1f63f1899feb85e8b36982bf13e2.png

## 分区表也明明执行了恢复指令,为啥没有恢复呢?select * from dc_dev.wx_pt_20201103; ## 分区表,此时分区元数据没有修复,所以还没有恢复完成

262a3036f716cc9f352e603fbf4bbe6e.png

5、分区表:修复分区元数据,方可恢复数据(分区表,到此完成数据恢复)

## hive sql客户端窗口下执行msck repair table dc_dev.wx_pt_20201103;

420f371277859b5e6179057280a151a6.png

03

小结

凡是莫慌,一切自有解决之道。理解事物的内在原理,解决起来得心应手。其实hive中的表,对应到底层就是hdfs文件系统。集群中一切皆为文件。那就恢复文件不就好啦。当然,不能说我们知道解决方法了,就能肆无忌惮的去操作。对于 生产环境,我们 应该抱有敬畏的心理。希望小伙伴们能有所收获。

如果大家喜欢可关注公众号,感谢!

b3d2fec6f040f3b60d79b194c9263d68.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值