Hive和Hadoop關(guān)系
Hive是基于Hadoop的一個數(shù)據(jù)倉庫工具,用來進行數(shù)據(jù)提取、轉(zhuǎn)化、加載,這是一種可以查詢和分析存儲在Hadoop中的大規(guī)模數(shù)據(jù)的機制。Hive數(shù)據(jù)倉庫工具能將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供SQL查詢功能,能將SQL語句轉(zhuǎn)變成MapReduce任務(wù)來執(zhí)行。
關(guān)于Hive的描述可以歸結(jié)為這么幾點來理解:
·?Hive是工具。
· Hive可以用來構(gòu)建數(shù)據(jù)倉庫。
·?Hive具有類似SQL的操作語句HQL。
· Hive是用來開發(fā)SQL類型腳本,用于開發(fā)MapReduce操作的平臺。
Hive最初由Facebook開源,用于解決海量結(jié)構(gòu)化日志的數(shù)據(jù)統(tǒng)計分析,是建立在Hadoop集群的HDFS上的數(shù)據(jù)倉庫基礎(chǔ)框架,其本質(zhì)是將類SQL語句轉(zhuǎn)換為MapReduce任務(wù)運行??梢酝ㄟ^類SQL語句快速實現(xiàn)簡單的MapReduce統(tǒng)計計算,十分適合數(shù)據(jù)倉庫的統(tǒng)計分析。
所有Hive處理的數(shù)據(jù)都存儲在HDFS中,Hive在加載數(shù)據(jù)過程中不會對數(shù)據(jù)進行任何修改,只是將數(shù)據(jù)移動或復(fù)制到HDFS中Hive設(shè)定的目錄下。所以Hive不支持對數(shù)據(jù)的改寫和添加,所有數(shù)據(jù)都是在加載時確定的。
因此,Hive總的說來具有以下特點:
(1)Hive是一個構(gòu)建在Hadoop上的數(shù)據(jù)倉庫框架。
(2)Hive設(shè)計的目的是讓精通SQL技能、但Java編程技能相對較弱的數(shù)據(jù)分析師能夠快速進行大數(shù)據(jù)分析項目開發(fā)與應(yīng)用。
Hive的能力在于直接分析通過ETL清洗過后的半結(jié)構(gòu)化數(shù)據(jù),其步驟如圖1-3所示。

Hive 構(gòu)建在 Hadoop 之上,二者關(guān)系示意圖如圖1-4所示。

它們關(guān)系解釋如下:
·?Hive對外提供CLI、Web Interface(Web接口)、JDBC、ODBC等訪問接口,Hadoop提供后臺存儲和計算服務(wù)。
· HQL中對查詢語句的解釋、優(yōu)化、生成查詢計劃是由Hive Diver完成的。
·?所有的數(shù)據(jù)都是存儲在Hadoop的HDFS中。
·?查詢計劃被轉(zhuǎn)化為 MapReduce 任務(wù),在 Hadoop 中執(zhí)行(但要注意有些查詢也可能沒有MapReduce 任務(wù),如:select * from table)。
· Hadoop和Hive都是用UTF-8編碼的。
總之,Hive是Hadoop的延申。Hive是一個提供了查詢功能的數(shù)據(jù)倉庫核心組件,Hadoop底層的HDFS為Hive提供了數(shù)據(jù)存儲,MapReduce為Hive提供了分布式運算。HDFS上存儲著海量的數(shù)據(jù),我們要對這些數(shù)據(jù)進行計算和分析,則需要使用Java編寫MapReduce(MR)程序來實現(xiàn),但Java編程門檻較高,且一個MapReduce程序?qū)懫饋硪獛资习傩?。而Hive可以直接通過SQL操作Hadoop,SQL簡單易寫、可讀性強,Hive將用戶提交的SQL解析成MapReduce任務(wù)供Hadoop直接運行。Hive某種程度來說也不進行數(shù)據(jù)計算,只是個解釋器,只負(fù)責(zé)將用戶需要對數(shù)據(jù)處理的邏輯,通過SQL編程提交后解釋成MapReduce程序,然后將這個MR程序提交給YARN進行調(diào)度執(zhí)行。所以,實際進行分布式運算的是MapReduce程序。
本文節(jié)選自《Hive入門與大數(shù)據(jù)分析實戰(zhàn)》,內(nèi)容發(fā)布獲得作者和出版社授權(quán)。
