Hbase基本原理、及存儲知識
一、Hbase基礎
HBase是一個針對結構化數據的可伸縮、高可靠、高性能、分布式和面向列的動態模式數據庫。 和傳統關系數據庫不同,HBase采用了BigTable的數據模型:增強的稀疏排序映射表(Key/Value),其中,鍵由行關鍵字、列關鍵字和時間 戳構成。HBase提供了對大規模數據的隨機、實時讀寫訪問,同時,HBase中保存的數據可以使用MapReduce來處理,它將數據存儲和并行計算完 美地結合在一起。
數據模型:Schema-->Table-->Column Family-->Column-->RowKey-->TimeStamp-->Value
二、表的特點
大:一個表可以有數十億行,上百萬列;
無模式:每行都有一個可排序的主鍵和任意多的列,列可以根據需要動態的增加,同一張表中不同的行可以有截然不同的列;
面向列:面向列(族)的存儲和權限控制,列(族)獨立檢索;
稀疏:空(null)列并不占用存儲空間,表可以設計的非常稀疏;
數據多版本:每個單元中的數據可以有多個版本,默認情況下版本號自動分配,是單元格插入時的時間戳;
數據類型單一:Hbase中的數據都是字符串,沒有類型。
Hbase基本概念
RowKey:是Byte array,是表中每條記錄的“主鍵”,方便快速查找,Rowkey的設計非常重要。
Column Family:列族,擁有一個名稱(string),包含一個或者多個相關列
Column:屬于某一個columnfamily,familyName:columnName,每條記錄可動態添加
Version Number:類型為Long,默認值是系統時間戳,可由用戶自定義
Value(Cell):Byte array
物理存儲:
1、Table中所有行都按照row key的字典序排列;
2、Table在行的方向上分割為多個Region;
3、Region按大小分割的,每個表開始只有一個region,隨著數據增多,region不斷增大,當增大到一個閥值的時候,region就會等分會兩個新的region,之后會有越來越多的region;
4、Region是Hbase中分布式存儲和負載均衡的最小單元,不同Region分布到不同RegionServer上。
5、Region雖然是分布式存儲的最小單元,但并不是存儲的最小單元。Region由一個或者多個Store組成,每個store保存一個columns family;每個Strore又由一個memStore和0至多個StoreFile組成,StoreFile包含HFile;memStore存儲在內存中,StoreFile存儲在HDFS上。
HBase容錯性
Master容錯:Zookeeper重新選擇一個新的Master
無Master過程中,數據讀取仍照常進行;ü
無master過程中,region切分、負載均衡等無法進行;ü
RegionServer容錯:定時向Zookeeper匯報心跳,如果一旦時間內未出現心跳,Master將該RegionServer上的Region重新分配到其他RegionServer上,失效服務器上“預寫”日志由主服務器進行分割并派送給新的RegionServer
Zookeeper容錯:Zookeeper是一個可靠地服務,一般配置3或5個Zookeeper實例
Region定位流程:
尋找RegionServer
ZooKeeper--> -ROOT-(單Region)--> .META.--> 用戶表
-ROOT-
?表包含.META.表所在的region列表,該表只會有一個Region;
?Zookeeper中記錄了-ROOT-表的location。
.META.
?表包含所有的用戶空間region列表,以及RegionServer的服務器地址。
storing largeamounts of data(100s of TBs)
need high write throughput
need efficient random access(key lookups) within large data sets
need to scale gracefully with data
for structured and semi-structured data
don't need fullRDMS capabilities(cross row/cross table transaction, joins,etc.)
大數據量存儲,大數據量高并發操作
需要對數據隨機讀寫操作
讀寫訪問均是非常簡單的操作
兩者都具有良好的容錯性和擴展性,都可以擴展到成百上千個節點;
HDFS適合批處理場景
不支持數據隨機查找
不適合增量數據處理
不支持數據更新