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