日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【HBase从入门到精通系列】误删数据如何抢救?

發(fā)布時間:2024/8/23 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【HBase从入门到精通系列】误删数据如何抢救? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

摘要:?前言 有時候我們操作數據庫的時候不小心誤刪數據,這時候如何找回?mysql里有binlog可以幫助我們恢復數據,但是沒有開binlog也沒有備份就尷尬了。如果是HBase,你沒有做備份誤刪了又如何恢復呢? 數據保護 當誤刪數據發(fā)生時候,不管三七二十一,第一要務是進入hbase shell,執(zhí)行如下.

前言

有時候我們操作數據庫的時候不小心誤刪數據,這時候如何找回?mysql里有binlog可以幫助我們恢復數據,但是沒有開binlog也沒有備份就尷尬了。如果是HBase,你沒有做備份誤刪了又如何恢復呢?

數據保護

當誤刪數據發(fā)生時候,不管三七二十一,第一要務是進入hbase shell,執(zhí)行如下命令:

alter 't', { NAME => 'f', KEEP_DELETED_CELLS => TRUE }

如果誤刪一張表的有多個family里的數據,需要都執(zhí)行一下:

alter 'tt', { NAME => 'f1', KEEP_DELETED_CELLS => TRUE }, { NAME => 'f2', KEEP_DELETED_CELLS => TRUE }

設置 KEEP_DELETED_CELLS 為 True 的目的在于防止數據被物理刪除。這里有必要解釋一下HBase清理數據的原理:

  • 首先HBase是一個LSM架構,不斷發(fā)生著數據文件的寫入和合并
  • 當刪除操作發(fā)生時,不會去清理數據文件中的數據,而是寫入一個刪除標記到新文件中。
  • 當某一刻major compaction發(fā)生時,在合并文件的同時會根據刪除標記清理數據,新合并出來的數據文件不會再有舊數據。

KEEP_DELETED_CELLS 的作用就是在major compaction發(fā)生的時候,決定要不要清理舊數據。這里需要注意一點,即便 KEEP_DELETED_CELLS 設置為True,數據仍然會因為過期而被清理(HBsae表中的TTL屬性)。這個設定無可厚非,既然過期了,誤刪不誤刪也無所謂了。

數據恢復

數據恢復的前提數據沒有被物理刪除,也就是上文提及的。你只需要在查詢(Scan)的時候,指定raw模式來搜索數據,就能看到被刪除的數據,之后你要做就是把數據再寫入一次。我們來看一個簡單的例子,還是以hbase shell為例子:

1.首先我們準備幾行數據

hbase(main):020:0> scan 't' ROW COLUMN+CELLx.row1 column=f:c1, timestamp=1528449361490, value=value1x.row2 column=f:c2, timestamp=1528449372090, value=value2x.row3 column=f:c3, timestamp=1528449378971, value=value3y.row1 column=f:c1, timestamp=1528449387923, value=value1y.row2 column=f:c2, timestamp=1528449394742, value=value2 5 row(s) Took 0.0304 seconds

2.然后我們刪掉y開頭掉數據

hbase(main):024:0> delete 't', 'y.row1', 'f:c1' Took 0.0212 seconds hbase(main):025:0> delete 't', 'y.row2', 'f:c2' Took 0.0043 seconds

3.查一下,現在只有3行了

hbase(main):026:0> scan 't' ROW COLUMN+CELLx.row1 column=f:c1, timestamp=1528449361490, value=value1x.row2 column=f:c2, timestamp=1528449372090, value=value2x.row3 column=f:c3, timestamp=1528449378971, value=value3 3 row(s) Took 0.0079 seconds

4.現在我們帶上raw再次查找數據,不僅能看到被刪除數據,還能看到刪除標記。

hbase(main):047:0> scan 't', { TIMERANGE => [0, 1528450107075], RAW => true} ROW COLUMN+CELLx.row1 column=f:c1, timestamp=1528449361490, value=value1x.row2 column=f:c2, timestamp=1528449372090, value=value2x.row3 column=f:c3, timestamp=1528449378971, value=value3y.row1 column=f:c1, timestamp=1528449387923, type=Deletey.row1 column=f:c1, timestamp=1528449387923, value=value1y.row2 column=f:c2, timestamp=1528449394742, type=Deletey.row2 column=f:c2, timestamp=1528449394742, value=value2 5 row(s) Took 0.0091 seconds

這里我設置了TIMERANGE, 指定的是數據寫入的時間。對于我這個case其實并沒有什么用,我只是想說明幾點:

  • 即便不設置RAW,也可以通過時間搜索到被刪數據。比如數據寫入時間是T,delete時間是T+2,那么查找[0, T+1]的話就能看見數據。前提是設置了 KEEP_DELETED_CELLS=TRUE
  • 如果你后續(xù)寫入重復的Key,那你必須指定好TIMERANGE,不然你可能看到的不是原先刪除的keyVlaue。
  • delete操作默認的時間不是當前server的時間,也不是構造Delete對象的時間,而是被刪除的這個keyValue的寫入時間。當然這個得看版本,測試時候發(fā)現1.x和2.x還是不一樣的,有點坑,還以為高版本不能僅通過TIMERAGE搜素被刪數據了。
  • 如果你的Delete mark的時間和數據的時間一樣,那只能通過RAW看到。

數據恢復完,建議關閉KEEP_DELETED_CELLS,節(jié)省空間,提高查詢效率。

其他

  • 上文使用的是hbase shell演示,你可以使用任何語言的API完成上面的操作。

  • 如果你使用的是云HBase,即便因為major compaction物理刪除了數據,只要你開啟了備份功能,依然可以恢復。

原文鏈接

本文為云棲社區(qū)原創(chuàng)內容,未經允許不得轉載。


總結

以上是生活随笔為你收集整理的【HBase从入门到精通系列】误删数据如何抢救?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。