來自:http://blog.csdn.net/woshiwanxin102213/article/details/17584043
目錄(?)[-]
概述
Hbase資料模型
Hbase實體模型
HBase架構及基本元件
Hbase使用場景
Hbase與HDFS對比
參考文檔

HBase是一個建構在HDFS上的分布式列存儲系統;
HBase是基于Google BigTable模型開發的,典型的key/value系統;
HBase是Apache Hadoop生态系統中的重要一員,主要用于海量結構化資料存儲;
從邏輯上講,HBase将資料按照表、行和列進行存儲。
與hadoop一樣,Hbase目标主要依靠橫向擴充,通過不斷增加廉價的商用伺服器,來增加計算和存儲能力。
Hbase表的特點
大:一個表可以有數十億行,上百萬列;
無模式:每行都有一個可排序的主鍵和任意多的列,列可以根據需要動态的增加,同一張表中不同的行可以有截然不同的列;
面向列:面向列(族)的存儲和權限控制,列(族)獨立檢索;
稀疏:空(null)列并不占用存儲空間,表可以設計的非常稀疏;
資料多版本:每個單元中的資料可以有多個版本,預設情況下版本号自動配置設定,是單元格插入時的時間戳;
資料類型單一:Hbase中的資料都是字元串,沒有類型。
Hbase邏輯視圖
注意上圖中的英文說明
Hbase基本概念
RowKey:是Byte array,是表中每條記錄的“主鍵”,友善快速查找,Rowkey的設計非常重要。 Column Family:列族,擁有一個名稱(string),包含一個或者多個相關列 Column:屬于某一個columnfamily,familyName:columnName,每條記錄可動态添加 Version Number:類型為Long,預設值是系統時間戳,可由使用者自定義 Value(Cell):Byte array
每個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上。
![]()
Hbase原理、基本概念、基本架構
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不再是單點故障
![]()
Hbase原理、基本概念、基本架構
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的伺服器位址。
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.)
大資料量存儲,大資料量高并發操作
需要對資料随機讀寫操作
讀寫通路均是非常簡單的操作
兩者都具有良好的容錯性和擴充性,都可以擴充到成百上千個節點;
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(讀和寫的流程比較詳細)