Hadoop之hive的drop table恢復


一、引言:

  快下班的時候我開發同事問能不能將hive中drop掉的數據恢復過來,我記得是有開回收站的,當時我回答說可以恢復的。

二、恢復過程:

  在之前我有對hadoop的回收站有過了解,就是將hdfs dfs -rm刪除掉的文件進行恢復,只需要hdfs dfs -mv將文件從回收站中搬過來就行,我就先使用這個方法,但是效果不佳,執行select count(*) from table_name,得到的結果為0。這個時候我想到這個表被drop掉以后在mysql的元數據庫中已經沒有數據了,那就得需要將這些數據的信息重新寫入到mysql中。具體恢復步驟如下:

  1、創建表:

CREATE TABLE temp_richard(
op_time string,                             
province_id string,  
pay_type string,
client_type string,
index_id string,
index_value  bigint

) PARTITIONED BY (dayid string) stored as rcfile location '/dw/tmp/temp_richard';

  2、將回收站中的數據cp出來一份:

hdfs dfs -cp /user/hadoop/.Trash/Current/dw/dm/tmp_richard /tmp/richard/

  3、將臨時目錄下的數據load到表中:

load data inpath '/tmp/zhulh/dayid=20160101/000000_0' into table tmp_richard PARTITION (dayid='20160101');

  備注:這里需要將每個分區的數據load到相應的分區表中。

  4、驗證數據:

hive> select count(*) from tmp_richard;

三、重點說明:

  hive 中使用truncate命令將表截斷的話,它是不會進回收站的,是沒辦法恢復的。這個跟oracle truncate有點類似的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM