HBase簡介
HBase是一個構建在HDFS上的分布式列儲存系統;
HBase是基於Google BigTable模型開發的,典型的key/value系統;
HBase是Apache Hadoop生態系統中的重要一員,主要用于海量結構化資料存放區;
從邏輯上講,HBase將資料按照表、行和列進行儲存;
與hadoop一樣,Hbase目標主要依靠橫向擴充,通過不斷增加廉價的商用伺服器,來增加計算和儲存能力。 HBase的優勢
將隨機讀寫轉化為順序讀寫,適應高並發寫入;
均衡效果好,讀寫效能和機器數保持線性相關;
行中沒有儲存資料的列,不佔儲存空間;
分布式特性:基於HDFS、ZK,一致性,可用性,分區容忍性,大資料存放區,易擴充。 Hbase表的特點
大:一個表可以有數十億行,上百萬列;
無模式:每行都有一個可排序的主鍵和任意多的列,列可以根據需要動態增加,同一張表中不同的行可以有截然不同的列;
面向列:面向列(族)的儲存和許可權控制,列(族)獨立檢索;
稀疏:空(null)列並不佔用儲存空間,表可以設計的非常稀疏;
資料多版本:每個單元中的資料可以有多個版本,預設情況下版本號碼自動分配,是儲存格插入時的時間戳記;
資料類型單一:Hbase中的資料都是字串,沒有類型。 HBase VS RDBMS
HBase中的資料都是字串類型(String);
HBase只有普通的增刪改查等操作,沒有表之間的關聯查詢;
HBase是基於列式儲存,而RDBMS是基於行式儲存的;
HBase適合儲存大量資料,查詢效率極高。 HBase資料模型
應用程式是以表的方式在HBase儲存資料的。表是由行和列構成的,所有的列是從屬於某一個列族的。行和列的交叉點稱之為cell,cell是版本化的。cell的內容是不可分割的位元組數組。
表的行鍵也是一段位元組數組,所以任何東西都可以儲存進去,不論是字串或者數字。HBase的表是按key排序的,排序方式之針對位元組的。所有的表都必須要有主鍵-key。
邏輯視圖如下:
| Row Key(行鍵) |
Time Stamp |
ColumnFamily contents(列族contents) |
ColumnFamily anchor(列族anchor) |
| com.cnn.www |
t1 |
|
anchor:cnnsi.com = “CNN” |
| com.cnn.www |
t2 |
|
anchor:my.look.ca = “CNN.com” |
| com.cnn.www |
t3 |
contents:html = “…” |
|
Hbase基本概念 1.行鍵(RowKey)
RowKey:是Byte array,是表中每條記錄的“主鍵”,方便快速尋找,Rowkey的設計非常重要。
行鍵是位元組數組, 任何字串都可以作為行鍵;
表中的行根據行鍵進行排序,資料按照Row key的位元組序(byte order)排序儲存;
所有對錶的訪問都要通過行鍵 (單個RowKey訪問,或RowKey範圍訪問,或全表掃描) 2.列族(ColumnFamily)
Column Family:列族,擁有一個名稱(string),包含一個或者多個相關列
列族必須在表定義時給出;
每個CF可以有一個或多個列成員(ColumnQualifier),列成員不需要在表定義時給出,新的列族成員可以隨後按需、動態加入;
資料按列族分開儲存,HBase所謂的列式儲存就是根據列族分開儲存(每個列族對應一個Store),這種設計非常適合於資料分析的情形。 3.列(Column)
Column:屬於某一個columnfamily,familyName:columnName,每條記錄可動態添加 4.時間戳記(TimeStamp)
每個Cell可能又多個版本,它們之間用時間戳記區分 5.儲存格(Cell)
Cell 由行鍵,列族:限定符,時間戳記唯一決定;
Cell中的資料是沒有類型的,全部以位元組碼形式存貯; 6.地區(Region)
HBase自動把表水平(按Row)劃分成多個地區(region),每個region會儲存一個表裡面某段連續的資料;
每個表一開始只有一個region,隨著資料不斷插入表,region不斷增大,當增大到一個閥值的時候,region就會等分會兩個新的region;
當table中的行不斷增多,就會有越來越多的region。這樣一張完整的表被儲存在多個Region 上;
HRegion是HBase中分布式儲存和負載平衡的最小單元。最小單元表示不同的HRegion可以分布在不同的HRegionServer上。但一個HRegion不會拆分到多個server上。