歡迎來到魔據教育大數據學院,專注大數據工程師培養!
當前位置:首頁 > 學習資料 > 講師博文 > Hbase理論

Hbase理論

時間:2019-04-12 14:24:03作者:魔據大數據學院

還記得我們配置hbase的dir路徑嗎:

看hbase-site.xml
 
Hbase理論 
 
也就是說,我們目前的數據是保存到了家目錄的hbasedir這個路徑下
 
那么我們來看一下:
 
Hbase理論 
 
這個目錄里面存儲著數據行健和version數據
 
那么我們hbase的數據應該是存儲到HDFS才對是吧,那么接下來我們來改一改這個配置文件:
 
[[email protected] hbase-hive]$ vim hbase-1.2.5/conf/hbase-site.xml
 
<configuration>
<!-- 指定hbase數據存儲在hdfs的位置-->
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://master:9000/hbase</value>
        </property>
<!-- 指定hbase是否是分布式的 -->
        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>
<!-- 指定zooleeper的端口號 -->
        <property>
                <name>hbase.zookeeper.property.clientPort</name>
                <value>2181</value>
        </property>
<!-- 指定zk的地址,多個用“,”分割 ,咱們這是單節點-->
        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>master</value>
        </property>
<!-- zookeeper存儲數據的地址,咱們啟動的zookeeper是hbase自帶的-->
        <property>
                <name>hbase.zookeeper.property.dataDir</name>
                <value>/home/hyxy/hbase-hive/hbase-1.2.5/zookeeper</value>
        </property>
 
</configuration>
 
Hbase理論 
 
然后我們再編輯env.sh ,加入:
 
export HBASE_MANAGES_ZK=true  開啟hbase集群
 
Hbase理論 
 
保存退出
 
配置一下環境變量:
 
Hbase理論 
 
然后別忘了關閉hbase進程,再啟動hadoop然后再來開啟hbase
 
你不能不開啟hdfs就直接開啟hbase否則會報錯
 
Hbase理論 
 
這個時候我們jps查看一下:
 
Hbase理論 
 
你會發現多了三個進程
 
HMaster 進程Hbase的主節點,類似hadoop的namenode
HQuorumPeer 是zookpeer進程,負責協調主從節點的切換
HRegionServer 進程一般存在從節點上,就是小弟,負責存儲數據,類似hadoop的datanode
 
這個時候你再list,你會發現沒有一張表,因為hdfs上沒有數據
 
Hbase理論 
 
看一下hdfs:
 
Hbase理論 
 
有一個hbasedir 目錄,這個就是存放數據的目錄
 
接下來我們創建一張user表,表中有兩個列族,一個是info1 一個是info2
 
create 'user', 'info1', 'info2'
 
Hbase理論 
 
那么hbase是有web端的,那么查看hbase的web頁面很簡單:
 
在瀏覽器輸入:ip:60010即可
 
Hbase理論 
 
我們往下看tables那塊
 
Hbase理論 
 
很詳細的說了有多少張表,和表的信息
 
 
接下來咱們說一下hbase的理論:
 
1.物理存儲:
 Table 在行的方向上分割為多個HRegion,一個region由[startkey,endkey)表示(包左不包右),每個HRegion分散在不同的RegionServer中
在分布式存儲過程中,存儲的最小單位就是region,也就是說,hbase中表的數據是分割成多個region然后再放到hdfs中,我們想,如果將一張表放在一臺機器上,那么讀寫的時候一直訪問這一臺機器,機器壓力會很大,所以我們要分布式存儲,讀寫操作多臺機器,實現負載均衡,看下圖:
 
 
Hbase理論 
 
此圖將兩張表都分成了多個region,以row key進行分割,存儲在Region Servers , 也就是jps進程中的HRegion Server
Hbase理論 
 
那么到達了這個HRegion Server 后,并不是直接存儲在hdfs上的,而是先存儲在內存中,經過一系列的內部操作后,才會寫入到hdfs中,這點要記住
 
說完了region之后我們再來說一個重點:hbase表中row key 順序問題:
 
假設現在有一堆數字,讓你排序,你試著排一下:
 
1 11 21 41
 
現在加入一個2 和 5  ,看好下面hbase是怎么排的:
 
1 11 2 21 41 5
 
那么現在再加入一個50 和 20 怎么排?
 
1 11 2 20 21 41 5 50
 
也就是說,hbase的排序是根據第一位進行排序,同一位的數據根據下一位的大小再繼續拍
 
現在加入一個200怎么排?
 
1 11 2 20 200 21 41 5 50
 
