小編給大家分享一下Hbase中對(duì)數(shù)據(jù)如何實(shí)現(xiàn)增刪改查,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
新安網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)建站于2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。
Hbase寫插入數(shù)據(jù)流程:
1、大體部分
如果將一張表看成是一個(gè)區(qū)域(region)的話,即每張表一開始只有一個(gè)region。往數(shù)據(jù)表中不斷的插入數(shù)據(jù),隨著數(shù)據(jù)不斷插入表,region不斷增大,當(dāng)增大到某個(gè)閥值的時(shí)候(百萬千萬級(jí)別),hbase會(huì)自動(dòng)對(duì)表進(jìn)行水平分成多個(gè)區(qū)域(區(qū)域大小一定但是行數(shù)不一定相同),每個(gè)區(qū)域都稱為一個(gè)region,每個(gè)region會(huì)保存一個(gè)表里面的某段連續(xù)的數(shù)據(jù)。當(dāng)表中的行數(shù)不斷增多,就會(huì)有越來越多的region。即一個(gè)regionserver中的region過多,這時(shí)候master就會(huì)將一部分region分配到其他的regionserver中,實(shí)現(xiàn)master負(fù)載均衡的功能。
2、縮小到每一個(gè)region
一個(gè)region由多個(gè)store組成,一個(gè)store對(duì)應(yīng)一個(gè)CF(列族);一個(gè)store包含了memstore和storefile(HFlie)。數(shù)據(jù)先寫入內(nèi)存中的memetore,memstore是內(nèi)存中的緩存區(qū),同時(shí)還會(huì)將 數(shù)據(jù)順序?qū)懭氲轿挥谟脖P中的Hlog文件中,該文件不僅僅是一個(gè)日志文件,同時(shí)還記錄了操作的數(shù)據(jù)信息,當(dāng)機(jī)器從宕機(jī)狀態(tài)下恢復(fù)到正常運(yùn)行狀態(tài),Hlog文件就會(huì)被讀進(jìn)內(nèi)存實(shí)現(xiàn)數(shù)據(jù)恢復(fù)。當(dāng)memstore中的數(shù)據(jù)達(dá)到某個(gè)閥值的時(shí)候,regionserver會(huì)啟動(dòng)一個(gè)flashcache的進(jìn)程將數(shù)據(jù)從memestore刷入storeflie,每次寫入形成單獨(dú)的一個(gè)storefile(Hfile)。
Hbase讀取數(shù)據(jù)流程:
1、存儲(chǔ)分布
表中的數(shù)據(jù)被切分到集群中,若要查詢數(shù)據(jù)需要知道該數(shù)據(jù)在第幾行以及被分到哪一臺(tái)regionserver中。然而master只負(fù)責(zé)負(fù)載均衡以及故障轉(zhuǎn)移,這時(shí)候需要構(gòu)建一個(gè)類似記錄存儲(chǔ)路徑的信息,這部分就由zookeeper來完成。
當(dāng)表中的數(shù)據(jù)多達(dá)上千萬甚至上億行時(shí),被切分的數(shù)據(jù)會(huì)被保存到一張叫META的表中,它也是hbase結(jié)構(gòu)中的一張表。該張表可簡單的認(rèn)為為兩列,行數(shù)不確定。META表中的每一行的行鍵保存描述某個(gè)region的存儲(chǔ)的行數(shù),對(duì)應(yīng)的第二列保存 該region被分配到的regionserver的ip地址。由此META表中的行數(shù)遠(yuǎn)比一張完整表的行數(shù)要少的多,但是依然保存了全部的數(shù)據(jù)信息。
雖然META表的行數(shù)已經(jīng)大大減少,但是可能隨著數(shù)據(jù)的不斷插入,行數(shù)可能會(huì)依然很大。這時(shí)候需要將META表中的數(shù)據(jù)需要再進(jìn)行一次類似的操作。因?yàn)镸ETA表同樣是hbase結(jié)構(gòu)中的一張表,同樣會(huì)被切分。META表被切分的“region”就會(huì)保存到一張與META表結(jié)構(gòu)類似的名為-ROOT-的表中,該張表只有一個(gè)region,永遠(yuǎn)不會(huì)被切分成多個(gè)region,zookeeper記錄了-ROOT-表的位置。-ROOT-表中的行鍵描述了META表被切分的多個(gè)region的存儲(chǔ)信息,即-ROOT-表中的一行對(duì)應(yīng)META表中的一個(gè)region,對(duì)應(yīng)的列同樣是記錄保存該信息的節(jié)點(diǎn)ip。這樣一來-ROOT-表中的一條數(shù)據(jù)就可能對(duì)應(yīng)著真實(shí)的上萬或上百萬的數(shù)據(jù)。
2、讀取定位
通過zookeeper里的文件得到-ROOT-表的位置。通過-ROOT-表查找META表的第一個(gè)表中相應(yīng)的region的位置。META表中的每一個(gè)region在-ROOT-表中都是一行記錄。通過META表找到所要的用戶表region的位置。用戶表中的每個(gè)region在META表中都是一行記錄。由于-ROOT-表永遠(yuǎn)不會(huì)被分隔為多個(gè)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á)到上限后,會(huì)啟動(dòng)淘汰機(jī)制,淘汰掉最老的一批數(shù)據(jù)。因此BlockCache中存儲(chǔ)的是一些頻繁被查詢的數(shù)據(jù)。
Hbase修改數(shù)據(jù)的流程:
1、時(shí)間戳
HBase 中通過 Row 和 Columns 確定的一個(gè)存儲(chǔ)單元稱為 Cell。每個(gè) Cell 都保存著同一份數(shù)據(jù)的多個(gè)版本。 版本通過時(shí)間戳來索引,時(shí)間戳的類型是 64 位整型。時(shí)間戳可以由HBase(在數(shù)據(jù)寫入時(shí)自動(dòng))賦值,此時(shí)時(shí)間戳是精確到毫秒的當(dāng)前系統(tǒng)時(shí)間。
2、修改數(shù)據(jù)
當(dāng)對(duì)數(shù)據(jù)進(jìn)行修改,修改的數(shù)據(jù)會(huì)將當(dāng)前的數(shù)據(jù)覆蓋,由hbase在寫入數(shù)據(jù)時(shí)自動(dòng)賦予修改數(shù)據(jù)后的時(shí)間戳,每個(gè) Cell 中,不同版本的數(shù)據(jù)按照時(shí)間倒序排序,即最新的數(shù)據(jù)排在最前面。保證每次獲取的數(shù)據(jù)時(shí)最新修改后的數(shù)據(jù)。
Hbase刪除數(shù)據(jù)的流程:
1、執(zhí)行delete操作并不是把數(shù)據(jù)真的刪除了,而是添加了一個(gè)標(biāo)記,代表此數(shù)據(jù)被刪除掉,直到hbase執(zhí)行大合并,才會(huì)真的從hfile中刪除數(shù)據(jù)
2、大合并和小合并
這里需要回到寫入數(shù)據(jù)到stofile說起,當(dāng)storefile的文件數(shù)量增長到一定閥值后,系統(tǒng)會(huì)進(jìn)行合并,在合并過程中會(huì)進(jìn)行版本合并和刪除工作,形成更大的stofile,這就是小合并。大合并則是指將一個(gè)列族的所有stoefile合并成一個(gè)文件。
看完了這篇文章,相信你對(duì)“Hbase中對(duì)數(shù)據(jù)如何實(shí)現(xiàn)增刪改查”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!