hbase概念

hbase

來源:

解決隨機近實時的高效的讀寫

解決非結構化的數據存儲

1. hbase是一個開源的、分佈式的、多版本的、可擴展的、非關係型的數據庫。
2. hbase是big table的開源的java版本,建立在hdfs基礎之上,提供高可靠性、高性能的、列式存儲、可伸縮、近實時讀寫的nosql的數據庫系統
3. 數據量越來越大,傳統的關係型數據庫不能滿足存儲和查詢的需求。而hive雖然能夠滿足存儲的要求,但是hive的本質也是利用底層的mr程序,所以讀寫速度不快。而且hive不能滿足非結構化的、半結構化的存儲,hive的主要作用是做分析和統計,hive用於存儲是無意義的。
- HBASE是一個數據庫----可以提供數據的實時隨機讀寫
- HBASE與mysql、oralce、db2、sqlserver等關係型數據庫不同,它是一個NoSQL數據庫(非關係型數據庫)

應用:

可以存儲非結構化的數據(用戶、商品、文章的畫像屬性)

被用來做實時(整合flume、storm、streaming等)

存儲歷史明細數據(較少)

存儲最終結果數據(kylin預執行數據就是放到hbase中)

行業:通信、銀行、金融等

特性

- Hbase的表模型與關係型數據庫的表模型不同:
- Hbase的表沒有固定的字段定義;
- Hbase的表中每行存儲的都是一些key-value對
- Hbase的表中有列簇的劃分,用戶可以指定將哪些kv插入哪個列族
- Hbase的表在物理存儲上,是按照列簇來分割的,不同列簇的數據一定存儲在不同的文件中
- Hase的表中的每一行都固定有一個行鍵,而且每一行的行鍵在表中不能重複
- Hbase中的數據,包含行鍵,包含key,包含value,都是byte[ ]類型,hbase不負責爲用戶維護數據類型
- HBASE對事務的支持很差
- Hbase的表模型與關係型數據庫的表模型不同:
- Hbase的表沒有固定的字段定義;
- Hbase的表中每行存儲的都是一些key-value對
- Hbase的表中有列簇的劃分,用戶可以指定將哪些kv插入哪個列族
- Hbase的表在物理存儲上,是按照列簇來分割的,不同列簇的數據一定存儲在不同的文件中
- Hase的表中的每一行都固定有一個行鍵,而且每一行的行鍵在表中不能重複
- Hbase中的數據,包含行鍵,包含key,包含value,都是byte[ ]類型,hbase不負責爲用戶維護數據類型
- HBASE對事務的支持很差

表模型

在這裏插入圖片描述

- hbase的表模型跟mysql之類的關係型數據庫的表模型差別巨大
- hbase的表模型中有:行的概念;但沒有字段的概念
- 行中存的都是key-value對,每行中的key-value對中的key可以是各種各樣,每行中的key-value對的數量也可以是各種各樣

表模型特點

1、一個表,有表名
2、一個表可以分爲多個列簇(不同列簇的數據會存儲在不同文件中)
3、表中的每一行有一個“行鍵rowkey”,而且行鍵在表中不能重複
4、表中的每一對kv數據稱作一個cell
5、hbase可以對數據存儲多個歷史版本(歷史版本數量可配置)
6、整張表由於數據量過大,會被橫向切分成若干個region(用rowkey範圍標識),不同region的數據也存儲在不同文件中
7、hbase會對插入的數據按順序存儲:
	- 要點一:首先會按行鍵排序
	- 要點二:同一行裏面的kv會按列簇排序,再按k排序

hbase存儲的數據類型

- hbase中只支持byte[] 
- 此處的byte[] 包括了: rowkey,key,value,列簇名,表名

和hadoop的關係

HBase基於hadoop : HBase的存儲依賴於HDFS

hbase的官網描述

hbase定義:分佈式的,開源的,多版本的

Welcome to Apache HBase™
Apache HBase™ is the Hadoop database, a distributed, scalable, big data store.

