HBase是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統,適用于結構化的存儲,底層依賴于Hadoop的HDFS,利用HBase技術可在廉價PCServer上搭建起大規模結構化存儲集群。因此,HBase被廣泛使用在大數據存儲的解決方案中。
為何使用HBase
(1) HBase的優點:
列可以動態增加,并且列為空就不存儲數據,節省存儲空間 HBase自動切分數據,使得數據存儲自動具有水平scalability HBase可以提供高并發讀寫操作的支持
(2) HBase的缺點:
不能支持條件查詢,只支持按照Row key來查詢 HBase并不適合傳統的事物處理程序或關聯分析,不支持復雜查詢,一定程度上限制了它的使用,但是用它做數據存儲的優勢也同樣非常明顯
因為HBase存儲的是松散的數據,所以如果你的應用程序中,數據表每一行的結構是有差別的,那么可以考慮使用HBase。
因為HBase的列可以動態增加,并且列為空就不存儲數據,所以如果你需要經常追加字段,且大部分字段是NULL值的,那可以考慮HBase。
因為HBase可以根據Rowkey提供高效的查詢,所以如果你的數據(包括元數據、消息、二進制數據等)都有著同一個主鍵,或者你需要通過鍵來訪問和修改數據,使用HBase是一個很好地選擇。
二、如何使用HBase
場景一:賣家操作日志
賣家操作日志,顧名思義是用來記錄商家操作的系統,從而可以保證商家可以精確查詢自己的各種操作。京東有幾十萬的商家時時刻刻的進行著各種操作,因此賣家操作日志的特點是:數據量大、實時性強、增多查少。
▲圖一
▲圖二
做賣家操作日志初期,將所有的操作日志存放在ES中,操作日志的數據量是非常大的,但當時所能申請到的ES資源有限。當把大量的數據存儲到有限的ES集群中時便導致了性能的下降。在這種情況下,選擇了只在ES集群中存儲最近三個月的數據,對其提供靈活的查詢,而長期的數據存儲使用HBase來進行。這樣便可以實現對近期操作靈活展現,對長期數據也有精確備份。
京麥消息日志的存儲是屬于京麥筋斗云系統(用于打造京麥消息生態系統閉環)不可或缺的一部分,其中包含消息的全鏈路追蹤以及消息的統計分析。京麥消息每天都會有幾千萬的消息量,如何對消息進行追蹤和統計便成為了一個至關重要的問題。
消息追蹤要求實時性、多維度精確查詢,因此選擇將最近一周的消息日志存儲在ES。統計分析要求有足夠多的數據,因此在將數據存儲在ES中的同時也存儲在HBase中一份。最終再定期將HBase中的數據導入到京東的數據集市中,這樣便可以很方便的對京麥消息進行統計分析。
HBase的數據結構
▲HBase數據的概念視圖
要使用HBase首先要了解HBase的數據結構:
HBase會存儲系列的行記錄,行記錄有三個基本類型的定義:Row Key、Time Stamp、Column Family。
1. Row Key
與NoSQL數據庫一樣,VPS租用 國內服務器,Row Key是用來檢索記錄的主鍵。訪問HBase table中的行,只有三種方式:
通過單個Row Key訪問 通過Row Key的range全表掃描 Row Key可以是任意字符串(最大長度是64KB,實際應用中長度一般為 10 ~ 100bytes),在HBase內部,Row Key保存為字節數組
在存儲時,數據按照Row Key的字典序(byte order)排序存儲。設計Key時,要充分排序存儲這個特性,將經常一起讀取的行存儲到一起(位置相關性)。
2. Column Family
HBase表中每個列都必須屬于某個列族,列族必須作為表模式定義的一部分預先給出(有點像關系型數據庫中的列名,定義完一般情況下就不會再去修改)。
列名以列族作為前綴,每個列族都可以有多個列成員。新的列族成員(也就是列)可以隨后按需,動態加入。
Hbase把同一列族里面的數據存儲在同一目錄下,由幾個文件保存。
3. Time Stamp