陳新房 劉義卿
(防災(zāi)科技學(xué)院信息工程學(xué)院,河北 廊坊 065201)
1990 年,比爾·恩門(mén)(Bill Inmon)第一次提出了數(shù)據(jù)倉(cāng)庫(kù)概念,與結(jié)構(gòu)化數(shù)據(jù)庫(kù)不同的是,數(shù)據(jù)倉(cāng)庫(kù)研究和解決如何從數(shù)據(jù)庫(kù)中獲取信息的問(wèn)題,數(shù)據(jù)倉(cāng)庫(kù)的基本特征表現(xiàn)為是一個(gè)用戶(hù)主題域的、集成統(tǒng)一的、穩(wěn)定性較強(qiáng)的、反映歷史變化的數(shù)據(jù)的集合,為管理層進(jìn)行分析決策(Decision Making Support)提供強(qiáng)有力的支撐。就重要功能而言,數(shù)據(jù)倉(cāng)庫(kù)仍然是對(duì)聯(lián)機(jī)事務(wù)處理(OLTP)長(zhǎng)時(shí)間以來(lái)產(chǎn)生的海量大數(shù)據(jù),通過(guò)數(shù)據(jù)倉(cāng)庫(kù)組件特有的數(shù)據(jù)儲(chǔ)存結(jié)構(gòu),進(jìn)行系統(tǒng)的、全面的分析與整理,以便通過(guò)不同的方法如聯(lián)機(jī)分析處理(OLAP)等進(jìn)行分析處理。同時(shí),隨著數(shù)據(jù)挖掘(Data Mining) 技術(shù)、決策支持系統(tǒng)(Decision-making Support System, DSS)、主管資訊系統(tǒng) (Excutive Information System)的創(chuàng)建,通過(guò)數(shù)據(jù)倉(cāng)庫(kù)操作能夠幫助決策者從大量數(shù)據(jù)中,快速高效的分析提取出有價(jià)值的信息,以利與決策制定以及對(duì)外部環(huán)境的變化租出響應(yīng)。數(shù)據(jù)倉(cāng)庫(kù)體系結(jié)構(gòu)如圖1 所示。
圖1 數(shù)據(jù)倉(cāng)庫(kù)體系結(jié)構(gòu)
Hive 的實(shí)現(xiàn)是基于Hadoop 生態(tài)系統(tǒng)的,通過(guò)Hive 工具,可以對(duì)數(shù)據(jù)進(jìn)行提取、轉(zhuǎn)化、加載等操作,能夠?qū)Υ鎯?chǔ)在Hadoop 集群中的海量數(shù)據(jù)進(jìn)行存儲(chǔ)、查詢(xún)和分析的操作機(jī)制。設(shè)計(jì)Hive工具的主要目的是使得對(duì)Java 編程技能掌握相對(duì)較弱但是對(duì)SQL 技能比較精通的數(shù)據(jù)分析師對(duì)存儲(chǔ)在HDFS 中的海量數(shù)據(jù)進(jìn)行查詢(xún)功能操作。
Hive 工具將數(shù)據(jù)文件映射成一張數(shù)據(jù)庫(kù)表,通過(guò)類(lèi)SQL 語(yǔ)言即HiveQL 語(yǔ)言的查詢(xún)功能,數(shù)據(jù)分析師通過(guò)編寫(xiě)相對(duì)精通的HiveQL 語(yǔ)句,即可實(shí)現(xiàn)MapReduce 任務(wù)的功能。這一特性使得Hive 十分適合對(duì)大規(guī)模數(shù)據(jù)存儲(chǔ)、統(tǒng)計(jì)、分析、查詢(xún)操作,由于是部署在Hadoop 平臺(tái)之上,因而具有良好的擴(kuò)展性。Hive 的優(yōu)點(diǎn)是相對(duì)簡(jiǎn)單易學(xué),可以快速通過(guò)類(lèi)似SQL 語(yǔ)句實(shí)現(xiàn)MapReduce 統(tǒng)計(jì)功能,可以大幅提高開(kāi)發(fā)效率。
HiveQL 的設(shè)計(jì)只是降低了學(xué)習(xí)成本,其實(shí)質(zhì)仍然是MapReduce 任務(wù)的實(shí)現(xiàn)。在此,再次強(qiáng)調(diào),Hive 工具本身是數(shù)據(jù)倉(cāng)庫(kù),而不是結(jié)構(gòu)化的數(shù)據(jù)庫(kù)系統(tǒng),二者的主要區(qū)別如表1 所示。
表1 Hive 與數(shù)據(jù)庫(kù)的區(qū)別
Hive 的體系結(jié)構(gòu)可以分為以下幾部分:
2.1 用戶(hù)可以通過(guò)三種接口實(shí)現(xiàn)Hive 的操作,分別是CLI、Client 以及WUI(Web User Interface)等接口。最常用的實(shí)現(xiàn)方式是CLI,這種借口形式啟動(dòng)CLI 接口同時(shí)會(huì)啟動(dòng)一個(gè)Hive 副本。利用Client 模式可以實(shí)現(xiàn)用戶(hù)連接至Hive Server,這種形式需要指出Hive Server 所安裝的節(jié)點(diǎn),在該節(jié)點(diǎn)上將啟動(dòng)Hive Server 起來(lái)。顧名思義,WUI 接口形式是用戶(hù)通過(guò)瀏覽器實(shí)現(xiàn)Hive 的操作。
2.2 處于Hive 核心位置是驅(qū)動(dòng)程序,由解釋器、編譯器、優(yōu)化器三部分組成,通過(guò)驅(qū)動(dòng)程序?qū)iveQL 語(yǔ)句進(jìn)行詞法分析、語(yǔ)法分析、編譯、優(yōu)化以及生產(chǎn)查詢(xún)計(jì)劃,進(jìn)一步將生成的查詢(xún)計(jì)劃存儲(chǔ)在集群中,隨后轉(zhuǎn)換為MapReduce 任務(wù)執(zhí)行完成。
2.3 與此同時(shí),Hive 也有結(jié)構(gòu)化數(shù)據(jù)庫(kù),如MySQL、derBy 數(shù)據(jù)庫(kù),這種結(jié)構(gòu)化數(shù)據(jù)表存儲(chǔ)的是數(shù)據(jù)表的元數(shù)據(jù),包括數(shù)據(jù)表名稱(chēng)、列(字段)、分區(qū)以及是否為外部表、數(shù)據(jù)所在目錄等信息。如圖2 所示。
圖2 Hive 系統(tǒng)架構(gòu)
雖然Hive 與結(jié)構(gòu)化數(shù)據(jù)庫(kù)有很大區(qū)別,但是在數(shù)據(jù)類(lèi)型方面,Hive 有著與結(jié)構(gòu)化數(shù)據(jù)庫(kù)相同的基本數(shù)據(jù)類(lèi)型,同時(shí)具有結(jié)構(gòu)化數(shù)據(jù)庫(kù)不具有集合數(shù)據(jù)類(lèi)型。
選擇數(shù)據(jù)類(lèi)型時(shí),需要考慮的因素主要有兩個(gè)方面:一是文本文件中數(shù)據(jù)類(lèi)型如何表示的,二是需要考慮數(shù)據(jù)存儲(chǔ)過(guò)程中為了提高存儲(chǔ)、計(jì)算性能問(wèn)題以及其他問(wèn)題是否具備可以替代的方案。
相比與結(jié)構(gòu)化數(shù)據(jù)庫(kù),Hive 具有一個(gè)獨(dú)特的功能就是文件中數(shù)據(jù)的編碼方式具有非常大的靈活性。如表2、3 所示。
表2 Hive 的基本數(shù)據(jù)類(lèi)型
表3 Hive 的集合數(shù)據(jù)類(lèi)型
簡(jiǎn)單來(lái)說(shuō),Hive 就是基于Hadoop 平臺(tái)上的數(shù)據(jù)倉(cāng)庫(kù)。在Hadoop 平臺(tái)上層設(shè)計(jì)了一個(gè)類(lèi)SQL 接口(即HiveQL)作為查詢(xún)接口,可以將HiveQL 裝換為MapReduce 任務(wù)在Hadoop 平臺(tái)上運(yùn)行實(shí)現(xiàn)。數(shù)據(jù)分析人員可以通過(guò)HiveQL 語(yǔ)言實(shí)現(xiàn)對(duì)海量數(shù)據(jù)的統(tǒng)計(jì)、分析、查詢(xún)操作,而不需要使用編程語(yǔ)言(例如Java)編寫(xiě)MapReduce 程序進(jìn)行實(shí)現(xiàn)。下面以常見(jiàn)的Group By 操作為例介紹實(shí)現(xiàn)過(guò)程。
現(xiàn)有一個(gè)數(shù)據(jù)分組Group By 操作,要求是將Score 表中的數(shù)據(jù)信息進(jìn)行合并,合并的過(guò)程按照rank 與level 構(gòu)成的組合鍵進(jìn)行操作,計(jì)算出在每一個(gè)rank 和level 的組合鍵值下數(shù)據(jù)記錄的條數(shù),不難寫(xiě)出其sql 語(yǔ)句為:
select rank, level ,count (*) as value from score group by rank, level
對(duì)于group by 操作轉(zhuǎn)換為MapReduce 的過(guò)程如圖3 所示。
圖3 HSQL 語(yǔ)句轉(zhuǎn)換成MapReduce 的基本原理
在此舉一個(gè)實(shí)例實(shí)踐操作Hive 數(shù)據(jù)分析過(guò)程。現(xiàn)有一個(gè)300000 行用戶(hù)信息的數(shù)據(jù)信息,將其上傳到分布式系統(tǒng)中,并利用數(shù)據(jù)倉(cāng)庫(kù)Hive 工具進(jìn)行數(shù)據(jù)分析。
在HDFS 上創(chuàng)建數(shù)據(jù)存儲(chǔ)目錄,將數(shù)據(jù)上傳到HDFS 分布式文件系統(tǒng)中,并顯示其前10 行內(nèi)容。
這是存儲(chǔ)在HDFS 文件系統(tǒng)中的數(shù)據(jù),不能進(jìn)行數(shù)據(jù)分析、清晰以及提取等操作,需要通過(guò)MapReduce 編程或Hive 實(shí)現(xiàn)對(duì)數(shù)據(jù)分析。但是MapReduce 要求數(shù)據(jù)分析人員對(duì)編程實(shí)現(xiàn)要求較高,實(shí)現(xiàn)較復(fù)雜,Hive 工具解決了這一難題,為精通SQL 語(yǔ)言而編程能力較弱的數(shù)據(jù)分析師對(duì)存儲(chǔ)在集群中的大規(guī)模數(shù)據(jù)進(jìn)行查詢(xún)操作提供了便利。
在Hive 數(shù)據(jù)倉(cāng)庫(kù)中創(chuàng)建了外表并且加載數(shù)據(jù)后,就可以通過(guò)HSQL 語(yǔ)言進(jìn)行數(shù)據(jù)分析操作了。
①利用Hive 語(yǔ)句,查詢(xún)前20 位用戶(hù)購(gòu)買(mǎi)商品時(shí)的時(shí)間和購(gòu)買(mǎi)的商品種類(lèi)。
2014-12-12 5232
②查詢(xún)出uid 不重復(fù)的數(shù)據(jù)有多少條。
hive>select count(distinct uid) from bigdata_user;
OK
270
此查詢(xún)編寫(xiě)Mapreduce 實(shí)現(xiàn)過(guò)程至少70 行代碼,在此不在贅述。
對(duì)數(shù)據(jù)分析完后,可以通過(guò)Sqoop 工具將其由Hive 導(dǎo)出到MySQL 結(jié)構(gòu)化數(shù)據(jù)庫(kù)中,已方便使用者進(jìn)行分析、存儲(chǔ)以及可視化等操作,各省消費(fèi)用戶(hù)數(shù)如圖4 所示。
圖4 各省消費(fèi)用戶(hù)數(shù)
總結(jié),本文首先介紹了數(shù)據(jù)倉(cāng)庫(kù)的概念,進(jìn)而引入Hive 數(shù)據(jù)倉(cāng)庫(kù)工具,設(shè)計(jì)Hive 工具的主要目的是使得對(duì)Java 編程技能掌握相對(duì)較弱但是對(duì)SQL 技能比較精通的數(shù)據(jù)分析師對(duì)存儲(chǔ)在HDFS 中的海量數(shù)據(jù)進(jìn)行查詢(xún)功能操作進(jìn)行論述,并介紹了Hive 的數(shù)據(jù)類(lèi)型以及HiveQL轉(zhuǎn)換為MapReduce 任務(wù)的過(guò)程。最后利用HiveSQL 對(duì)300000行用戶(hù)信息進(jìn)行數(shù)據(jù)分析操作,充分表明Hive 在數(shù)據(jù)分析上的特點(diǎn),并將數(shù)據(jù)結(jié)果導(dǎo)出進(jìn)行可視化。