Use Apache HBase™ when you need random, realtime read/write access to your Big Data. This project's goal is the hosting of very large tables -- billions of rows X millions of columns -- atop clusters of commodity hardware. Apache HBase is an open-source, distributed, versioned, non-relational database modeled after Google's Bigtable: A Distributed Storage System for Structured Data by Chang et al. Just as Bigtable leverages the distributed data storage provided by the Google File System, Apache HBase provides Bigtable-like capabilities on top of Hadoop and HDFS.
使用場景:1 需要對海量非結構化的數據進行存儲
2 需要隨機近實時的讀寫管理數據
Apache HBase™是Hadoop數據庫,這是一個分佈式,可擴展的大數據存儲。
當您需要對大數據進行隨機,實時的讀/寫訪問時,請使用Apache HBase™。該項目的目標是在商品硬件羣集上託管超大型表-數十億行X數百萬列。Apache HBase是一種開放源,分佈式,版本化,非關係型數據庫,其仿照Chang等人的Google的Bigtable:結構化數據的分佈式存儲系統。正如Bigtable利用Google文件系統提供的分佈式數據存儲一樣,Apache HBase在Hadoop和HDFS之上提供類似於Bigtable的功能。
Linear and modular scalability.
Strictly consistent reads and writes.
Automatic and configurable sharding of tables
Automatic failover support between RegionServers.
Convenient base classes for backing Hadoop MapReduce jobs with Apache HBase tables.
Easy to use Java API for client access.
Block cache and Bloom Filters for real-time queries.
Query predicate push down via server side Filters
Thrift gateway and a REST-ful Web service that supports XML, Protobuf, and binary data encoding options
Extensible jruby-based (JIRB) shell
Support for exporting metrics via the Hadoop metrics subsystem to files or Ganglia; or via JMX
線性和模塊化可擴展性。
嚴格一致的讀寫。
表的自動和可配置分片
RegionServer之間的自動故障轉移支持。
方便的基類,用於通過Apache HBase表備份Hadoop MapReduce作業。
易於使用的Java API用於客戶端訪問。
塊緩存和布隆過濾器用於實時查詢。
通過服務器端過濾器查詢謂詞下推
Thrift網關和支持XML,Protobuf和二進制數據編碼選項的REST-ful Web服務
可擴展的基於Jruby的(JIRB)外殼
支持通過Hadoop指標子系統將指標導出到文件或Ganglia;或通過JMX

hbase的架構

在這裏插入圖片描述

三層分佈:
1.client、zookeeper、hmaster
2.HregionServer,hlog,hregion,store

- Client : 
hbase客戶端,1.包含訪問hbase的接口。比如,linux shell,java api。2.除此之外,它會維護緩存來加速訪問hbase的速度。比如region的位置信息。

- Zookeeper : 
1.監控Hmaster的狀態,保證有且僅有一個活躍的Hmaster。達到高可用。2.它可以存儲所有region的尋址入口。如:root表在哪一臺服務器上。3. 實時監控HregionServer的狀態,感知HRegionServer的上下線信息,並實時通知給Hmaster。4. 存儲hbase的部分元數據。

