hregionmaster:
一台伺服器隻能個hrs服務==hrs的單元是一台伺服器 或者hrs的單元是一個節點
Hregion:
大多數情況下,一個Hregion代表一張表的一部分的資料(當一張表隻有一個region的時候,就是代表整個表的資料内容)
store:一個region含有多個ms,一個master代表一個列族當中的資料,
Store中存儲的就是一個一個單元格的資料内容,也就是cell,所有真實的資料,最終就是在store中。
hbase的底層存儲是hdfs,由于資料量大,如果單條寫入,hdfs的效率會非常差,是以采用批量存入的方式來存儲到hdfs——————–Memstore
Menstore:資料最開始進入的地方,就是menstore,也就是記憶體當中的資料,
由于Menstore中的資料是存在記憶體中,可能會出現資料丢失的可能,是以當Memstore中的資料達到一定量的時候,将資料持久化到storefile,
Storefile:将資料封裝成一個一個hfile,Storefile其實是一個邏輯檔案
Hfile:真正往hdfs寫的一個一個的資料單元,,存儲資料的實體檔案
什麼時候産生storefile:當Memstore中的資料達到一定量的時候,資料持久化寫入到storefile中,形成一個一個的hfile
為什麼資料最開始進入memstore,積累到一定的量的時候,再進入hfile?
答:速度快 資料寫入記憶體和記憶體中讀資料,都會很快
Hlog:
由于存儲資料的流程是:當Memstore中的資料達到一定量的時候,資料持久化寫入到storefile中,假如資料在達到一定的量之前,還未寫入storefile中,此時發生意外,資料很有可能會丢失,
為什麼還有hlog???
防止memstore當中的資料丢失
Hlog的資料,是直接寫入到hdfs中的
為什麼不直接寫入到hdfs中,而是先寫入到menstore,并且還要寫入到hlog?
時間:資料寫入memstor中的時間比hlog直接寫入hdfs短
但是:資料寫入到hdfs結束時,兩者的時間會不一樣,因為資料寫入有rowkey的預設排序歸規則,也就是字典排序,由于寫入的資料,不能确定與原來的資料相比較大小排序,是以需要在memstore中查找,插入進行排序
若ms中的資料丢失,如何恢複?
Hlog直接将需要恢複的資料,資料寫入memstore中,memstore進行排序操作,hfile再寫入hdfs
什麼時候才會使用hlog中的資料?
當記憶體中memstore資料丢失,平時不會使用hlog
不同的版本對hlog寫入資料有不同的說明,最新:
Hlog的資料一直直接追加到hdfs,不排序
表的最終的存儲的地方是按照region來分的
一個region涵蓋多個列族
為什麼一個store中有很多個storefile?
每寫入一次,會寫入多個hfile,
每重新整理一次,就會形成一個一個的hfile檔案
當log和memstore中的資料都寫好以後,才傳回給使用者,資料完成
資料先到hlog,再到memstore
一張表的資料到底是在一個regionserver裡面還是多個?
多個
當一張表,region超過1以後,就會将region的資料去做負載均衡的操作,
負載均衡的好處:
1.寫資料:假如寫入2條資料,若沒有負載均衡,隻有第一條資料完成以後,第二條資料才能開始,如果做了負載均衡,兩個region同時開工,并行方式寫資料
2.讀資料:同時讀取兩條資料,如果是負載均衡,2個region同時去拿,不需要排隊等待
為什麼将一張表切分成多個
記憶體資料:memstore
硬碟資料:hlog hfile
Hdfs:hadoop分布式檔案管理系統,主要的作用是:在我們的硬碟中,把多塊硬碟同時做相應的存儲和查詢
Region和Region伺服器RegionServer:
表在行方向上,按照行鍵(rowkey)範圍劃分成若幹的Region
每個表最初隻有一個region,當記錄數增加到超過某個門檻值時,開始分裂成兩個region(針對預設的建立方式),也可以采用預分期的方式,建立表時就設定region的數量、範圍
實體上所有資料存放在HDFS,由Region伺服器提供region的管理
一台實體節點隻能跑一個HRegionServer
一個Hregionserver可以管理多個Region執行個體和多個HLOG:
老版本的Hregionserver:多個region、一個hlog
新版本的Hregionserver:一個region就對應一個hlog
一個Region存放多個資料的Store(代表一個列族的資料)
Hmaster作為總控節點
Zookeeper負責排程 Zookeeper是一個單獨的産品,不屬于habse
Hbase沒有副本機制,因為所有的資料都會存儲在hdfs,是以hdfs系統采用了多少個副本數,hbase同樣有多少個副本,包括habse的中繼資料資訊表,hbase:meta表,也會存儲在hdfs中,是以,隻有hdfs存在,hbase就不會出現資料丢失的可能
HLog:
1.用于災難恢複—–記憶體中也就是memstore當中的資料存在丢失
2.預寫式日志,記錄所有更新操作,操作先記錄進日志,資料才會寫入
Wals: 預寫式日志 hlog存儲
在配置hbase的分布式的時候,有root.dar這個配置,作用就是将我們hbase的資料,放到hdfs中,50070可以檢視,
WALS這個目錄就是hlog存儲資料的位置目錄
Memstore與storefile:
1.一個region由多個store組成,每個store包含一個列族的所有資料
2.Store包括位于記憶體的memstore和位于硬碟的storefile
3.寫操作先寫入memstore,當memstore中的資料量達到某個門檻值,Hregionserver會啟動flashcache程序寫入storefile,每次寫入形成單獨一個storefile(也就是hfile)
4.當storefile檔案的數量增長到一定門檻值後,系統會進行合并,在合并過程中會進行版本合并和删除工作,形成更大的storefile
5.當storefile大小超過一定門檻值後,會把目前的region分割為兩個,并由Hmaster配置設定到相應的region伺服器,實作負載均衡
6.用戶端檢索資料時,先在memstore找,找不到再找storefile
Memstore與storefile存儲在哪裡?存儲在store中
Data
Hbseid
Oldwals:
Memstor與storfile的 區分:
建立一個表
寫一條資料:
此時資料在記憶體中,hdfs中沒有
記憶體中的量,一般是64M 128M
—-=======重新整理表
手動幹預将記憶體的資料不到一定量就立馬寫入到hdfs’中
什麼時候會将記憶體中的資料寫入到hdfs:
1.手動執行flush重新整理操作
2.出現故障之後,hlog的資料寫入到記憶體之後,有些hbase的版本,在ms排序之後。會直接寫成hfile
3.内容大小達到hdfs限定值的時候
是不是所有的hdfs檔案的大小都是一樣的? 答:不是
如何保證我們在讀取的時候是完整的資料呢 ?
答:用戶端檢索資料時,先在memstore找,找不到再找storefile
存儲在記憶體中,因為對于整個同一個store的資料,怎麼才能包含完整的資料呢?包含所有的hfile再加上msmstore的資料,才能形成完整的資料
思考:
新資料和老資料,那個用的多? 新資料
=====得知結論:不管是讀和寫,都是先走memstore
Memstore與storefile:
當我們執行put delete incr等操作時,會先聯系hregionserver,hregionserver會将資料先寫入hlog中,當hlog資料寫完以後,再往具體的hregion中寫入。存儲時就會先進入memstore中,再将我們ms的資料,持久化放到storefile中
用戶端Client:
1.整個HBase叢集的入口(hbase shell、jdbc、)
2.使用HBase RPC機制與HMaster和HRegionserver通信
我們連接配接位址時連接配接的zookeeper的端口,并不是hmaster
3.與HMaster通信進行管理類的操作
4.與HRegionserver通信進行讀寫類操作
當你有讀或者是寫的操作的時候,效需率高的原因之一是因為不需要和hmaster之間通信,而hdfs的讀寫,每次都要和namennode之間通信,擷取相應的路由資訊,才知道往哪個datanode上存儲,而hbase中,隻需找到對應的hregionserver
思考:怎麼知道需要的hregionserver在哪個主機上?
5.包含通路HBase的接口,并維護cache(緩存)來加快對HBase的通路,與HRegionserver互動
底層通信位址:rpc
HBase子產品 – Region :
1.将一個資料表按Key值範圍橫向劃分為一個個的子表,實作分布式存儲。
2.這個子表,在HBase中被稱“ Region”。
3.每一個Region都關聯一個Key值範圍,即一個使用StartKey和EndKey描述的區間。事實上,每一個Region僅僅記錄StartKey就可以了,因為它的EndKey就是下一個Region的StartKey。(每一個region的最後的endkey沒有包含在region)
4.Region是HBase分布式存儲的最基本單元。
Rowkey有什麼要求?特點是什麼?
1.字典排序
2.唯一
Region與RegionServer :
1.RegionServer是HBase的資料服務程序。負責處理使用者資料的讀寫請求。
當我們要執行一個操作的時候,直接找regionserver
2.Region被交由RegionServer管理。實際上,所有使用者資料的讀寫請求,都是和RegionServer上的Region進行互動。
Region包含了所有的資料
3.Region可以在RegionServer之間發生轉移。
什麼時候會發送轉移:故障 轉移時不需要轉移hdfs的資料,隻需要把關聯資訊轉移到新的regionserver
一張表有很多的region組成,這些region可以放到不同的region上去:實作并行化,可以同時多查詢 多寫入
思考:
一個Region包含了一個Startkey和EndKey範圍;
一條使用者資料KeyValue必然屬于一個唯一的Region;
Region由RegionServer來管理,那麼,這個路由信
息儲存在哪裡呢?
Hbase_meta表中
包含:确定表資訊 、确定region資訊、
===是以,這個路由資訊就存在hbase的這張中繼資料表中:habse——meta
Region如何才可以轉移?由誰負責轉移? (master完成操作)
答:某一個regionserver挂掉,移動到另外一台主機上
Region由一個變成2個的時候,通常移動到
另外一台主機上,做負載均衡
當我們插入或者是查詢的時候,是如何定位的
get ‘表名’,’rowkey’
1.1 定位表是否存在
1.2 拿到該張表有哪些region[每一個region在哪一個regionServer上]
1.3 根據我們需要查詢的rowkey,從region的資料當中去判斷,我們需要得到的資料在哪一個regionServer上
1.4 将我們的需求(put、get)交給對應的regionServer去處理
Region分類 :
User Region Meta Region
記錄hbase中繼資料的表:hbase_meta表,随着habse的資料增多,這個中繼資料也會一直增加,我們也需要盡量的讓這個表變的均衡,是以也會産生region,但是這個region我們不能控制,由hbase内部完成
Region分為中繼資料Region以及使用者Region兩類。
Meta Region記錄了每一個User Region的路由資訊。
到底是什麼路由資訊:找的region在哪個regionserver上
讀寫Region資料的路由,包括如下
幾步:
找尋Meta Region位址。
再由Meta Region找尋User Region位址。
關于meta表在版本之前有一定的區分
新版本當中:hbase:meta表--->meta region---->user region
老版本 : .ROOT.—>.META.—>user region
1我們找資料的時候,先找.ROOT.表 [不會進行region劃分,隻有一個region,不需要管理region的資訊]
2會将你所找的資料在哪一個.Meta. region的路由發給你。
3在從meta的路由資訊中找到具體User region。
4從userRegion資訊中去找具體的RegionServer
———————–今晚結束,有很多内容比較亂,明天修改内容,晚安———–