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