您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關HBase體系結構是怎么樣的的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
HBase是Apache hadoop集群中常用的非關系型數據,它是一種開源的、分布式的、多版本、面向列存儲的數據庫。
它的源碼在 https://github.com/apache/hbase 上,妥妥的開源啊。。。
分布式是因為它的數據最后存儲在HDFS上,所以它繼承了hadoop分布式的優良傳統(不知道能否這么理解)。
多版本就不多介紹了,版本更新快唄。。。
面向列的存儲是它與傳統關系型數據庫最大的區別之一,它是根據rowKey、columnfamily、quaifer、timestamp(如果你有多版本的話)得到你最后的value值。。這個咱們以后再介紹,今天主要想寫的是hbase的體系結構。
hbase的服務器體系結構也是主從服務器架構,分為HBase Master server和HRegionServers。
HBase Master server :主服務器,主要負責管理HRegionServers,個人理解:只是關于HRegionServer的決策權都是由它完成的。
具體的功能有:
1.用戶對Table的增、刪、改、查。
2。HRegionServer的負載均衡,調整HRegion的分布,像一個HRegionserver掛了,master會將掛了的HRegionserver上面的HRegion重新拿到,標上未分配,然后再分配一個活的HRegionServer,當然,它也得先詢問下這個HRegionServer要不要了。。
3.在HRegion分裂后,負責新的HRegion的分配。 默認的HRegion的大小為64M,當超過這個大小的時候,它會自動分裂成兩個,并且這個拆分速度很快,因為它在拆分的時候先會創建兩個HRegion,而這兩個HRegion先會保存對原HRegion的引用,當這兩個新的HRegion數據拆分完成后,再將此引用去掉,并刪除原HRegion。現在拆分完了,但是HRegion不是拆分完了就沒事干了,它得找個HRegionServer管理啊,so,又得HBase Master Server分配了,同上~~
4.HRegionServer停機后,負責失效的HRegionServer上的HRegion分配。服務掛了,但是HRegion沒掛啊,HRegion可以說是一個存儲文件夾,一個服務掛了,找頭(hbase master server)再找一個唄,然后繼續做著保存或查詢時被提取數據的工作。
HRegionServer的構成:
HRegionServer包含了一個HLog部分和HRegion部分(多個HRegion)。。
ps:這地方可能有些異議,因為網上一些圖片顯示的都是HRegion里才包含HLog,網上的資料比較老,所以這里我參考《hadoop實戰》中的資料,它的版本是0.92,可能與現在的0.96版本還算比較接近的。。
HLog部分保存著用戶操作hbase的日志(不排除也包含master管理hregion的操作,明天看一下),用戶的操作都會先記錄到HLog中,然后再保存到HRegion中。
而HRegion其實就是存儲的實際數據了。它包含了多個HStore。
HStore:每一個列族都會形成一個HStore,它又由MemStore和多個HFile組成。
MemStore駐留在內存中,當數據保存時,數據會先存儲到MemStore中,然后根據用戶設定的顯式刷寫或隱式刷寫模式,將數據再保存到HFile中。默認的存儲模式是隱式存儲。這個以后寫client api的時候再介紹。。當然,這地方還有個注意的地方,當數據保存到MemStore,最后卻沒有保存到HFile中時,死機了。。HLog的作用來了,用戶操作的指令保存在HLog中,它會將指令執行,再將重新保存到MemStore中,這樣就可以完成后面的操作了。。
HFile負責的是實際數據的存儲了,它是HBase中的最小單位了。它也可以進行拆分,也就是所謂的分區,讓數據更加分散,讀取數據的時候更加效率。
昨天未寫完的部分今天補上。。
HBase的兩個主要結構介紹完了,那么咱們現在就開始介紹一下它的存儲流程和讀取的流程。。
將它作為一個流程圖可能不太合適。。不過它里面所需要的東西基本都包含了。。
先說下Zookeeper的作用:
存儲了Root表的地址和HMaster的地址。存儲ROOT的地址可以更快的查詢到哪張表有數據,提高運算效率。存儲HMaster地址是為了確定有哪些HMaster。
管理著MHaster。當HMaster失效時,它可以找到另一個HMaster,避免HMaster單點故障。
ROOT與.META與Region的結構是一樣的,都是以鍵值對的形式保存數據。。
ROOT里面存儲了對應的.META地址和開始結束信息(像1-5,說明ROOT里面存儲了5個.META的地址信息)。
.META里面同樣存儲了對應的HRegion地址和開始結束信息。
好了,現在開始通過從客戶端讀取信息的角度開始分析了:
client要讀取信息,先查詢下client 端的cache中是否存在數據,如果存在,剛直接返回數據。如果不存在,則進入到zookeeper,查找到里面的相應數據存在的Root表中的地址。
通過數據存在ROOT表中地址找到.META,最終找到HRegion。找到HRegion后,它會先訪問MemStore中是否存在數據,如果存在,則直接讀取。如果沒有,就再到HFile中查找數據,并將數據放到MemStore。
最后數據返回到客戶端顯示。。
存儲數據流程:
由于Hbase中默認的刷寫方式是隱式刷寫,所以你在put()數據時,它會自動保存到HRegion上,但當你批量處理數據時,它會將數據先保存到client端的cache中。當你關閉隱式刷寫時,你put()的數據則會保存到client cache中,直到你調用刷寫命令時,才會保存到HRegion中。具體的命令等明天我去公司的時候貼上來。。在家沒環境。。
在HRegion部分的存儲:要寫入的數據會先寫到HMemcache 和Hlog 中,HMemcache 建立緩存,Hlog 同步Hmemcache和Hstore 的事務日志,發起Flush Cache 時,數據持久化到Hstore 中,并清空HMemecache。
此處需要關注:
HBase 寫數據,首先寫入Memcache,并計入Log中,最后寫入HStore中,如果在寫入HStore是發生系統異常,就可以從Log中恢復數據,重新寫 入HStore中。
感謝各位的閱讀!關于“HBase體系結構是怎么樣的”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。