原文部落格地址:http://blog.csdn.net/woshiwanxin102213/article/details/17584043 概述
HBase是一個構建在HDFS上的分布式列儲存系統;
HBase是基於Google BigTable模型開發的,典型的key/value系統;
HBase是Apache Hadoop生態系統中的重要一員,主要用于海量結構化資料存放區;
從邏輯上講,HBase將資料按照表、行和列進行儲存。
與hadoop一樣,Hbase目標主要依靠橫向擴充,通過不斷增加廉價的商用伺服器,來增加計算和儲存能力。
Hbase表的特點
大:一個表可以有數 十億行 ,上 百萬列 ;
無模式:每行都有一個可排序的主鍵和任意多的列,列可以根據需要動態增加,同一張表中 不同的行可以有截然不同的列 ;
面向列:面向列(族)的儲存和許可權控制, 列(族)獨立檢索 ;
稀疏: 空(null)列並不佔用儲存空間 ,表可以設計的非常稀疏;
資料多版本:每個單元中的資料可以有多個版本,預設情況下版本號碼自動分配,是儲存格插入時的時間戳記;
資料類型單一:Hbase中的資料都是字串,沒有類型。
Hbase資料模型
Hbase邏輯視圖
注意上圖中的英文說明
Hbase基本概念 RowKey:是Byte array,是表中每條記錄的“主鍵”,方便快速尋找,Rowkey的設計非常重要。
Column Family:列族,擁有一個名稱(string),包含一個或者多個相關列
Column:屬於某一個columnfamily,familyName:columnName,每條記錄可動態添加
Version Number:類型為Long,預設值是系統時間戳,可由使用者自訂
Value(Cell):Byte array
Hbase物理模型 每個column family儲存在HDFS上的一個單獨檔案中,空值不會被儲存。
Key 和 Version number在每個 column family中均有一份;
HBase 為每個值維護了多級索引,即:<key, column family, column name, timestamp>
實體儲存體:
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架構及基本組件
Hbase基本組件說明:
Client
包含訪問HBase的介面,並維護cache來加快對HBase的訪問,比如region的位置資訊
Master
為Region server分配region
負責Region server的負載平衡
發現失效的Region server並重新分配其上的region
系統管理使用者對table的增刪改查操作
Region Server
Regionserver維護region,處理對這些region的IO請求
Regionserver負責切分在運行過程中變得過大的region
Zookeeper作用
通過選舉,保證任何時候,叢集中只有一個master,Master與RegionServers 啟動時會向ZooKeeper註冊
存貯所有Region的定址入口
即時監控Region server的上線和下線資訊。並即時通知給Master
儲存HBase的schema和table中繼資料
預設情況下,HBase 管理ZooKeeper 執行個體,比如, 啟動或者停止ZooKeeper
Zookeeper的引入使得Master不再是單點故障
Write-Ahead-Log(WAL)
該機制用於資料的容錯和恢複:
每個HRegionServer中都有一個HLog對象,HLog是一個實現Write Ahead Log的類,在每次使用者操作寫入MemStore的同時,也會寫一份資料到HLog檔案中(HLog檔案格式見後續),HLog檔案定期會滾動出新的,並刪除舊的檔案(已持久化到StoreFile中的資料)。當HRegionServer意外終止後,HMaster會通過Zookeeper感知到,HMaster首先會處理遺留的 HLog檔案,將其中不同Region的Log資料進行拆分,分別放到相應region的目錄下,然後再將失效的region重新分配,領取 到這些region的HRegionServer在Load Region的過程中,會發現有曆史HLog需要處理,因此會Replay HLog中的資料到MemStore中,然後flush到StoreFiles,完成資料恢複
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的伺服器位址。 Hbase使用情境
storing large amounts 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.)
大資料量儲存,大資料量高並行作業
需要對資料隨機讀寫操作
讀寫訪問均是非常簡單的操作 Hbase與HDFS對比 兩者都具有良好的容錯性和擴充性,都可以擴充到成百上千個節點;
HDFS適合批處理情境
不支援資料隨機尋找
不適合增量資料處理
不支援資料更新
參考文檔:
1、http://www.alidata.org/archives/1509(儲存模型比較詳細)
2、http://www.searchtb.com/2011/01/understanding-hbase.html(技術架構以及儲存模型)
3、http://wenku.baidu.com/view/b46eadd228ea81c758f578f4.html(讀和寫的流程比較詳細)