這樣做的好處是每一位數字都在一起,例如這張表的row key是1到100那么就是1-9 之間都是分段排序,只要知道了開頭第一位數字就可以去相應的位置查詢,方便快捷
 
那么到這里我們總結一下:
 
Region是分布式存儲的最小單元,并且開始是存儲在Hregion Server內存中,最終存儲在
HDFS  存儲的格式是按照row key分割范圍存儲的, hbase的排序是非常特殊的字典排序,每一位都有一個區間范圍,方便查找
 
那么兩者結合一下,看下圖:
Hbase理論 
 
上圖一張表分為了5個region,并且分布式存儲在regionServers上,但是一個region也不見得就能保存[0,2)區間范圍的值,有可能1區間的數據非常大,那么這一個region可能1區間的值都存不下,所以還要酌情考慮
 
這里擴展一下:每個region能夠存儲的默認大小是128MB~256MB
 
接下來看下圖region的內部結構圖,挺復雜的:
 
Hbase理論 
 
其中Region包含了 HLog  Store MemStore StoreFile HFile
 
HLog存儲的是對寫入數據的存儲操作,類似于yarn中的elogs,當機器宕機時可以通過HLog進行恢復
 
Store:HRegin 雖然是負載均衡的最小單元,但并不是物理存儲的最小單元,事實上,HRegion由一個或者多個Store組成,每個store保存一個column family 列族,每個store又由一個memStore和0至多個StoreFile組成
 
一個 region 由多個 store 組成,每個 store 包含一個列族的所有數據 Store 包括位于內存
 
的 memstore 和位于硬盤的 storefile
 
寫操作先寫入 memstore,當 memstore 中的數據量達到某個閾值, HRegionServer 啟動
 
flushcache 進程寫入 storefile, 每次寫入形成單獨一個 Hfile
 
當 storefile 大小超過一定閾值后,會把當前的 storefile 分割成兩個
 
 
 
寫流程
1、 client向Zookeeper發送寫請求,zookeeper和Hmaster交互,反饋可以寫入
2、 Client向hregionserver 發送數據寫入
3、 hregionserver將數據寫到hlog(write ahead log)。為了數據的持久化和恢復。
4、 hregionserver將數據寫到內存(memstore)
5、 反饋client寫成功。
 
數據flush過程
1、 當memstore數據達到閾值(默認是128M),將數據刷到硬盤,將內存中的數據刪除,同時刪除Hlog中的歷史數據。
2、 并將數據存儲到hdfs中。
3、 在hlog中做標記點。
 
hbase的讀流程
1、 通過zookeeper和HMETA.表定位hregionserver。
2、 數據從內存和硬盤合并后返回給client
3、 數據塊會緩存
hmaster的職責
1、管理用戶對Table的增、刪、改、查操作;
2、記錄region在哪臺Hregion server上
3、在Region Split后,負責新Region的分配;
4、新機器加入時,管理HRegion Server的負載均衡,調整Region分布
5、在HRegion Server宕機后,負責失效HRegion Server 上的Regions遷移。
 
hregionserver的職責
HRegion Server主要負責響應用戶I/O請求,向HDFS文件系統中讀寫數據,是HBASE中最核心的模塊。
HRegion Server管理了很多table的分區,也就是region。
 
client職責
Client
HBASE Client使用HBASE的RPC機制與HMaster和RegionServer進行通信
管理類操作:Client與HMaster進行RPC;
數據讀寫類操作:Client與HRegionServer進行RPC。
 
好好理解一下,掌握了以上理論,我覺得你的hbase就學的差不多了;
 
接下來帶大家看一下hdfs上我們存儲的表信息:
 
如果想要知道數據存儲在哪,首先要看hbase-site.xml文件:
 
Hbase理論 
 
找一下:/hbase/data/default 路徑下
 
表信息:
Hbase理論 

更多大數據相關資訊敬請關注魔據教育,為您分享最及時的大數據資訊。
學習大數據敬請關注魔據教育微信二維碼。
魔據教育微信二維碼

【版權與免責聲明】如發現內容存在版權問題,煩請提供相關信息發郵件至[email protected],我們將及時溝通與處理。本站內容除非來源注明魔據教育,否則均為網友轉載,涉及言論、版權與本站無關。

全國咨詢熱線:18501996998,值班手機:18501996998(7*24小時)

在線咨詢:張老師QQ 320169340

企業合作服務專線:010-82340234-821, 院校合作洽談專線:010-82340234

Copyright 2001-2019 魔據教育 - 北京華育興業科技有限公司 版權所有,京ICP備17018991號-2

免費在線咨詢立即咨詢

免費索取技術資料立即索取

大數據技術交流QQ:226594285

電話咨詢010-82340234

六合图库118万众图库