获取原文

简短介绍

大家好,曾几何时你在集群中写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');

 

*
模拟删除Hive表(在真实场景下,删除操作请慎用)
-- 如下操作请谨慎使用,以免带来麻烦 -- 模拟删除普通表 drop table dc_dev.wx_20201103; -- 模拟删除分区表 drop
table dc_dev.wx_pt_20201103;

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

 

 

02-Hive数据恢复步骤

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

 

说明: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 ;

说明:其实表在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/

 

4、验证数据(普通表,到此就完全恢复数据了。分区表,还没有恢复哦,咱们继续)
select * from dc_dev.wx_20201103; ## 普通表,到此数据已恢复

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

 

5、分区表:修复分区元数据,方可恢复数据(分区表,到此完成数据恢复)
## hive sql客户端窗口下执行 msck repair table dc_dev.wx_pt_20201103;

 

 

 

03-小结

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

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信