您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(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ù):
當(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這張表:
不僅能看到原來(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ò),可以把它分享出去讓更多的人看到吧!
免責(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)容。