HBase是Apache基金會的一個項目垦藏,是一個分布式可擴(kuò)展的NoSQL數(shù)據(jù)庫梆暖,提供了對結(jié)構(gòu)化、半結(jié)構(gòu)化掂骏、甚至非結(jié)構(gòu)化大數(shù)據(jù)的實(shí)時讀寫和隨機(jī)訪問能力轰驳。
要說HBase在Hadoop中的地位,簡單來說就是:
HBase之于HDFS就類似于數(shù)據(jù)庫之于文件系統(tǒng)。
這里就來簡單介紹一下HBase级解。
首先呢冒黑,先來看看我們用HBase的功能:
首先它是Hadoop的數(shù)據(jù)庫,能夠進(jìn)行存儲數(shù)據(jù)和檢索數(shù)據(jù)勤哗。
與關(guān)系型數(shù)據(jù)庫MySQL那些相比呢抡爹,它能夠存儲上億級的海量數(shù)據(jù),而且在海量數(shù)據(jù)上檢索速度能達(dá)到準(zhǔn)實(shí)時芒划,秒級別冬竟。
它是基于HDFS的,因此HDFS的優(yōu)勢它都擁有腊状,比如數(shù)據(jù)安全性等诱咏。
和Hive相比,Hive主要是基于mapreduce的缴挖,通過類SQL語句分析數(shù)據(jù)用的袋狞;而HBase主要就是檢索數(shù)據(jù)用了。
HBase表中的數(shù)據(jù)可以進(jìn)行快速查詢映屋,關(guān)鍵在于表中的rowkey的設(shè)計苟鸯。只要能快速的定位rowkey, 就能實(shí)現(xiàn)快速的查詢。
而且HBase的機(jī)制是數(shù)據(jù)先寫入到內(nèi)存中棚点,當(dāng)數(shù)據(jù)量達(dá)到一定的量(如128M)早处,再寫入磁盤中, 在內(nèi)存中瘫析,是不進(jìn)行數(shù)據(jù)的更新或合并操作的砌梆,只增加數(shù)據(jù),這使得用戶的寫操作只要進(jìn)入內(nèi)存中就可以立即返回贬循,因此可以進(jìn)行實(shí)時查詢咸包。
借助網(wǎng)上看到的一幅圖來表示Hadoop EcoSystem中的各層系統(tǒng):
其中,HBase位于結(jié)構(gòu)化存儲層杖虾,Hadoop HDFS為HBase提供了高可靠性的底層存儲支持烂瘫,Hadoop MapReduce為HBase提供了高性能的計算能力,Zookeeper為HBase提供了穩(wěn)定服務(wù)和failover機(jī)制奇适。
另外坟比,Pig和Hive還為HBase提供了高層語言支持,使得在HBase上進(jìn)行數(shù)據(jù)統(tǒng)計處理變的非常簡單嚷往。 Sqoop則為HBase提供了方便的RDBMS數(shù)據(jù)導(dǎo)入功能葛账,使得傳統(tǒng)數(shù)據(jù)庫數(shù)據(jù)向HBase中遷移變的非常方便。
先不看其他的東西皮仁,現(xiàn)在先看看HBase作為數(shù)據(jù)庫長的是什么樣子注竿。
HBase的數(shù)據(jù)模型
我們就先來看看HBase的基本數(shù)據(jù)模型茄茁。HBase表示一個分布式多維表,在數(shù)據(jù)模型定義上是一個3元組:{行關(guān)鍵字巩割,列族和列名裙顽,時間戳}。HBase通過它們來進(jìn)行索引和查詢定位宣谈。
下面是一個例子:
在HDFS存儲中愈犹,上表其實(shí)對應(yīng)的是一組鍵值對,比如key3行CompanyInfo闻丑、Name下t2時間戳下的數(shù)值:company2漩怎,存儲時的完整鍵值對為:
{key3,CompanyInfo,Name,t2}-->company2
也就是說HBase中并不存在行列這樣的概念,在實(shí)現(xiàn)時只認(rèn)為存在鍵值對這樣的概念嗦嗡。那個value實(shí)際上是以byte數(shù)組的形式存儲勋锤。
1.行關(guān)鍵字(row key)
HBase一張表可以有上億行記錄,每一行都是由一個行關(guān)鍵字來標(biāo)識侥祭。表中的記錄默認(rèn)按照行關(guān)鍵字升序排序叁执。
2.列族(Column Family)和列名(Column Name)
HBase每張表都有一個或多個列族,而列族相當(dāng)于一個容器矮冬,每個列都必須歸屬于某個列族谈宛。一個列族中可以由任意多個列組成,列族支持動態(tài)擴(kuò)展胎署,無需預(yù)先定義列的數(shù)量以及類型吆录,所有列均以二進(jìn)制格式存儲,用戶需要自行進(jìn)行類型轉(zhuǎn)換琼牧。所有的列族成員的前綴是相同的恢筝,例如“abc:a1”和“abc:a2”兩個列都屬于abc這個列族。
3.時間戳(Timestamp)
每次數(shù)據(jù)操作對應(yīng)的時間戳巨坊,可以看作是數(shù)據(jù)的版本號撬槽。
</br>
而上面三者合起來就構(gòu)成了一個單元格(Cell):這個是表存儲數(shù)據(jù)的單元。由{行健抱究,列(列族:列名)恢氯,時間戳}唯一確定带斑。
HBase的基本構(gòu)架
接下來看看HBase的基本組成結(jié)構(gòu)鼓寺。
HBase也是分布式的集群,因此還是會分為主節(jié)點(diǎn)和從節(jié)點(diǎn)勋磕,而這兩者就是HBase的主要兩個部分:HBase Master(作主節(jié)點(diǎn))和HBase Region Server(做從節(jié)點(diǎn))妈候。
Master是HBase集群的主控服務(wù)器,負(fù)責(zé)集群狀態(tài)的管理維護(hù)挂滓;Region Server是HBase具體對外提供服務(wù)的進(jìn)程苦银,就是主要負(fù)責(zé)數(shù)據(jù)的檢索等。
另外Hbase集群由zookeeper來監(jiān)控。在偽分布模式下Hbase會開啟自帶的zookeeper幔虏。
再來看一幅HBase總體組成結(jié)構(gòu)圖:
首先纺念,HBase中的所有數(shù)據(jù)文件都存儲在Hadoop HDFS文件系統(tǒng)上。主要包括兩種文件類型:
- HFile想括, HBase中KeyValue數(shù)據(jù)的存儲格式陷谱。
- HLogFile,HBase中WAL(Write Ahead Log) 的存儲格式瑟蜈,物理上是Hadoop的Sequence File烟逊。
接著,可以看到铺根,在一個Region server cluster里面有多個Region Server宪躯,其中Region Server又包含了很多Region,而Region是HBase調(diào)度的基本單位位迂,多個Region能組成一個真正的Table访雪,如下圖:
而每一個Region內(nèi)部里面又有一系列Store。每個Store里面又是由memStore和StoreFile兩個部分組成囤官,其中StoreFile是最終的數(shù)據(jù)冬阳,它是對HFile的輕量級包裝,存儲到HDFS中党饮;而memStore不論在Store是否有真實(shí)數(shù)據(jù)都將會有肝陪,在內(nèi)存當(dāng)中。
HBase可以看做HDFS文件系統(tǒng)上的數(shù)據(jù)庫刑顺,有著海量數(shù)據(jù)存儲氯窍、快速隨機(jī)訪問和大量寫操作的應(yīng)用的優(yōu)點(diǎn),常用在互聯(lián)網(wǎng)搜索引擎數(shù)據(jù)存儲蹲堂、審計日志系統(tǒng)狼讨、實(shí)時系統(tǒng)、內(nèi)容服務(wù)系統(tǒng)當(dāng)中柒竞。
以上簡單介紹了HBase政供,下一篇準(zhǔn)備看看HBase的安裝和它的基本用法。
(PS:以上的圖示均來自《深入理解大數(shù)據(jù)》一書朽基。)