模擬刪除表
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');
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');drop table dc_dev.wx_20201103;drop table dc_dev.wx_pt_20201103;說明:如果是生產環境中,表被刪除了。估計很多小夥伴就要「瘋掉」了。會不停的問自己「我該怎麼辦?我該怎麼辦?我是不是改跑路了」。莫慌,解決辦法如下。Hive數據恢復步驟
1、通過Hue界面,找到被刪除表在Hdfs中垃圾回收站的位置(HDFS默認回收站保留時間為3天,可通過配置調整保留期限)。如果界面用得不習慣,可直接hdfs dfs指令去查找被刪除表所在位置。
說明:hdfs中有一個.Trash(垃圾回收站)目錄。裡面存放著刪除的數據文件。垃圾回收站保留時間是有期限的。默認保留3天,不過可以調整為15天左右。
2、重新創建表,用來接收即將恢復的數據
create table dc_dev.wx_20201103( name string, address string, remark string) COMMENT '普通測試表txtfile格式' STORED AS textfile ;
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 /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、分區表:修復分區元數據,方可恢復數據(分區表,到此完成數據恢復)
msck repair table dc_dev.wx_pt_20201103;小結
凡是莫慌,一切自有解決之道。理解事物的內在原理,解決起來得心應手。其實hive中的表,對應到底層就是hdfs文件系統。集群中一切皆為文件。那就恢復文件不就好啦。當然,不能說我們知道解決方法了,就能肆無忌憚的去操作。對於生產環境,我們應該抱有敬畏的心理。希望小夥伴們能有所收穫。如果大家喜歡可關注公眾號,感謝!