? ? ?Hive是facebook貢獻(xiàn)給apache的開(kāi)源項(xiàng)目,是建立在 Hadoop 上的數(shù)據(jù)倉(cāng)庫(kù)基礎(chǔ)構(gòu)架。它提供了一系列的工具,可以用來(lái)進(jìn)行數(shù)據(jù)提取轉(zhuǎn)化加載(ETL),這是一種可以存儲(chǔ)、查詢(xún)和分析存儲(chǔ)在 Hadoop 中的大規(guī)模數(shù)據(jù)的機(jī)制。Hive 定義了簡(jiǎn)單的類(lèi) SQL 查詢(xún)語(yǔ)言,稱(chēng)為 QL,它允許熟悉 SQL 的用戶(hù)查詢(xún)數(shù)據(jù)。同時(shí),這個(gè)語(yǔ)言也允許熟悉 MapReduce 開(kāi)發(fā)者的開(kāi)發(fā)自定義的 mapper 和 reducer 來(lái)處理內(nèi)建的 mapper 和 reducer 無(wú)法完成的復(fù)雜的分析工作。
? ? ?Hive與Hadoop的關(guān)系:
? ? ?Hive 體系結(jié)構(gòu)主要分為以下幾個(gè)部分:
??用戶(hù)接口
? ? 用戶(hù)接口主要有三個(gè):CLI,Client 和 WUI。其中最常用的是 CLI,CLI啟動(dòng)的時(shí)候,會(huì)同時(shí)啟動(dòng)一個(gè) Hive 副本。Client 是 Hive 的客戶(hù)端,用戶(hù)連接至 Hive Server。在啟動(dòng) Client 模式的時(shí)候,需要指出 Hive Server 所在節(jié)點(diǎn),并且在該節(jié)點(diǎn)啟動(dòng) Hive Server。 WUI 是通過(guò)瀏覽器訪問(wèn) Hive。
??元數(shù)據(jù)存儲(chǔ)
? ? Hive 將元數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中,如 mysql、derby。Hive 中的元數(shù)據(jù)包括表的名字,表的列和分區(qū)及其屬性,表的屬性(是否為外部表等),表的數(shù)據(jù)所在目錄等。
??解釋器、編譯器、優(yōu)化器、執(zhí)行器
? ? 解釋器、編譯器、優(yōu)化器完成 QL 查詢(xún)語(yǔ)句從詞法分析、語(yǔ)法分析、編譯、優(yōu)化以及查詢(xún)計(jì)劃的生成。生成的查詢(xún)計(jì)劃存儲(chǔ)在 HDFS 中,并在隨后有 MapReduce 調(diào)用執(zhí)行。
? ? ?Hive的特點(diǎn):
? ?可擴(kuò)展。 Hive可以自由的擴(kuò)展集群的規(guī)模,一般情況下不需要重啟服務(wù)。
? ?延展性 。Hive支持用戶(hù)自定義函數(shù),用戶(hù)可以根據(jù)自己的需求來(lái)實(shí)現(xiàn)自己的函數(shù)。
? ?容錯(cuò) 。良好的容錯(cuò)性,節(jié)點(diǎn)出現(xiàn)問(wèn)題SQL仍可完成執(zhí)行。
? ? ?Hive與傳統(tǒng)數(shù)據(jù)庫(kù)對(duì)比:
?
? ???查詢(xún)語(yǔ)言。由于 SQL 被廣泛的應(yīng)用在數(shù)據(jù)倉(cāng)庫(kù)中,因此,專(zhuān)門(mén)針對(duì) Hive 的特性設(shè)計(jì)了類(lèi) SQL 的查詢(xún)語(yǔ)言 HQL。熟悉 SQL 開(kāi)發(fā)的開(kāi)發(fā)者可以很方便的使用 Hive 進(jìn)行開(kāi)發(fā)。
? ??數(shù)據(jù)存儲(chǔ)位置。Hive 是建立在Hadoop 之上的,所有 Hive 的數(shù)據(jù)都是存儲(chǔ)在HDFS 中的。而數(shù)據(jù)庫(kù)則可以將數(shù)據(jù)保存在塊設(shè)備或者本地文件系統(tǒng)中。
? ??數(shù)據(jù)格式。Hive 中沒(méi)有定義專(zhuān)門(mén)的數(shù)據(jù)格式,數(shù)據(jù)格式可以由用戶(hù)指定,用戶(hù)定義數(shù)據(jù)格式需要指定三個(gè)屬性:列分隔符(通常為空格、”\t”、”\x001″)、行分隔符(”\n”)以及讀取文件數(shù)據(jù)的方法(Hive 中默認(rèn)有三個(gè)文件格式 TextFile,SequenceFile 以及 RCFile)。由于在加載數(shù)據(jù)的過(guò)程中,不需要從用戶(hù)數(shù)據(jù)格式到 Hive 定義的數(shù)據(jù)格式的轉(zhuǎn)換,因此,Hive 在加載的過(guò)程中不會(huì)對(duì)數(shù)據(jù)本身進(jìn)行任何修改,而只是將數(shù)據(jù)內(nèi)容復(fù)制或者移動(dòng)到相應(yīng)的 HDFS 目錄中。而在數(shù)據(jù)庫(kù)中,不同的數(shù)據(jù)庫(kù)有不同的存儲(chǔ)引擎,定義了自己的數(shù)據(jù)格式。所有數(shù)據(jù)都會(huì)按照一定的組織存儲(chǔ),因此,數(shù)據(jù)庫(kù)加載數(shù)據(jù)的過(guò)程會(huì)比較耗時(shí)。
? ??數(shù)據(jù)更新。由于 Hive 是針對(duì)數(shù)據(jù)倉(cāng)庫(kù)應(yīng)用設(shè)計(jì)的,而數(shù)據(jù)倉(cāng)庫(kù)的內(nèi)容是讀多寫(xiě)少的。因此,Hive 中不支持對(duì)數(shù)據(jù)的改寫(xiě)和添加,所有的數(shù)據(jù)都是在加載的時(shí)候中確定好的。而數(shù)據(jù)庫(kù)中的數(shù)據(jù)通常是需要經(jīng)常進(jìn)行修改的,因此可以使用 INSERT INTO ...? VALUES 添加數(shù)據(jù),使用 UPDATE... SET 修改數(shù)據(jù)。
? ??索引。之前已經(jīng)說(shuō)過(guò),Hive 在加載數(shù)據(jù)的過(guò)程中不會(huì)對(duì)數(shù)據(jù)進(jìn)行任何處理,甚至不會(huì)對(duì)數(shù)據(jù)進(jìn)行掃描,因此也沒(méi)有對(duì)數(shù)據(jù)中的某些 Key 建立索引。Hive 要訪問(wèn)數(shù)據(jù)中滿足條件的特定值時(shí),需要暴力掃描整個(gè)數(shù)據(jù),因此訪問(wèn)延遲較高。由于 MapReduce 的引入, Hive 可以并行訪問(wèn)數(shù)據(jù),因此即使沒(méi)有索引,對(duì)于大數(shù)據(jù)量的訪問(wèn),Hive 仍然可以體現(xiàn)出優(yōu)勢(shì)。數(shù)據(jù)庫(kù)中,通常會(huì)針對(duì)一個(gè)或者幾個(gè)列建立索引,因此對(duì)于少量的特定條件的數(shù)據(jù)的訪問(wèn),數(shù)據(jù)庫(kù)可以有很高的效率,較低的延遲。由于數(shù)據(jù)的訪問(wèn)延遲較高,決定了 Hive 不適合在線數(shù)據(jù)查詢(xún)。
? ?? 執(zhí)行。Hive 中大多數(shù)查詢(xún)的執(zhí)行是通過(guò) Hadoop 提供的 MapReduce 來(lái)實(shí)現(xiàn)的(類(lèi)似 select * from tbl 的查詢(xún)不需要 MapReduce)。而數(shù)據(jù)庫(kù)通常有自己的執(zhí)行引擎。
? ??執(zhí)行延遲。之前提到,Hive 在查詢(xún)數(shù)據(jù)的時(shí)候,由于沒(méi)有索引,需要掃描整個(gè)表,因此延遲較高。另外一個(gè)導(dǎo)致 Hive 執(zhí)行延遲高的因素是 MapReduce 框架。由于 MapReduce 本身具有較高的延遲,因此在利用 MapReduce 執(zhí)行 Hive 查詢(xún)時(shí),也會(huì)有較高的延遲。相對(duì)的,數(shù)據(jù)庫(kù)的執(zhí)行延遲較低。當(dāng)然,這個(gè)低是有條件的,即數(shù)據(jù)規(guī)模較小,當(dāng)數(shù)據(jù)規(guī)模大到超過(guò)數(shù)據(jù)庫(kù)的處理能力的時(shí)候,Hive 的并行計(jì)算顯然能體現(xiàn)出優(yōu)勢(shì)。
? ??可擴(kuò)展性。由于 Hive 是建立在 Hadoop 之上的,因此 Hive 的可擴(kuò)展性是和 Hadoop 的可擴(kuò)展性是一致的(世界上最大的 Hadoop 集群在 Yahoo!,2009年的規(guī)模在4000 臺(tái)節(jié)點(diǎn)左右)。而數(shù)據(jù)庫(kù)由于 ACID 語(yǔ)義的嚴(yán)格限制,擴(kuò)展行非常有限。目前最先進(jìn)的并行數(shù)據(jù)庫(kù) Oracle 在理論上的擴(kuò)展能力也只有 100 臺(tái)左右。
? ??數(shù)據(jù)規(guī)模。由于 Hive 建立在集群上并可以利用 MapReduce 進(jìn)行并行計(jì)算,因此可以支持很大規(guī)模的數(shù)據(jù);對(duì)應(yīng)的,數(shù)據(jù)庫(kù)可以支持的數(shù)據(jù)規(guī)模較小。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
