Hbase是一個開源的,面向列的開源數據庫。基于Fay Chang所撰寫的Google論文“Bigtable:一個結構化數據結構的分布式存儲系統”
Hbase在hadoop之上提供了類似于Bigtable的能力。Hbase是Apache的Hadoop項目的子項目。基于列的模式提供數據存儲,非常適合于非結構化數據存儲的數據庫。
Hbase是一個高可靠、高性能、面向列、可伸縮的分布式存儲系統。利用Hbase技術可以在廉價PC Server上搭建大規模結構化存儲集群。
Hbase在hadoop生態中的位置
從Hadoop的生態系統圖中可以看到Hbase位于結構化存儲層,Hadoop Hdfs為hbase提供高可靠性的底層存儲支持,Hadoop MapReduce為Hbase提供高性能的計算能力,Zookeeper為Hbase提供了穩定服務和failover機制。
Hbase和hadoop各版本之間的適配關系
hbase在生態中的位置 hbase最新版本
- √ 支持
- × 不支持
- ?未測試
Hbase各版本特性 摘自網絡
1.0
1.API的變化,比如放棄了客戶端幾個重要的API:( HTableInterface, HTable,HBaseAdmin),建議程序升級到新的API,老的PAI會在2.X中刪除。
2.不重啟regionserver的情況下讀取配置文件。
3.master節點也運行regionserver。master與regionserver共享RPC端口。
4.global memstore和block cache大小的自動調整。
5.Bucket cache改進(data blocks的可用性和壓縮方面)
6.集群中一個新的可插拔式的終端來復制成自定義存儲。(A new pluggable replication endpoint to plug in to HBase’s inter-cluster replication to replicate to a custom data store)
7.新增truncate table 命令
8.新增meta table來替代zk來進行更快的region分配(此功能默認是關閉都)
9.廣泛的文檔改進
10.[HBASE-12511] - namespace permissions - add support from table creation privilege in a namespace ‘C’
11.位Thrift Server添加Thrift-over-HTTPS 和 doAs支持(?)
12.bulkload復制表
13.使用前綴設置一個行的開始和結束更加easy了。
14.腳本停止regionserver使用RPC
15.客戶端的原子性檢查和變化的支持。
16.自動增加heap size的值如果開始沒有指定大小的話。
17.regionserver協處理器終端。
18.添加了在一個regionserver上壓縮所有region的命令。
19.添加LongComparator過濾器
20.[shell]在線加載配置文件的改變。
21.REST server的一些修復。
22.需要zk3.4.X的支持。
23.需要hadoop2.x的支持
24.jdk1.7,不再支持1.6
25.默認的端口號已經由600xx改成了160XX
26.默認使用hfile version3
27.Slab cache已經被移除,使用bucket cache
28.默認的regionserver堆內存由1G改為jdk默認的數值,一般為物理內存的四分之一。
29.mapred包和類已經被廢除。
30.加入兩個新的模塊:hbase-annotations 和 hbase-rest
2.0
A new Region assignment manager
AssignmentManager V2(“AMv2”)基于Procedure V2實現,能夠更快速的分配Region,維護的region狀態機存儲不再依賴于ZooKeeper,能夠更好的應對Region長時間RIT問題。
Offheaping of Read/Write
減少對Heap內存的使用,改用Offheap區的內存,有效減少GC壓力
In-Memory Compaction
重新設計了CompactingMemStore 替代 DefaultMemStore,CompactingMemStore中的數據達到一定大小以后,不是直接Flush成HDFS中的HFile文件,而是先Flush到內存中的一個不可改寫的Segment,這樣,內存中的多個Segments可以預先合并,當達到一定的大小以后,才Flush成HDFS中的HFile文件,這樣做的好處是希望有效降低Compaction所帶來的寫IO放大問題。
NettyRpcServer
HBase2.0 開始默認使用NettyRpcServer
使用Netty替代HBase原生的RPC server,大大提升了HBaseRPC的吞吐能力,降低了延遲
Async RPC Client
HBase2.0 Client不在是原來同步等待,而是利用異步RPC機制,大大提高Client端請求并發度,有效提高資源利用率,擴大吞吐。
RegionServer Group
在HBase 2.0中我們可以將RegionServer劃分到多個邏輯Group中,這樣可以提供多租戶的能力。
Support for MOB
MOB特性使得HBase支持存儲小于10MB 的中等媒體對象數據,這些小對象文件采用獨立的HFile文件進行存儲,相比原來直接存儲大對象插入hbase,其讀寫效率更高;Mob數據存儲還是以hfile格式存儲,兼容HBase現有特性,如snapshot、bulkload、replication等。MOB數據文件有獨立的compaction和expire clean機制,穩定性更可控。
與1.x版本的兼容性
1.x版本的Client可以訪問2.0版本的集群,進行正常的數據讀寫操作。但從1.x版本不停服務的情況下滾動升級到2.0版本是沒法做到的,1.x版本的coprocessor/Endpoint不做改動的情況下也無法在2.0版本中正常使用。
備注:
1,結構化數據:可以用二維表結構來邏輯表達實現的數據,即行數據,行數據中的每個字段都有具體切明確的含義。參考鏈接
2,非結構化數據:不方便用數據庫二維邏輯表來表現的數據即稱為非結構化數據。包括所有格式的辦公文檔、圖片、文本、XML、HTML、各類報表、圖像和音視頻。參考鏈接
3,failover機制:故障(失效)轉移機制。是一種備份操作模式,當主要組件異常時,其功能轉移到備份組件。其要點在于有主有備,且主故障時備可啟用,并設置為主。例如Mysql的雙Master模式。
延展
1,failfast:快速失敗。盡可能發現系統中的錯誤,是系統能夠按照事先設定好的錯誤執行流成執行,對應的方式是錯誤容忍(fail-tolerant),例如:在java中線程A通過iterator遍歷集合,若該集合的內容被其他線程所改變了,那么線程A在訪問集合時,就會拋出ConcurrentModificationException,即發現錯誤執行設定好的流程。參考鏈接
2,failback:失效自動恢復。在簇網絡系統(有兩臺或多臺服務器互聯的網絡)中,由于要對某臺服務進行維修,需要網絡資源和服務暫時重定向到備用系統,在此之后將網絡資源和服務恢復為由原始主機提供的過程稱為自動恢復。參考鏈接
3,failsafe:失效安全。即使在故障的時候也不會造成傷害或者減少傷害。維基百科上一個形象的例子是紅綠燈的“沖突監測模塊”當監測到錯誤或者沖突的信號時會將十字路口的紅綠燈變為閃爍錯誤模式,而不是全部顯示為綠燈。參考鏈接