一 HBase 的起源
HBase 的原型是 Google 的 BigTable 論文,受到了該論文思想的啟發,目前作為 Hadoop 的子項目來開發維護,用於支持結構化的數據存儲。
Apache HBase™是Hadoop數據庫,這是一個分布式,可擴展的大數據存儲。
當您需要隨機,實時讀取/寫入您的大數據時使用Apache HBase™。該項目的目標是托管非常大的表 - 數十億行×數百萬列 - 在商品硬件集群上。Apache HBase是一個開源的,分布式的,版本化的非關系數據庫,其模型是由Chang等人在Google的Bigtable:一種用於結構化數據的分布式存儲系統之后建模的。就像Bigtable利用Google文件系統提供的分布式數據存儲一樣,Apache HBase在Hadoop和HDFS之上提供了類似Bigtable的功能。
官方舊版本下載地址:http://archive.apache.org/dist/hbase/ 官方網站:http://hbase.apache.org
-- 2006 年 Google 發表 BigTable 白皮書
-- 2006 年開始開發 HBase
-- 2008 年北京成功開奧運會,程序員默默地將 HBase 弄成了 Hadoop 的子項目
-- 2010 年 HBase 成為 Apache 頂級項目
-- 現在很多公司二次開發出了很多發行版本,你也開始使用了。
不一定所有的企業都會使用 HBase,大數據的框架可以是相互配合相互依賴的,同時,根據不同的業務,部分框架之間的使用也可以是相互獨立的。例如有些企業在處理整個業務時, 只是用 HDFS+Spark 部分的內容。所以在學習 HBase 框架時,一定要有宏觀思維,了解其框架特性,不一定非要在所有的業務中使用所有的框架,要具體情況具體分析,酌情選擇。
二 HBase在商業項目中的能力
每天:
1) 消息量:發送和接收的消息數超過 60 億
2) 將近 1000 億條數據的讀寫
3) 高峰期每秒 150 萬左右操作
4) 整體讀取數據占有約 55%,寫入占有 45%
5) 超過 2PB 的數據,涉及冗余共 6PB 數據
6) 數據每月大概增長 300 千兆字節。
三 HBase 的架構
HBase 一種是作為存儲的分布式文件系統,另一種是作為數據處理模型的 MR 框架。因為日常開發人員比較熟練的是結構化的數據進行處理,但是在 HDFS 直接存儲的文件往往不具有結構化,所以催生出了 HBase 在 HDFS 上的操作。如果需要查詢數據,只需要通過鍵值便可以成功訪問。
架構圖如下圖所示:
HBase 內置有 Zookeeper ,但一般我們會有其他的 Zookeeper 集群來監管 master 和region server,Zookeeper 通過選舉,保證任何時候,集群中只有一個活躍的 HMaster,HMaster與 HRegionServer 啟動時會向 ZooKeeper 注冊,存儲所有 HRegion 的尋址入口,實時監控HRegionserver 的上線和下線信息。並實時通知給 HMaster,存儲 HBase 的 schema 和 table 元數據,默認情況下,HBase 管理 ZooKeeper 實例,Zookeeper 的引入使得 HMaster 不再是單點故障。一般情況下會啟動兩個 HMaster,非 Active 的 HMaster 會定期的和 Active HMaster通信以獲取其最新狀態,從而保證它是實時更新的,因而如果啟動了多個 HMaster 反而增加了 Active HMaster 的負擔。
一個 RegionServer 可以包含多個 HRegion,每個 RegionServer 維護一個 HLog,和多個 HFiles以及其對應的 MemStore。RegionServer 運行於 DataNode 上,數量可以與 DatNode 數量一致, 請參考如下架構圖:
四 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 分片
組件:
1) Write-Ahead logs
HBase 的修改記錄,當對 HBase 讀寫數據的時候,數據不是直接寫進磁盤,它會在內存中保留一段時間(時間以及數據量閾值可以設定)。但把數據保存在內存中可能有更高的概率引起數據丟失,為了解決這個問題,數據會先寫在一個叫做 Write-Ahead logfile 的文件中, 然后再寫入內存中。所以在系統出現故障的時候,數據可以通過這個日志文件重建。
2) HFile
這是在磁盤上保存原始數據的實際的物理文件,是實際的存儲文件。
3) Store
HFile 存儲在 Store 中,一個 Store 對應 HBase 表中的一個列族。
4) MemStore
顧名思義,就是內存存儲,位於內存中,用來保存當前的數據操作,所以當數據保存在 WAL
中之后,RegsionServer 會在內存中存儲鍵值對。
5) Region
Hbase 表的分片,HBase 表會根據 RowKey 值被切分成不同的 region 存儲在 RegionServer 中,在一個 RegionServer 中可以有多個不同的 region。
五 HBase2.0 新特性
2017 年 8 月 22 日凌晨 2 點左右,HBase 發布了 2.0.0 alpha-2,相比於上一個版本,修復了
500 個補丁,我們來了解一下 2.0 版本的 HBase 新特性。最新文檔:
http://hbase.apache.org/book.html#ttl
官方發布主頁:
http://mail-archives.apache.org/mod_mbox/www-announce/201708.mbox/<CADcMMgFzmX0x
YYso-UAYbU7V8z-Obk1J4pxzbGkRzbP5Hps+iA@mail.gmail.com
舉例:
1) region 進行了多份冗余
主 region 負責讀寫,從 region 維護在其他 HregionServer 中,負責讀以及同步主 region 中的信息,如果同步不及時,是有可能出現 client 在從 region 中讀到了臟數據(主 region 還沒來得及把 memstore 中的變動的內容 flush)。
2) 更多變動
https://issues.apache.org/jira/secure/ReleaseNote.jspa?version=12340859&styleName=&projectId
=12310753&Create=Create&atl_token=A5KQ-2QAV-T4JA-FDED%7Ce6f233490acdf4785b697