您好,登錄后才能下訂單哦!
這篇文章主要介紹“HBase誤刪數據怎么辦”,在日常操作中,相信很多人在HBase誤刪數據怎么辦問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”HBase誤刪數據怎么辦”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
有時候我們操作數據庫的時候不小心誤刪數據,這時候如何找回?mysql里有binlog可以幫助我們恢復數據,但是沒有開binlog也沒有備份就尷尬了。如果是HBase,你沒有做備份誤刪了又如何恢復呢?
數據保護
當誤刪數據發生時候,不管三七二十一,***要務是進入hbase shell,執行如下命令:
如果誤刪一張表的有多個family里的數據,需要都執行一下:
alter 'tt', { NAME => 'f1', KEEP_DELETED_CELLS => TRUE }, { NAME => 'f2', KEEP_DELETED_CELLS => TRUE }
設置 KEEP_DELETED_CELLS 為 True 的目的在于防止數據被物理刪除。這里有必要解釋一下HBase清理數據的原理:
首先HBase是一個LSM架構,不斷發生著數據文件的寫入和合并
當刪除操作發生時,不會去清理數據文件中的數據,而是寫入一個刪除標記到新文件中。
當某一刻major compaction發生時,在合并文件的同時會根據刪除標記清理數據,新合并出來的數據文件不會再有舊數據。
KEEP_DELETED_CELLS 的作用就是在major compaction發生的時候,決定要不要清理舊數據。這里需要注意一點,即便 KEEP_DELETED_CELLS 設置為True,數據仍然會因為過期而被清理(HBsae表中的TTL屬性)。這個設定無可厚非,既然過期了,誤刪不誤刪也無所謂了。
數據恢復
數據恢復的前提數據沒有被物理刪除,也就是上文提及的。你只需要在查詢(Scan)的時候,指定raw模式來搜索數據,就能看到被刪除的數據,之后你要做就是把數據再寫入一次。我們來看一個簡單的例子,還是以hbase shell為例子:
1.首先我們準備幾行數據
2.然后我們刪掉y開頭掉數據
3.查一下,現在只有3行了
4.現在我們帶上raw再次查找數據,不僅能看到被刪除數據,還能看到刪除標記。
這里我設置了TIMERANGE, 指定的是數據寫入的時間。對于我這個case其實并沒有什么用,我只是想說明幾點:
即便不設置RAW,也可以通過時間搜索到被刪數據。比如數據寫入時間是T,delete時間是T+2,那么查找[0, T+1]的話就能看見數據。前提是設置了 KEEP_DELETED_CELLS=TRUE
如果你后續寫入重復的Key,那你必須指定好TIMERANGE,不然你可能看到的不是原先刪除的keyVlaue。
delete操作默認的時間不是當前server的時間,也不是構造Delete對象的時間,而是被刪除的這個keyValue的寫入時間。當然這個得看版本,測試時候發現1.x和2.x還是不一樣的,有點坑,還以為高版本不能僅通過TIMERAGE搜素被刪數據了。
如果你的Delete mark的時間和數據的時間一樣,那只能通過RAW看到。
數據恢復完,建議關閉KEEP_DELETED_CELLS,節省空間,提高查詢效率。
到此,關于“HBase誤刪數據怎么辦”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。