我們先來看看官網是如何介紹Hbase組件,其官網:http://hbase.apache.org/
Apache HBase™是Hadoop數據庫,這是一個分佈式,可擴展的大數據存儲。
當您需要對大數據進行隨機,實時的讀/寫訪問時,請使用Apache HBase™。該項目的目標是在商品硬件羣集上託管超大型表-數十億行X數百萬列。Apache HBase是一個開源的,分佈式的,版本化的,非關係型數據庫,其仿照Google的Bigtable: Chang等人的“ 結構化數據的分佈式存儲系統 ”。正如Bigtable利用Google文件系統提供的分佈式數據存儲一樣,Apache HBase在Hadoop和HDFS之上提供類似於Bigtable的功能。
關於特性:
- 線性和模塊化可擴展性。
注:Hbase的regionserver相當於Hadoop的DataNode,可以進行水平擴展
- 嚴格一致的讀寫。
注:不會發生髒數據的讀或寫的操作
- 表的自動和可配置分片
- RegionServer之間的自動故障轉移支持。
- 方便的基類,用於通過Apache HBase表備份Hadoop MapReduce作業。
- 易於使用的Java API用於客戶端訪問。
注:簡單的API還是比較好些,但是很多的API是非常難寫
- 塊緩存和Bloom過濾器用於實時查詢。
注:塊緩存主要用於讀的場景
- 通過服務器端過濾器查詢謂詞下推
- 支持通過Hadoop指標子系統將指標導出到文件或Ganglia;或通過JMX
表:
- rowkey 每一條數據的主鍵
- column family 列族/簇 將表進行 橫向切割 簡稱CF 生產上列族不要超多3個
- column 列 是屬於一個列族
- version number 類型是long 默認是系統時間戳 用戶也可以自定義
- value 列對應的值
直接把概念列在這,總感覺乾巴巴的,那麼接下來通過一張圖來進一步的介紹
上面的圖表示
1、一行row數據是可以包含一個或者多個CF(列族),但是並不推薦一張表設計時CF>3
2、Column表示列,它是屬於一個列族,一個CF是包含多個Column(列)的
Region:
它是一段數據的集合,從數據的物理層面來說,所有的數據都是存放在region裏的,而region是由RegionServer管理的。
通過上圖,我們可以清楚的知道 一個RegionServer管理多個Region,一個Region又管理着一個或多個的CF,而我們再結合之前的圖,又明白一個CF包含着多個Column,至此對他們之間的關係又有了稍微清晰的認知。
OK,接下來繼續看下面兩張圖
在數據的邏輯概念來說,表是按照rowkey範圍進行劃分爲不同的region, 而region按照不同的列族劃分不同的store,每個store中包含一個memstore和0個或多個storefile
建表時默認只有一個region,如果指定split key,就會有多個region。 當表的行數超過閾值,表就水平分割2個region, 可以把region理解爲子表。
不同的region會被hmaster分配到合適的hregionserver來管理。比如一個表切分成很多的region,不代表很多的region只在一個機器節點上,假如一張表切分成3個region,有可能region1在第一臺機器節點上,region2在第二臺上,region3在第三臺上,當select進行查詢的時候,這樣便可以充分利用三臺機器的IO(磁盤/網絡)。另外不同的Region是存儲在不同的Store中的。
大家也看到MemStore使用紅色標註,這是hbase調優的重點,這裏暫時先不說,後面會重點進行介紹。
數據是以KV結構進行存儲,每個KV只存儲一個單元格的cell數據,而且不同的CF數據是存儲在不同的File裏