您好,登錄后才能下訂單哦!
小編給大家分享一下Hbase中對數據如何實現增刪改查,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
Hbase寫插入數據流程:
1、大體部分
如果將一張表看成是一個區域(region)的話,即每張表一開始只有一個region。往數據表中不斷的插入數據,隨著數據不斷插入表,region不斷增大,當增大到某個閥值的時候(百萬千萬級別),hbase會自動對表進行水平分成多個區域(區域大小一定但是行數不一定相同),每個區域都稱為一個region,每個region會保存一個表里面的某段連續的數據。當表中的行數不斷增多,就會有越來越多的region。即一個regionserver中的region過多,這時候master就會將一部分region分配到其他的regionserver中,實現master負載均衡的功能。
2、縮小到每一個region
一個region由多個store組成,一個store對應一個CF(列族);一個store包含了memstore和storefile(HFlie)。數據先寫入內存中的memetore,memstore是內存中的緩存區,同時還會將 數據順序寫入到位于硬盤中的Hlog文件中,該文件不僅僅是一個日志文件,同時還記錄了操作的數據信息,當機器從宕機狀態下恢復到正常運行狀態,Hlog文件就會被讀進內存實現數據恢復。當memstore中的數據達到某個閥值的時候,regionserver會啟動一個flashcache的進程將數據從memestore刷入storeflie,每次寫入形成單獨的一個storefile(Hfile)。
Hbase讀取數據流程:
1、存儲分布
表中的數據被切分到集群中,若要查詢數據需要知道該數據在第幾行以及被分到哪一臺regionserver中。然而master只負責負載均衡以及故障轉移,這時候需要構建一個類似記錄存儲路徑的信息,這部分就由zookeeper來完成。
當表中的數據多達上千萬甚至上億行時,被切分的數據會被保存到一張叫META的表中,它也是hbase結構中的一張表。該張表可簡單的認為為兩列,行數不確定。META表中的每一行的行鍵保存描述某個region的存儲的行數,對應的第二列保存 該region被分配到的regionserver的ip地址。由此META表中的行數遠比一張完整表的行數要少的多,但是依然保存了全部的數據信息。
雖然META表的行數已經大大減少,但是可能隨著數據的不斷插入,行數可能會依然很大。這時候需要將META表中的數據需要再進行一次類似的操作。因為META表同樣是hbase結構中的一張表,同樣會被切分。META表被切分的“region”就會保存到一張與META表結構類似的名為-ROOT-的表中,該張表只有一個region,永遠不會被切分成多個region,zookeeper記錄了-ROOT-表的位置。-ROOT-表中的行鍵描述了META表被切分的多個region的存儲信息,即-ROOT-表中的一行對應META表中的一個region,對應的列同樣是記錄保存該信息的節點ip。這樣一來-ROOT-表中的一條數據就可能對應著真實的上萬或上百萬的數據。
2、讀取定位
通過zookeeper里的文件得到-ROOT-表的位置。通過-ROOT-表查找META表的第一個表中相應的region的位置。META表中的每一個region在-ROOT-表中都是一行記錄。通過META表找到所要的用戶表region的位置。用戶表中的每個region在META表中都是一行記錄。由于-ROOT-表永遠不會被分隔為多個region,保證了最多需要三次跳轉,就能定位到任意的region。
3、數據交互
定位到region,開始先從Memstore查數據,若找不到再和與Memstore處于同一內存空間的BlockCache中查數據若Memstore和BlockCache這兩塊內存都沒有要查找的數據,則需要從硬盤的HFile中獲取。把讀到的結果放入BlockCache。由于BlockCache采用的是LRU策略,因此BlockCache達到上限后,會啟動淘汰機制,淘汰掉最老的一批數據。因此BlockCache中存儲的是一些頻繁被查詢的數據。
Hbase修改數據的流程:
1、時間戳
HBase 中通過 Row 和 Columns 確定的一個存儲單元稱為 Cell。每個 Cell 都保存著同一份數據的多個版本。 版本通過時間戳來索引,時間戳的類型是 64 位整型。時間戳可以由HBase(在數據寫入時自動)賦值,此時時間戳是精確到毫秒的當前系統時間。
2、修改數據
當對數據進行修改,修改的數據會將當前的數據覆蓋,由hbase在寫入數據時自動賦予修改數據后的時間戳,每個 Cell 中,不同版本的數據按照時間倒序排序,即最新的數據排在最前面。保證每次獲取的數據時最新修改后的數據。
Hbase刪除數據的流程:
1、執行delete操作并不是把數據真的刪除了,而是添加了一個標記,代表此數據被刪除掉,直到hbase執行大合并,才會真的從hfile中刪除數據
2、大合并和小合并
這里需要回到寫入數據到stofile說起,當storefile的文件數量增長到一定閥值后,系統會進行合并,在合并過程中會進行版本合并和刪除工作,形成更大的stofile,這就是小合并。大合并則是指將一個列族的所有stoefile合并成一個文件。
看完了這篇文章,相信你對“Hbase中對數據如何實現增刪改查”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。