- HMaster : 
1. 爲HRegionServer分配Region(新建表等)。2. 負責HRegionServer的負載均衡。3. 負責Region的重新分配
(HRegionServer宕機之後的Region分配,HRegion裂變:當Region過大之後的拆分4. Hdfs上的垃圾回收。5. 處理schema的更新請求

- HRegionServer :
1. 維護HMaster分配給的Region(管理本機的Region)。2. 處理client對這些region的讀寫請求,並和HDFS進行交互。3. 負責切分在運行過程中組件變大的Region

-Hlog:日誌(相當於mysql的binlog),1. 對HBase的操作進行記錄,使用WAL寫數據,優先寫入log(put操作:先寫日誌再寫memstore,這樣可以防止數據丟失,即使丟失也可以回滾)。

- HRegion : 1. HBase中分佈式存儲和負載均衡的最小單元,它是表或者表的一部分。

- Memstore : 
1. 內存緩衝區,用於將數據批量刷新到hdfs中,默認大小爲128M
異步寫入:MemStore:緩衝(類似於hadoop的圓形緩衝區)(默認128M)

- HStoreFile : 1. 和HFile概念意義,不過是一個邏輯概念。HBase中的數據是以HFile存儲在Hdfs上。

store:

每個Store對應了表中的一個列族的存儲。每個Store包括一個MemStore緩存和若干個StoreFile文件。MenStore是排序的內存緩衝區,當用戶寫入數據時,系統首先把數據放入MenStore緩存,當MemStore緩存滿時,就會刷新到磁盤中的一個StoreFile文件中,當單個StoreFile文件大小超過一定閾值時,就會觸發文件分裂操作。


在這裏插入圖片描述

RegionServer

Region服務器是HBase中最核心的模塊,負責維護分配給自己的Region,並響應用戶的讀寫請求
root表被刪除(0.96版本之後沒有root表,只有zk文件和meta表)

在這裏插入圖片描述

各組件之間的關係

hmaster:hregionserver=1:*
hregionserver:hregion=1:*
hregionserver:hlog=1:1
hregion:hstore=1:*
store:memstore=1:1
store:storefile=1:*
storefile:hfile=1:1

在這裏插入圖片描述

總結

rowkey:行鍵,和mysql的主鍵同理,不允許重複。
columnfamily: 列簇,列的集合之意。
column:列
timestamp:時間戳,默認顯示最新的時間戳,可用於控制k對應的多個版本值,默認查最新的數據
version:版本號,表示記錄數據的版本
cell:單元格,kv就是cell

模式:無
數據類型:只存儲byte[]
多版本:每個值都可以有多個版本
列式存儲:一個列簇存儲到一個目錄
稀疏存儲:如果一個kv爲null,不佔用存儲空間
一個表最少有一個列簇
 TTL:生命週期

nosql分類

鍵值數據庫

項目 描述
相關產品 Redis,Piak,Chordless,Scalaris,Memcached
數據模型 鍵/值對
典型應用 內容緩存,如會話、配置文件、參數、購物車等
優點 擴展性良好、靈活性好、大量寫操作時性能高
缺點 無法存儲結構化信息、條件查詢效率低
使用者 百度雲數據庫(Redis),GitHub(Riak),BestBuy(Riak),Twitter(Redis和Memcached),StackOverFlower(Redis),Instagram(Redis),Youtube(Memcached),Wikipedia(Memcached)

列族數據庫

項目 描述
相關產品 BigTable,Hbase,Cassandra,HadoopDB,GreenPlum,PNUTS
數據模型 列族
典型應用 分佈式數據存儲與管理
優點 查找速度快,可擴展性強,容易進行分佈式擴展,複雜性低
缺點 功能較少,大都不支持強事務一致性
使用者 Ebay(Casscandra),Instagram(Cassandra),NASA(Cassandra),Twittet(Cassandra and HBase),Facebook(HBase),Yahoo!(HBase)

文檔數據庫

項目 描述
相關產品 CouchDB,MongoDB,Terrastore,ThruDB,RavenDB,SisoDB,RaptorDB,CloudKit,Perserver,Jackrabbit
數據模型 版本化的文檔
典型應用 存儲,索引並管理面向文檔的數據或者類似的半結構化數據
優點 性能好,靈活性高,複雜性低,數據結構靈活
缺點 缺乏統一的查詢語法
使用者 百度雲數據庫(MongoDB),SPA(MongoDB),Codecademy(MongoDB),Foursquare(MongoDB),NBCNews(RavenDB)

CPA理論的具體含義。

CAP指的是:

C(Consistency):一致性,是指任何一個讀操作總是能夠讀到之前完成的寫操作的結果,也就是在分佈式環境中,多點的數據是一致的,或者說,所有節點在同一時間具有相同的數據

A:(Availability):可用性,是指快速獲取數據,可以在確定的時間內返回操作結果,保證每個請求不管成功或者失敗都有響應;

P(Tolerance of Network Partition):分區容忍性,是指當出現網絡分區的情況時(即系統中的一部分節點無法和其他節點進行通信),分離的系統也能夠正常運行,也就是說,系統中任意信息的丟失或失敗不會影響系統的繼續運作。

數據庫的ACID四性的具體含義

1.原子性(Atomicity)

指事務必須是原子工作單元,對於其數據修改,要麼全都執行,要麼全都不執行。

2.一致性(consistency)

指事務在完成時,必須使所有的數據都保持一致狀態。

3.隔離性(Isolation)

指併發事務所做的修改必須與其他併發事務所做的修改隔離。

4.持久性(Durability)

指事務完成之後,它對於系統的影響是永久性的,該修改即使出現致命的系統故障也將一直保持。

BASE的具體含義。

BASE的基本含義是基本可用(Basically Availble)、軟狀態(Soft-state)和最終一致性(Eventual consistency)

最終一致性。

一致性的類型包括強一致性和弱一致性,二者的主要區別在於高併發的數據訪問操作下後續操作是否能夠獲取最新的數據。對於強一致性而言,當執行完一次更新操作後,後續的其他讀操作就可以保證讀到更新後的最新數據;反之,如果不能保證後續訪問讀到的都是更新後的最新數據,那麼就是弱一致性。而最終一致性只不過是弱一致性的一種特例,允許後續的訪問操作可以暫時讀不到更新後的數據,但是經過一段時間之後,必須最終讀到更新後的數據。最終一致性也是ACID的最終目的,只要最終數據是一致的就可以了,也不是每時每刻都保持實時一致。

Eventual consistency)




###  最終一致性。 

一致性的類型包括強一致性和弱一致性,二者的主要區別在於高併發的數據訪問操作下後續操作是否能夠獲取最新的數據。對於強一致性而言,當執行完一次更新操作後,後續的其他讀操作就可以保證讀到更新後的最新數據;反之,如果不能保證後續訪問讀到的都是更新後的最新數據,那麼就是弱一致性。而最終一致性只不過是弱一致性的一種特例,允許後續的訪問操作可以暫時讀不到更新後的數據,但是經過一段時間之後,必須最終讀到更新後的數據。最終一致性也是ACID的最終目的,只要最終數據是一致的就可以了,也不是每時每刻都保持實時一致。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章