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

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

創(chuàng)新互聯(lián)公司2013年至今,先為平和等服務(wù)建站,平和等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為平和企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

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

先來說下HBase的兩個屬性:KEEP_DELETED_CELLS和TTL

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

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

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

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

TTL和KEEP_DELETED_CELLS差異

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

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

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

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

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

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

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

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

    HBase隨著數(shù)據(jù)的寫入和合并發(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ù)。這里需要注意一點(diǎn),即使 KEEP_DELETED_CELLS 設(shè)置為True,數(shù)據(jù)仍然會因為過期而被清理(HBsae表中的TTL屬性)。這個設(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è)置是否開啟Raw模式,開啟Raw模式會返回包括已添加刪除標(biāo)記但是未實際刪除的數(shù)據(jù)現(xiàn)在我們指定RAW屬性,重新scan這張表:

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

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

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

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

分享名稱:HBase1.x中誤刪數(shù)怎么辦
本文網(wǎng)址:http://muchs.cn/article24/pdggce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、域名注冊手機(jī)網(wǎng)站建設(shè)、網(wǎng)站維護(hù)網(wǎng)站導(dǎo)航、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司