溫馨提示×

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

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

HBase1.x中誤刪數(shù)怎么辦

發(fā)布時(shí)間:2021-12-09 10:16:59 來(lái)源:億速云 閱讀:102 作者:小新 欄目:大數(shù)據(jù)

這篇文章給大家分享的是有關(guān)HBase1.x中誤刪數(shù)怎么辦的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

    以前常用的關(guān)系數(shù)據(jù)庫(kù)mysql、oracle 誤刪除后,都可通過(guò)各種方式進(jìn)行數(shù)據(jù)的恢復(fù),而HBase中如果我們誤刪除了表中的一行或者一行中的幾列數(shù)據(jù)能不能恢復(fù)呢?答案是肯定的,HBase可設(shè)置KEEP_DELETED_CELLS 為 True 的目的在于防止數(shù)據(jù)被物理刪除:

先來(lái)說(shuō)下HBase的兩個(gè)屬性:KEEP_DELETED_CELLS和TTL

 1.創(chuàng)建表時(shí)指定列族的TTL[time to live]存活時(shí)間 10s -- 表中改列族所有數(shù)據(jù),僅存活7秒

hbase(main):002:0> create 'ljs:testTable2',{NAME=>'columnFamily1', TTL=> 10, VERSIONS=>3}

   2..創(chuàng)建表時(shí)指定 KEEP_DELETED_CELLS[刪除key之后,數(shù)據(jù)是否還在內(nèi)存保留,但是TTL設(shè)置之后,這里到了TTL設(shè)置的10s時(shí)間后,仍然會(huì)刪除]

   hbase(main):002:0>  create 'ljs:testTable2',{NAME=>'columnFamily1', TTL=> 10, VERSIONS=>3 , KEEP_DELETED_CELLS => true}

TTL和KEEP_DELETED_CELLS差異

        a.創(chuàng)建表時(shí),可以指定TTL和KEEP_DELETED_CELLS,TTL的強(qiáng)制性要大于KEEP_DELETED_CELLS

        b.當(dāng)指定了TTL,那么到TTL指定時(shí)間,全表數(shù)據(jù)都會(huì)被刪除,從hbase上清除

        c.當(dāng)指定了KEEP_DELETED_CELLS = true[默認(rèn)值], 刪除[delete]的數(shù)據(jù)仍然在hbase中,即使flush,也沒(méi)有刪除。使用原生掃描,是可以查到的

        d.當(dāng)指定了KEEP_DELETED_CELLS = false,同時(shí)flush,數(shù)據(jù)就會(huì)被刪除,hbase沒(méi)有保留。原生掃描也查不到數(shù)據(jù)了

下面開(kāi)始講數(shù)據(jù)誤刪恢復(fù):

  1. 當(dāng)誤刪數(shù)據(jù)后,第一時(shí)間登陸hbase shell,執(zhí)行以下命令:

誤刪幾個(gè)列族數(shù)據(jù)就對(duì)幾個(gè)列族執(zhí)行以下命令,這里誤刪除兩個(gè)列族colunmFamily1,columnFamily2:

alter'ljs:testTable2', { NAME => 'columnFamily1', KEEP_DELETED_CELLS => TRUE }, { NAME => 'columnFamily2', KEEP_DELETED_CELLS => TRUE }

    HBase隨著數(shù)據(jù)的寫(xiě)入和合并發(fā)生清理時(shí),不會(huì)去清理數(shù)據(jù)文件中的數(shù)據(jù),而是寫(xiě)入一個(gè)刪除標(biāo)記到新文件中。當(dāng)某一刻major compaction發(fā)生時(shí),在合并文件的同時(shí)會(huì)根據(jù)刪除標(biāo)記清理數(shù)據(jù),新合并出來(lái)的數(shù)據(jù)文件不會(huì)再有舊數(shù)據(jù)。

    KEEP_DELETED_CELLS 的作用就是在major compaction發(fā)生的時(shí)候,決定要不要清理舊數(shù)據(jù)。這里需要注意一點(diǎn),即使 KEEP_DELETED_CELLS 設(shè)置為T(mén)rue,數(shù)據(jù)仍然會(huì)因?yàn)檫^(guò)期而被清理(HBsae表中的TTL屬性)。這個(gè)設(shè)定無(wú)可厚非,既然過(guò)期了,誤刪不誤刪也無(wú)所謂了。

下面用實(shí)際操作演示一下:

    1.準(zhǔn)備數(shù)據(jù):

hbase(main):009:0> scan 'testTable2'ROW                                    COLUMN+CELL                                                                                                     row001                                column=columnFamily1:column1, timestamp=1580948919942, value=value001                                           row001                                column=columnFamily1:column2, timestamp=1580948927665, value=value002                                           row001                                column=columnFamily2:column1, timestamp=1580948939101, value=value021                                           row001                                column=columnFamily2:column2, timestamp=1580948945476, value=value022                                           row002                                column=columnFamily1:column1, timestamp=1580948964943, value=value201                                           row002                                column=columnFamily1:column2, timestamp=1580948972598, value=value202                                          2 row(s) in 0.0580 seconds

2.刪除row002的數(shù)據(jù):

hbase(main):010:0> delete 'testTable2','row002','columnFamily1:column1'0 row(s) in 0.0640 seconds
hbase(main):011:0> delete 'testTable2','row002','columnFamily1:column2'0 row(s) in 0.0220 seconds
hbase(main):012:0> scan 'testTable2'ROW                                    COLUMN+CELL                                                                                                     row001                                column=columnFamily1:column1, timestamp=1580948919942, value=value001                                           row001                                column=columnFamily1:column2, timestamp=1580948927665, value=value002                                           row001                                column=columnFamily2:column1, timestamp=1580948939101, value=value021                                           row001                                column=columnFamily2:column2, timestamp=1580948945476, value=value022                                          1 row(s) in 0.0570 seconds

3.scan時(shí)可以設(shè)置是否開(kāi)啟Raw模式,開(kāi)啟Raw模式會(huì)返回包括已添加刪除標(biāo)記但是未實(shí)際刪除的數(shù)據(jù)現(xiàn)在我們指定RAW屬性,重新scan這張表:

HBase1.x中誤刪數(shù)怎么辦

不僅能看到原來(lái)的數(shù)據(jù),還多了一行含有DeleteColum標(biāo)簽的已刪除數(shù)據(jù)。

4.下面你就可以根據(jù)自身需要重新put已刪除插入數(shù)據(jù)即可,這里就不在執(zhí)行操作了。

感謝各位的閱讀!關(guān)于“HBase1.x中誤刪數(shù)怎么辦”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

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

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

AI