溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

HBase誤刪數(shù)據(jù)怎么辦

發(fā)布時間:2021-12-09 13:59:59 來源:億速云 閱讀:146 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹“HBase誤刪數(shù)據(jù)怎么辦”,在日常操作中,相信很多人在HBase誤刪數(shù)據(jù)怎么辦問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”HBase誤刪數(shù)據(jù)怎么辦”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

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

數(shù)據(jù)保護(hù)

當(dāng)誤刪數(shù)據(jù)發(fā)生時候,不管三七二十一,***要務(wù)是進(jìn)入hbase shell,執(zhí)行如下命令:

HBase誤刪數(shù)據(jù)怎么辦

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

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

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

  • 首先HBase是一個LSM架構(gòu),不斷發(fā)生著數(shù)據(jù)文件的寫入和合并

  • 當(dāng)刪除操作發(fā)生時,不會去清理數(shù)據(jù)文件中的數(shù)據(jù),而是寫入一個刪除標(biāo)記到新文件中。

  • 當(dāng)某一刻major compaction發(fā)生時,在合并文件的同時會根據(jù)刪除標(biāo)記清理數(shù)據(jù),新合并出來的數(shù)據(jù)文件不會再有舊數(shù)據(jù)。

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

數(shù)據(jù)恢復(fù)

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

1.首先我們準(zhǔn)備幾行數(shù)據(jù)

HBase誤刪數(shù)據(jù)怎么辦

2.然后我們刪掉y開頭掉數(shù)據(jù)

HBase誤刪數(shù)據(jù)怎么辦

3.查一下,現(xiàn)在只有3行了

HBase誤刪數(shù)據(jù)怎么辦

4.現(xiàn)在我們帶上raw再次查找數(shù)據(jù),不僅能看到被刪除數(shù)據(jù),還能看到刪除標(biāo)記。

HBase誤刪數(shù)據(jù)怎么辦

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

  • 即便不設(shè)置RAW,也可以通過時間搜索到被刪數(shù)據(jù)。比如數(shù)據(jù)寫入時間是T,delete時間是T+2,那么查找[0, T+1]的話就能看見數(shù)據(jù)。前提是設(shè)置了 KEEP_DELETED_CELLS=TRUE

  • 如果你后續(xù)寫入重復(fù)的Key,那你必須指定好TIMERANGE,不然你可能看到的不是原先刪除的keyVlaue。

  • delete操作默認(rèn)的時間不是當(dāng)前server的時間,也不是構(gòu)造Delete對象的時間,而是被刪除的這個keyValue的寫入時間。當(dāng)然這個得看版本,測試時候發(fā)現(xiàn)1.x和2.x還是不一樣的,有點坑,還以為高版本不能僅通過TIMERAGE搜素被刪數(shù)據(jù)了。

  • 如果你的Delete mark的時間和數(shù)據(jù)的時間一樣,那只能通過RAW看到。

數(shù)據(jù)恢復(fù)完,建議關(guān)閉KEEP_DELETED_CELLS,節(jié)省空間,提高查詢效率。

到此,關(guān)于“HBase誤刪數(shù)據(jù)怎么辦”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI