在現(xiàn)如今,零基礎(chǔ)學(xué)員學(xué)習(xí)大數(shù)據(jù)分析的過(guò)程中,Hive和HBase是兩個(gè)非常重要的內(nèi)容,對(duì)于初學(xué)者而言容易混淆。所以比較兩者的聯(lián)系與差別,能夠幫助我們對(duì)這兩個(gè)組件有一個(gè)清晰的認(rèn)識(shí)和定位。那么,Hive和HBase有哪些區(qū)別與聯(lián)系以及適用于哪些場(chǎng)景呢?
蘇州網(wǎng)站建設(shè)認(rèn)為首先還要從兩者的概念入手。Hive是運(yùn)行在Hadoop上的一個(gè)工具,準(zhǔn)確地講是一個(gè)搜索工具。當(dāng)對(duì)海量數(shù)據(jù)進(jìn)行搜索時(shí),Hadoop的計(jì)算引擎是MapReduce。但是對(duì)MapReduce的操作和編程是非常復(fù)雜的。于是Hive的存在就讓復(fù)雜的編程過(guò)程簡(jiǎn)化成了用SQL語(yǔ)言對(duì)海量數(shù)據(jù)的操作。這大大減輕了程序員的工作量??梢哉f(shuō),Hive的存在讓海量數(shù)據(jù)的增刪改查更加方便。其實(shí)從Hive的logo就可以看出Hive讓大象變成了小蜜蜂,化繁為簡(jiǎn)是它最本質(zhì)的亮點(diǎn)。
再來(lái)說(shuō)說(shuō)HBase,它是Hadoop的子項(xiàng)目,當(dāng)然也可以理解為一個(gè)工具。Hadoop的數(shù)據(jù)運(yùn)算是由MapReduce完成的,而數(shù)據(jù)存儲(chǔ)是由HDFS完成的。HDFS是分布式存儲(chǔ),這是Hadoop存儲(chǔ)數(shù)據(jù)的特點(diǎn),但由此帶來(lái)的問(wèn)題就是數(shù)據(jù)的無(wú)序和散亂。HBase的產(chǎn)生,很好地解決了這一問(wèn)題。HBase能夠把這些數(shù)據(jù)映射成一張哈希表,那么,這些數(shù)據(jù)一旦成為具有實(shí)際存儲(chǔ)意義的表之后,就由無(wú)序變得有序,從而對(duì)數(shù)據(jù)搜索和操作的效率大大提高了。
做一個(gè)總結(jié),Hive和HBase都是Hadoop集群下的工具,Hive是對(duì)MapReduce的優(yōu)化,而HBase則是HDFS數(shù)據(jù)存儲(chǔ)的大管家。那么,這兩者各適用于哪些場(chǎng)景呢?
1.Hive中的表為純邏輯表,僅僅對(duì)表的元數(shù)據(jù)進(jìn)行定義。Hive沒(méi)有物理存儲(chǔ)的功能,它完全依賴(lài)HDFS和MapReduce。尚學(xué)堂陳老師指出這樣就可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為為一張數(shù)據(jù)庫(kù)表,并提供完整的SQL查詢(xún)功能,并將SQL語(yǔ)句最終轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行運(yùn)行。HBase表則是物理表,適合存放非結(jié)構(gòu)化的數(shù)據(jù)。
2.Hive是在MapReduce的基礎(chǔ)上對(duì)數(shù)據(jù)進(jìn)行處理,而MapReduce的數(shù)據(jù)處理依照行模式;而HBase為列模式,這樣使得對(duì)海量數(shù)據(jù)的隨機(jī)訪(fǎng)問(wèn)變得可行。
3.HBase的存儲(chǔ)表存儲(chǔ)密度小,因而用戶(hù)可以對(duì)行定義成不同的列;而Hive是邏輯表,屬于稠密型,即定義列數(shù),每一行對(duì)列數(shù)都有固定的數(shù)據(jù)。
4.Hive使用Hadoop來(lái)分析處理數(shù)據(jù),而Hadoop系統(tǒng)是批處理系統(tǒng),所以數(shù)據(jù)處理存在延時(shí)的問(wèn)題;而HBase是準(zhǔn)實(shí)時(shí)系統(tǒng),可以實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)查詢(xún)。
5.Hive沒(méi)有row-level的更新,它適用于大量append-only數(shù)據(jù)集(如日志)的批任務(wù)處理。而基于HBase的查詢(xún),支持和row-level的更新。
6.Hive全面支持SQL,一般可以用來(lái)進(jìn)行基于歷史數(shù)據(jù)的挖掘、分析。而HBase不適用于有join,多級(jí)索引,表關(guān)系復(fù)雜的應(yīng)用場(chǎng)景。
兩者使用場(chǎng)景的區(qū)別:
HBase的應(yīng)用場(chǎng)景通常是采集網(wǎng)頁(yè)數(shù)據(jù)的存儲(chǔ),因?yàn)樗莐ey-value型數(shù)據(jù)庫(kù),從而可以到各種key-value應(yīng)用場(chǎng)景,例如存儲(chǔ)日志信息,對(duì)于內(nèi)容信息不需要完全結(jié)構(gòu)化出來(lái)的類(lèi)CMS應(yīng)用等。注意hbase針對(duì)的仍然是OLTP應(yīng)用為主。
hive主要針對(duì)的是OLAP應(yīng)用,其底層是hdfs分布式文件系統(tǒng),重點(diǎn)是基于一個(gè)統(tǒng)一的查詢(xún)分析層,支撐OLAP應(yīng)用中的各種關(guān)聯(lián),分組,聚合類(lèi)SQL語(yǔ)句。hive一般只用于查詢(xún)分析統(tǒng)計(jì),而不能是常見(jiàn)的CUD操作,要知道HIVE是需要從已有的數(shù)據(jù)庫(kù)或日志進(jìn)行同步最終入到hdfs文件系統(tǒng)中,當(dāng)前要做到增量實(shí)時(shí)同步都相當(dāng)困難。