大家好,我是不溫卜火,是一名計算機學院大數據專業大二的學生,暱稱來源於成語—
不溫不火
,本意是希望自己性情溫和
。作爲一名互聯網行業的小白,博主寫博客一方面是爲了記錄自己的學習過程,另一方面是總結自己所犯的錯誤希望能夠幫助到很多和自己一樣處於起步階段的萌新。但由於水平有限,博客中難免會有一些錯誤出現,有紕漏之處懇請各位大佬不吝賜教!暫時只有csdn這一個平臺,博客主頁:https://blog.csdn.net/qq_16146103
經過了一段時間的努力過後,我們學過了Kafka,那麼接下來我們繼續來進行Hbase的學習。
目錄
1. 什麼是HBase
HBase的原型是Google的BigTable論文,受到了該論文思想的啓發,目前作爲Hadoop的子項目來開發維護,用於支持結構化的數據存儲。
官方網站:http://hbase.apache.org
– 2006年Google發表BigTable白皮書
– 2006年開始開發HBase
– 2008年北京成功開奧運會,程序員默默地將HBase弄成了Hadoop的子項目
– 2010年HBase成爲Apache頂級項目
– 現在很多公司二次開發出了很多發行版本,你也開始使用了。
HBase是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBASE技術可在廉價PC Server上搭建起大規模結構化存儲集羣。
HBase的目標是存儲並處理大型的數據,更具體來說是僅需使用普通的硬件配置,就能夠處理由成千上萬的行和列所組成的大型數據。
HBase是Google Bigtable的開源實現,但是也有很多不同之處。比如:Google Bigtable利用GFS作爲其文件存儲系統,HBase利用Hadoop HDFS作爲其文件存儲系統;Google運行MAPREDUCE來處理Bigtable中的海量數據,HBase同樣利用Hadoop MapReduce來處理HBase中的海量數據;Google Bigtable利用Chubby作爲協同服務,HBase利用Zookeeper作爲對應。
2. HBase定義
HBase是一種分佈式、可擴展、支持海量數據存儲的NoSQL數據庫。
3. HBase特點
- 1.海量存儲
Hbase適合存儲PB級別的海量數據,在PB級別的數據以及採用廉價PC存儲的情況下,能在幾十到百毫秒內返回數據。這與Hbase的極易擴展性息息相關。正式因爲Hbase良好的擴展性,才爲海量數據的存儲提供了便利。
- 2.列式存儲
這裏的列式存儲其實說的是列族存儲,Hbase是根據列族來存儲數據的。列族下面可以有非常多的列,列族在創建表的時候就必須指定。
- 3.極易擴展
Hbase的擴展性主要體現在兩個方面,一個是基於上層處理能力(RegionServer)的擴展,一個是基於存儲的擴展(HDFS)。
通過橫向添加RegionSever的機器,進行水平擴展,提升Hbase上層的處理能力,提升Hbsae服務更多Region的能力。
備註:RegionServer的作用是管理region、承接業務的訪問,這個後面會詳細的介紹通過橫向添加Datanode的機器,進行存儲層擴容,提升Hbase的數據存儲能力和提升後端存儲的讀寫能力。
- 4.高併發
由於目前大部分使用Hbase的架構,都是採用的廉價PC,因此單個IO的延遲其實並不小,一般在幾十到上百ms之間。這裏說的高併發,主要是在併發的情況下,Hbase的單個IO延遲下降並不多。能獲得高併發、低延遲的服務。
- 5.稀疏
稀疏主要是針對Hbase列的靈活性,在列族中,你可以指定任意多的列,在列數據爲空的情況下,是不會佔用存儲空間的。
4. Hbase的數據模型
邏輯上,HBase的數據模型同關係型數據庫很類似,數據存儲在一張表中,有行有列。但從HBase的底層物理存儲結構(K-V)來看,HBase更像是一個multi-dimensional map
。
1. HBase邏輯結構
2. HBase物理存儲結構
3. 數據類型
- 1.Name Space
命名空間,類似於關係型數據庫的database概念,每個命名空間下有多個表。HBase兩個自帶的命名空間,分別是hbase和default,hbase中存放的是HBase內置的表,default表是用戶默認使用的命名空間。
- 2.Table
類似於關係型數據庫的表概念。不同的是,HBase定義表時只需要聲明列族即可,不需要聲明具體的列。這意味着,往HBase寫入數據時,字段可以動態、按需指定。因此,和關係型數據庫相比,HBase能夠輕鬆應對字段變更的場景。
- 3.Row
HBase表中的每行數據都由一個RowKey和多個Column(列)組成,數據是按照RowKey的字典順序存儲的,並且查詢數據時只能根據RowKey進行檢索,所以RowKey的設計十分重要。
- 4.Column
HBase中的每個列都由Column Family(列族)和Column Qualifier(列限定符)進行限定,例如info:name,info:age。建表時,只需指明列族,而列限定符無需預先定義。
- 5.Time Stamp
用於標識數據的不同版本(version),每條數據寫入時,系統會自動爲其加上該字段,其值爲寫入HBase的時間。
- 6.Cell
由{rowkey, column Family:column Qualifier, time Stamp} 唯一確定的單元。cell中的數據是沒有類型的,全部是字節碼形式存貯。
5. HBase架構
從圖中可以看出Hbase是由Client、Zookeeper、Master、HRegionServer、HDFS等幾個組件組成,下面來介紹一下幾個組件的相關功能:
- 1.Client
Client包含了訪問Hbase的接口,另外Client還維護了對應的cache來加速Hbase的訪問,比如cache的.META.元數據的信息。
- 2.Zookeeper
HBase通過Zookeeper來做master的高可用、RegionServer的監控、元數據的入口以及集羣配置的維護等工作。具體工作如下:
通過Zoopkeeper來保證集羣中只有1個master在運行,如果master異常,會通過競爭機制產生新的master提供服務
通過Zoopkeeper來監控RegionServer的狀態,當RegionSevrer有異常的時候,通過回調的形式通知MasterRegionServer上下線的信息
通過Zoopkeeper存儲元數據的統一入口地址
- 3.Hmaster
master節點的主要職責如下:
爲RegionServer分配Region
維護整個集羣的負載均衡
維護集羣的元數據信息
發現失效的Region,並將失效的Region分配到正常的RegionServer上
當RegionSever失效的時候,協調對應Hlog的拆分
- 4.HregionServer
HregionServer直接對接用戶的讀寫請求,是真正的“幹活”的節點。它的功能概括如下:
管理master爲其分配的Region
處理來自客戶端的讀寫請求
負責和底層HDFS的交互,
存儲數據到HDFS
負責Region變大以後的拆分
負責Storefile的合併工作
- 5.HDFS
HDFS爲Hbase提供最終的底層數據存儲服務,同時爲HBase提供高可用(Hlog存儲在HDFS)的支持,具體功能概括如下:
提供元數據和表數據的底層分佈式存儲服務
數據多副本,保證的高可靠和高可用性
6. HBase中的角色
1 HMaster
- 功能
- 1.監控RegionServer
- 2.處理RegionServer故障轉移
- 3.處理元數據的變更
- 4.處理region的分配或轉移
- 5.在空閒時間進行數據的負載均衡
- 6.通過Zookeeper發佈自己的位置給客戶端
2 RegionServer
- 功能
- 1.負責存儲HBase的實際數據
- 2.處理分配給它的Region
- 3.刷新緩存到HDFS
- 4.維護Hlog
- 5.執行壓縮
- 6.負責處理Region分片
3. 其他組件
- 1.Write-Ahead logs
HBase的修改記錄,當對HBase讀寫數據的時候,數據不是直接寫進磁盤,它會在內存中保留一段時間(時間以及數據量閾值可以設定)。但把數據保存在內存中可能有更高的概率引起數據丟失,爲了解決這個問題,數據會先寫在一個叫做Write-Ahead logfile的文件中,然後再寫入內存中。所以在系統出現故障的時候,數據可以通過這個日誌文件重建。
- 2.Region
Hbase表的分片,HBase表會根據RowKey值被切分成不同的region存儲在RegionServer中,在一個RegionServer中可以有多個不同的region。
- 3.Store
HFile存儲在Store中,一個Store對應HBase表中的一個列族。
- 4.MemStore
顧名思義,就是內存存儲,位於內存中,用來保存當前的數據操作,所以當數據保存在WAL中之後,RegsionServer會在內存中存儲鍵值對。
- 5.HFile
這是在磁盤上保存原始數據的實際的物理文件,是實際的存儲文件。StoreFile是以Hfile的形式存儲在HDFS的。
本次的分享就到這裏了,
好書不厭讀百回,熟讀課思子自知。而我想要成爲全場最靚的仔,就必須堅持通過學習來獲取更多知識,用知識改變命運,用博客見證成長,用行動證明我在努力。
如果我的博客對你有幫助、如果你喜歡我的博客內容,請“點贊” “評論”“收藏”
一鍵三連哦!聽說點讚的人運氣不會太差,每一天都會元氣滿滿呦!如果實在要白嫖的話,那祝你開心每一天,歡迎常來我博客看看。