Hbase读写数据的原理解析
- 目錄
- 1、體系圖
- 寫數(shù)據(jù)的流程(參考上圖):
- 讀數(shù)據(jù)的流程(參考下圖):
目錄
1、體系圖
針對(duì)上圖的一些解釋:
這里面數(shù)據(jù)分區(qū)(region)存儲(chǔ)是為了查詢方便(即因?yàn)槭羌核阅艹浞掷么疟P的IO性)。添加數(shù)據(jù)時(shí),數(shù)據(jù)先進(jìn)入Hlog–預(yù)寫日志(數(shù)據(jù)只能追加不能修改)<防止數(shù)據(jù)丟失>,數(shù)據(jù)在Hlog寫完后再寫到內(nèi)存中。
HFile:認(rèn)為是將數(shù)據(jù)進(jìn)行序列化。
StoreFile:認(rèn)為是一個(gè)文件。
DFS:調(diào)用HDFS的客戶端API來將數(shù)據(jù)傳到HDFS。
寫數(shù)據(jù)的流程(參考上圖):
1、客戶端向hregionServer請(qǐng)求寫數(shù)據(jù)
2、hregionServer將數(shù)據(jù)先寫入hlog中。
3、hregionServer將數(shù)據(jù)后寫入memstore中。
4、當(dāng)內(nèi)存中的數(shù)據(jù)達(dá)到閾值64M的時(shí)候,將數(shù)據(jù)Flush到硬盤中,并同時(shí)刪除內(nèi)存和hlog中的歷史數(shù)據(jù)。
5、將硬盤中數(shù)據(jù)通過HFile來序列化,再將數(shù)據(jù)傳輸?shù)紿DFS進(jìn)行存儲(chǔ)。并對(duì)Hlog做一個(gè)標(biāo)記。
6、當(dāng)HDFS中的數(shù)據(jù)塊達(dá)到4塊的時(shí)候,Hmaster將數(shù)據(jù)加載到本地進(jìn)行一個(gè)合并(如果合并后數(shù)據(jù)的大小小于256M則當(dāng)數(shù)據(jù)塊再次達(dá)到4塊時(shí)(包含小于256M的數(shù)據(jù)塊)將最新4塊數(shù)據(jù)塊再次進(jìn)行合并,此時(shí)數(shù)據(jù)塊大于256M)。
7、若數(shù)據(jù)塊大于256M,則將數(shù)據(jù)重新拆分,將分配后的region重新分配給不同的hregionServer進(jìn)行管理。
8、當(dāng)hregionServer宕機(jī)后,將hregionServer上的hlog重新分配給不同的hregionServer進(jìn)行加載(修改.META文件中關(guān)于數(shù)據(jù)所在server的信息)。注意:hlog會(huì)同步到HDFS中。
讀數(shù)據(jù)的流程(參考下圖):
1、通過zk來獲取ROOT表在那個(gè)節(jié)點(diǎn)上,然后進(jìn)一步通過-ROOT表和-META表來獲取最終的位置信息。
2、數(shù)據(jù)從內(nèi)存和硬盤合并后返回到客戶端。
PS:由上圖可看到,當(dāng)客戶端在執(zhí)行查詢語句的時(shí)候,會(huì)先到zk上尋找對(duì)應(yīng)-ROOT表(主要描述-META表在哪里)的位置信息(由此也知道ZK在Hbase中的作用),接下來根據(jù)-ROOT表中數(shù)據(jù)進(jìn)而找到對(duì)應(yīng)的HRegionServer,在對(duì)應(yīng)的HRegionServer上的-META表(主要記載表的元數(shù)據(jù)信息)中找到對(duì)應(yīng)的Table表在哪個(gè)HRegionServer上,再到對(duì)應(yīng)的HRegionServer中查找對(duì)應(yīng)的數(shù)據(jù)。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Hbase读写数据的原理解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 360浏览器在b站看直播html5,用3
- 下一篇: 《算法竞赛入门经典》——刘汝佳