什么是HBase技術(shù)?HBase 是一個(gè)開(kāi)源的、分布式、版本化、高可靠、高性能、面向列、可伸縮的NoSQL數(shù)據(jù)庫(kù),它利用Hadoop分布式文件系統(tǒng)提供分布式數(shù)據(jù)存儲(chǔ)。
HBase訪(fǎng)問(wèn)接口
Native Java API,最常規(guī)和高效的訪(fǎng)問(wèn)方式,適合Hadoop MapReduce Job并行批處理HBase表數(shù)據(jù)
HBase Shell,HBase的命令行工具,最簡(jiǎn)單的接口,適合HBase管理使用
Thrift Gateway,利用Thrift序列化技術(shù),支持C++,PHP,Python等多種語(yǔ)言,適合其他異構(gòu)系統(tǒng)在線(xiàn)訪(fǎng)問(wèn)HBase表數(shù)據(jù)
REST Gateway,支持REST 風(fēng)格的Http API訪(fǎng)問(wèn)HBase, 解除了語(yǔ)言限制
Pig,可以使用Pig Latin流式編程語(yǔ)言來(lái)操作HBase中的數(shù)據(jù),和Hive類(lèi)似,本質(zhì)最終也是編譯成MapReduce Job來(lái)處理HBase表數(shù)據(jù),適合做數(shù)據(jù)統(tǒng)計(jì)
Hive,當(dāng)前Hive的Release版本尚沒(méi)有加入對(duì)HBase的支持,但在下一個(gè)版本Hive 0.7.0中將會(huì)支持HBase,可以使用類(lèi)似SQL語(yǔ)言來(lái)訪(fǎng)問(wèn)HBase。
HBase運(yùn)行模式
HBase的運(yùn)行有三種模式:?jiǎn)螜C(jī)模式、偽分布式模式、分布式模式。
單機(jī)模式:在一臺(tái)計(jì)算機(jī)上安裝和使用HBase,不涉及數(shù)據(jù)的分布式存儲(chǔ);
偽分布式模式:在一臺(tái)計(jì)算機(jī)上模擬一個(gè)小的集群;
分布式模式:使用多臺(tái)計(jì)算機(jī)實(shí)現(xiàn)物理意義上的分布式存儲(chǔ)。這里出于學(xué)習(xí)目的,我們只重點(diǎn)討論單機(jī)模式和偽分布式模式。
Hbase的應(yīng)用場(chǎng)景
對(duì)象存儲(chǔ):我們知道不少的頭條類(lèi)、新聞?lì)惖牡男侣?、網(wǎng)頁(yè)、圖片存儲(chǔ)在HBase之中,一些病毒公司的病毒庫(kù)也是存儲(chǔ)在HBase之中
時(shí)序數(shù)據(jù):HBase之上有OpenTSDB模塊,可以滿(mǎn)足時(shí)序類(lèi)場(chǎng)景的需求
推薦畫(huà)像:特別是用戶(hù)的畫(huà)像,是一個(gè)比較大的稀疏矩陣,螞蟻的風(fēng)控就是構(gòu)建在HBase之上
時(shí)空數(shù)據(jù):主要是軌跡、氣象網(wǎng)格之類(lèi),滴滴打車(chē)的軌跡數(shù)據(jù)主要存在HBase之中,另外在技術(shù)所有大一點(diǎn)的數(shù)據(jù)量的車(chē)聯(lián)網(wǎng)企業(yè),數(shù)據(jù)都是存在HBase之中
OLAP:Kylin一個(gè)cube分析工具,底層的數(shù)據(jù)就是存儲(chǔ)在HBase之中,不少客戶(hù)自己基于離線(xiàn)計(jì)算構(gòu)建cube存儲(chǔ)在hbase之中,滿(mǎn)足在線(xiàn)報(bào)表查詢(xún)的需求
消息/訂單:在電信領(lǐng)域、銀行領(lǐng)域,不少的訂單查詢(xún)底層的存儲(chǔ),另外不少通信、消息同步的應(yīng)用構(gòu)建在HBase之上
Feeds流:典型的應(yīng)用就是xx朋友圈類(lèi)似的應(yīng)用
NewSQL:之上有Phoenix的插件,可以滿(mǎn)足二級(jí)索引、SQL的需求,對(duì)接傳統(tǒng)數(shù)據(jù)需要SQL非事務(wù)的需求
為什么采用HBase?
HBase 不同于一般的關(guān)系數(shù)據(jù)庫(kù),它是一個(gè)適合于非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫(kù).所謂非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)就是說(shuō)HBase是基于列的而不是基于行的模式,這樣方面讀寫(xiě)你的大數(shù)據(jù)內(nèi)容。
HBase是介于Map Entry(key & value)和DB Row之間的一種數(shù)據(jù)存儲(chǔ)方式。就點(diǎn)有點(diǎn)類(lèi)似于現(xiàn)在流行的Memcache,但不僅僅是簡(jiǎn)單的一個(gè)key對(duì)應(yīng)一個(gè) value,你很可能需要存儲(chǔ)多個(gè)屬性的數(shù)據(jù)結(jié)構(gòu),但沒(méi)有傳統(tǒng)數(shù)據(jù)庫(kù)表中那么多的關(guān)聯(lián)關(guān)系,這就是所謂的松散數(shù)據(jù)。
簡(jiǎn)單來(lái)說(shuō),你在HBase中的表創(chuàng)建的可以看做是一張很大的表,而這個(gè)表的屬性可以根據(jù)需求去動(dòng)態(tài)增加,在HBase中沒(méi)有表與表之間關(guān)聯(lián)查詢(xún)。你只需要 告訴你的數(shù)據(jù)存儲(chǔ)到Hbase的那個(gè)column families 就可以了,不需要指定它的具體類(lèi)型:char,varchar,int,tinyint,text等等。但是你需要注意HBase中不包含事務(wù)此類(lèi)的功 能。
Apache HBase 和Google Bigtable 有非常相似的地方,一個(gè)數(shù)據(jù)行擁有一個(gè)可選擇的鍵和任意數(shù)量的列。表是疏松的存儲(chǔ)的,因此用戶(hù)可以給行定義各種不同的列,對(duì)于這樣的功能在大項(xiàng)目中非常實(shí)用,可以簡(jiǎn)化設(shè)計(jì)和升級(jí)的成本。