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