溫馨提示×

溫馨提示×

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

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

Hbase中對數(shù)據(jù)如何實現(xiàn)增刪改查

發(fā)布時間:2021-12-09 10:12:51 來源:億速云 閱讀:844 作者:小新 欄目:大數(shù)據(jù)

小編給大家分享一下Hbase中對數(shù)據(jù)如何實現(xiàn)增刪改查,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

Hbase寫插入數(shù)據(jù)流程:

Hbase中對數(shù)據(jù)如何實現(xiàn)增刪改查

1、大體部分

如果將一張表看成是一個區(qū)域(region)的話,即每張表一開始只有一個region。往數(shù)據(jù)表中不斷的插入數(shù)據(jù),隨著數(shù)據(jù)不斷插入表,region不斷增大,當(dāng)增大到某個閥值的時候(百萬千萬級別),hbase會自動對表進(jìn)行水平分成多個區(qū)域(區(qū)域大小一定但是行數(shù)不一定相同),每個區(qū)域都稱為一個region,每個region會保存一個表里面的某段連續(xù)的數(shù)據(jù)。當(dāng)表中的行數(shù)不斷增多,就會有越來越多的region。即一個regionserver中的region過多,這時候master就會將一部分region分配到其他的regionserver中,實現(xiàn)master負(fù)載均衡的功能。

2、縮小到每一個region

一個region由多個store組成,一個store對應(yīng)一個CF(列族);一個store包含了memstore和storefile(HFlie)。數(shù)據(jù)先寫入內(nèi)存中的memetore,memstore是內(nèi)存中的緩存區(qū),同時還會將 數(shù)據(jù)順序?qū)懭氲轿挥谟脖P中的Hlog文件中,該文件不僅僅是一個日志文件,同時還記錄了操作的數(shù)據(jù)信息,當(dāng)機(jī)器從宕機(jī)狀態(tài)下恢復(fù)到正常運(yùn)行狀態(tài),Hlog文件就會被讀進(jìn)內(nèi)存實現(xiàn)數(shù)據(jù)恢復(fù)。當(dāng)memstore中的數(shù)據(jù)達(dá)到某個閥值的時候,regionserver會啟動一個flashcache的進(jìn)程將數(shù)據(jù)從memestore刷入storeflie,每次寫入形成單獨的一個storefile(Hfile)。

Hbase讀取數(shù)據(jù)流程:

Hbase中對數(shù)據(jù)如何實現(xiàn)增刪改查

1、存儲分布

表中的數(shù)據(jù)被切分到集群中,若要查詢數(shù)據(jù)需要知道該數(shù)據(jù)在第幾行以及被分到哪一臺regionserver中。然而master只負(fù)責(zé)負(fù)載均衡以及故障轉(zhuǎn)移,這時候需要構(gòu)建一個類似記錄存儲路徑的信息,這部分就由zookeeper來完成。

當(dāng)表中的數(shù)據(jù)多達(dá)上千萬甚至上億行時,被切分的數(shù)據(jù)會被保存到一張叫META的表中,它也是hbase結(jié)構(gòu)中的一張表。該張表可簡單的認(rèn)為為兩列,行數(shù)不確定。META表中的每一行的行鍵保存描述某個region的存儲的行數(shù),對應(yīng)的第二列保存  該region被分配到的regionserver的ip地址。由此META表中的行數(shù)遠(yuǎn)比一張完整表的行數(shù)要少的多,但是依然保存了全部的數(shù)據(jù)信息。

雖然META表的行數(shù)已經(jīng)大大減少,但是可能隨著數(shù)據(jù)的不斷插入,行數(shù)可能會依然很大。這時候需要將META表中的數(shù)據(jù)需要再進(jìn)行一次類似的操作。因為META表同樣是hbase結(jié)構(gòu)中的一張表,同樣會被切分。META表被切分的“region”就會保存到一張與META表結(jié)構(gòu)類似的名為-ROOT-的表中,該張表只有一個region,永遠(yuǎn)不會被切分成多個region,zookeeper記錄了-ROOT-表的位置。-ROOT-表中的行鍵描述了META表被切分的多個region的存儲信息,即-ROOT-表中的一行對應(yīng)META表中的一個region,對應(yīng)的列同樣是記錄保存該信息的節(jié)點ip。這樣一來-ROOT-表中的一條數(shù)據(jù)就可能對應(yīng)著真實的上萬或上百萬的數(shù)據(jù)。

2、讀取定位

通過zookeeper里的文件得到-ROOT-表的位置。通過-ROOT-表查找META表的第一個表中相應(yīng)的region的位置。META表中的每一個region在-ROOT-表中都是一行記錄。通過META表找到所要的用戶表region的位置。用戶表中的每個region在META表中都是一行記錄。由于-ROOT-表永遠(yuǎn)不會被分隔為多個region,保證了最多需要三次跳轉(zhuǎn),就能定位到任意的region。

3、數(shù)據(jù)交互

定位到region,開始先從Memstore查數(shù)據(jù),若找不到再和與Memstore處于同一內(nèi)存空間的BlockCache中查數(shù)據(jù)若Memstore和BlockCache這兩塊內(nèi)存都沒有要查找的數(shù)據(jù),則需要從硬盤的HFile中獲取。把讀到的結(jié)果放入BlockCache。由于BlockCache采用的是LRU策略,因此BlockCache達(dá)到上限后,會啟動淘汰機(jī)制,淘汰掉最老的一批數(shù)據(jù)。因此BlockCache中存儲的是一些頻繁被查詢的數(shù)據(jù)。

Hbase修改數(shù)據(jù)的流程:

1、時間戳

HBase 中通過 Row 和 Columns 確定的一個存儲單元稱為 Cell。每個 Cell 都保存著同一份數(shù)據(jù)的多個版本。 版本通過時間戳來索引,時間戳的類型是 64 位整型。時間戳可以由HBase(在數(shù)據(jù)寫入時自動)賦值,此時時間戳是精確到毫秒的當(dāng)前系統(tǒng)時間。

2、修改數(shù)據(jù)

當(dāng)對數(shù)據(jù)進(jìn)行修改,修改的數(shù)據(jù)會將當(dāng)前的數(shù)據(jù)覆蓋,由hbase在寫入數(shù)據(jù)時自動賦予修改數(shù)據(jù)后的時間戳,每個 Cell 中,不同版本的數(shù)據(jù)按照時間倒序排序,即最新的數(shù)據(jù)排在最前面。保證每次獲取的數(shù)據(jù)時最新修改后的數(shù)據(jù)。

Hbase刪除數(shù)據(jù)的流程:

1、執(zhí)行delete操作并不是把數(shù)據(jù)真的刪除了,而是添加了一個標(biāo)記,代表此數(shù)據(jù)被刪除掉,直到hbase執(zhí)行大合并,才會真的從hfile中刪除數(shù)據(jù)

2、大合并和小合并

這里需要回到寫入數(shù)據(jù)到stofile說起,當(dāng)storefile的文件數(shù)量增長到一定閥值后,系統(tǒng)會進(jìn)行合并,在合并過程中會進(jìn)行版本合并和刪除工作,形成更大的stofile,這就是小合并。大合并則是指將一個列族的所有stoefile合并成一個文件。

看完了這篇文章,相信你對“Hbase中對數(shù)據(jù)如何實現(xiàn)增刪改查”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向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