本文將介紹大數據的知識和Hbase的基本概念,作為大數據體系中重要的一員,Hbase彌補了Hadoop只能離線批處理的不足,支持存儲小文件,隨機檢索。而這種特性使得Hbase對於實時計算體系的事件存儲有天然的較好的支持。這使得Hbase在實時流式計算中也扮演者重要的角色。 1、大數據與Hbase 大 ...
本文將介紹大數據的知識和Hbase的基本概念,作為大數據體系中重要的一員,Hbase彌補了Hadoop只能離線批處理的不足,支持存儲小文件,隨機檢索。而這種特性使得Hbase對於實時計算體系的事件存儲有天然的較好的支持。這使得Hbase在實時流式計算中也扮演者重要的角色。
1、大數據與Hbase
大數據在近幾年發展迅速,而實時計算也是一個重要的發展趨勢。不管是企業中的日誌數據,還是感測器、智能設備等等產生的數據,不計其數。
而這些數據中結構化的數據只占一小部分,大部分是非結構化的數據。這個時候,比如圖片視頻等就不能輕鬆的存儲在關係型資料庫中,而大數據是可以對各種類型的數據都可以進行處理的。
但關係型資料庫有幾點缺陷:
無法應對高併發的考驗,沒有辦法橫向擴展,事務一致性對性能的影響。
而Nosql資料庫,也就是Not Only Sql的縮寫。擴展性強,併發性能好,數據模型靈活。
Hbase,也就是Hadoop Database是一個高可靠、高性能、可伸縮的分散式資料庫。Hbase參考了谷歌的BigTable建模,使用HDFS作為底層存儲。使用Zookeeper作為協同服務組件。
Hbase使用Java編寫,還是一種NoSQL資料庫,這些特性決定了Hbase獨特的應用場景。
2、概念特性
HBASE是一個資料庫----可以提供數據的實時隨機讀寫
HBASE與mysql、oralce、db2、sqlserver等關係型資料庫不同,它是一個NoSQL資料庫(非關係型資料庫)
Hbase的表模型與關係型資料庫的表模型不同:
Hbase的表沒有固定的欄位定義;
Hbase的表中每行存儲的都是一些key-value對;
Hbase的表中有列族的劃分,用戶可以指定將哪些kv插入哪個列族;
Hbase的表在物理存儲上,是按照列族來分割的,不同列族的數據一定存儲在不同的文件中;
Hbase的表中的每一行都固定有一個行鍵,而且每一行的行鍵在表中不能重覆;
Hbase中的數據,包含行鍵,包含key,包含value,都是byte[ ]類型,hbase不負責為用戶維護數據類型;
HBASE對事務的支持很差;
HBASE相比於其他nosql資料庫(mongodb、redis、cassendra、hazelcast)的特點:
Hbase的表數據存儲在HDFS文件系統中
從而,hbase具備如下特性:存儲容量可以線性擴展; 數據存儲的安全性可靠性極高!
3、核心模塊
客戶端Client
整個Hbase的入口,使用者通過客戶端操作Hbase。通過客戶端與HMaster和RegionServer進行通訊。管理類操作與HMaster通信,讀寫類操作與RegionServer通訊。
協調服務zookeeper
zookeeper負責管理Hbase中多個HMaster的選舉,伺服器間狀態同步。
主節點HMaster
HMaster可以啟動多個,由zookeeper保證總有一個正常運行,其他作為備選。
HMaster主要負責Table和Region的管理工作。
節點HRegionServer
HRegionServer主要負責響應用戶IO請求,向HDFS中讀寫數據。HRegionServer管理了一系列的HRegion對象。HRegion對應了Table中的一個Region。HRegion由多個HStore組成,HStore對用了Table中一個Column Family。
而且每個HRegionServer都有一個HLog對象,用於數據恢復。
4、使用場景
搜索引擎
生成索引,在查詢時通過對條件的拼接,迅速的查找到要查詢的數據。
實時流式計算
不管是實時的推薦系統,還是日誌的增量存儲,都是實時流式計算的一個應用。
通過將數據增量的存入Hbase,併在流式處理中實時查詢Hbase,結合歷史得到最終的分析結果。
更多Hbase,Flink,Kafka等實時流式計算相關博文,歡迎關註實時流式計算: