HBase數(shù)據(jù)的刪除和更新

當(dāng)刪除HBase中的數(shù)據(jù),HBase會(huì)刪除存儲(chǔ)在HDFS上的數(shù)據(jù),而Hadoop的Sequence File是一個(gè)順序讀寫,批量處理的系統(tǒng)。那HBase怎么就能夠查詢到該記錄,并更新和刪除了數(shù)據(jù)呢?
答:HBase不會(huì)定位到需要?jiǎng)h除或更新的記錄進(jìn)行操作。
由于HBase底層依賴HDFS,對(duì)于HBase刪除操作來說,HBase無法在查詢到之前的數(shù)據(jù)并進(jìn)行修改,只能順序讀寫,追加記錄。那HBase只能追加記錄了,為了更新或刪除數(shù)據(jù),HBase會(huì)插入一條一模一樣的新的數(shù)據(jù),但是key type會(huì)標(biāo)記成Delete狀態(tài),以標(biāo)記該記錄被刪除了。在讀取的時(shí)候如果取到了是Delete,而且時(shí)間是最新的,那么這條記錄肯定是被刪掉了。


HFile存儲(chǔ)格式

HFile的存儲(chǔ)格式如圖所示,每一個(gè)單元格或者KeyValue在HFile中的格式如下:
row length + row key + family length + column family + column qualifier + timestamp + key type
同樣,進(jìn)行更新操作的時(shí)候,也會(huì)重新插入一條新的數(shù)據(jù)來代替在原來數(shù)據(jù)上修改。新的數(shù)據(jù)的timestamp會(huì)大于老的數(shù)據(jù),這樣讀取的時(shí)候,判斷時(shí)間戳就可以取出最新的數(shù)據(jù)了。
由于HBase這樣的刪除和更新機(jī)制,如果后面沒有一個(gè)對(duì)于過期數(shù)據(jù)處理的機(jī)制,會(huì)導(dǎo)致過期數(shù)據(jù)越來越大,因此后面的compact操作中的major compact就順便將過期的數(shù)據(jù)刪除掉了。
對(duì)于標(biāo)記為刪除的數(shù)據(jù),直接刪除。對(duì)于不同時(shí)間戳的多條數(shù)據(jù),根據(jù)其保存的最大版本數(shù)據(jù),刪除過期的數(shù)據(jù)。當(dāng)然做major compact的原因不僅僅能夠刪除過期數(shù)據(jù),還有其他原因,比如合并數(shù)量過多的HFile,具體機(jī)制以后再分析。

參考:
http://blog.csdn.net/iam333/article/details/40431371
https://www.zhihu.com/question/21849618/answer/128580488

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容