(西安歐亞學(xué)院,陜西 西安 710000)
Hive 是基于Hadoop 的一個(gè)數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供簡單的SQL 查詢功能。其優(yōu)點(diǎn)是學(xué)習(xí)成本低,用戶可以通過類SQL 語句快速實(shí)現(xiàn)簡單的MapReduce 統(tǒng)計(jì),即使用戶不熟悉MapReduce 程序,只要熟悉SQL 語言,也同樣可以通過分布式集群環(huán)境進(jìn)行數(shù)據(jù)查詢、匯總和分析,Hive 十分適合數(shù)據(jù)倉庫的統(tǒng)計(jì)分析。
Hive 的類SQL 語言HiveQL,并不完全支持SQL 標(biāo)準(zhǔn),Hive 大多數(shù)的查詢是通過MapReduce 實(shí)現(xiàn),而數(shù)據(jù)庫通常有自己的執(zhí)行引擎,Hive 不支持更新操作、索引和事務(wù),其子查詢和連接操作也存在很多限制。Hive查詢數(shù)據(jù)延遲性較高,是由于沒有索引,需要掃描整個(gè)數(shù)據(jù)庫表,而且HQL 轉(zhuǎn)換為MapReduce 程序后,執(zhí)行也有延遲。相對來說,數(shù)據(jù)庫延遲較低;但是如果數(shù)據(jù)規(guī)模非常大的時(shí)候,Hive 的并行計(jì)算就能體現(xiàn)出優(yōu)勢。
(1)配置Hive 前,需要給集群服務(wù)器配置元數(shù)據(jù)庫,在這里采取MySQL 作為元數(shù)據(jù)庫,服務(wù)器上先安裝MySQL,并啟動(dòng)MySQL 服務(wù)。
(2)本地MySQL 環(huán)境已經(jīng)配置好,下載并解壓hive 插件:
[root@master opt]# tar -zxvf apache-hive-2.1.1-bin.tar.gz
[root@master opt]# mv apache-hive-2.1.1-bin hive
(3)接下來配置Hive 環(huán)境變量,修改/root/.bash_profile 文件,添加如下環(huán)境變量內(nèi)容:
export HIVE_HOME=/opt/hive
export PATH=$PATH:$HIVE_HOME/bin
(4)修改/opt/hive/conf/下面的所有配置文件,通過mv 命令將所有文件后綴的“.template”去掉。
(5)修改hive 執(zhí)行腳本文件hive-env.sh,添加內(nèi)容如下:
export HIVE_CONF_DIR=/opt/hive/conf/
export HIVE_AUX_JARS_PATH=/opt/hive/lib/
(6)配置好后,將hive 所有文件分別傳遞到slave1和slave2。
(7)配置服務(wù)端和客戶端的hive-site.xml 文件。
(8)配置java 連接mysql 的驅(qū)動(dòng)包。
(9)修改slave1和slave2所需要的Hive 環(huán)境變量并加載生效。
Hive 運(yùn)行需要先啟動(dòng)Hadoop 服務(wù),再啟動(dòng)MetaStore 服務(wù)和hiveserver2 服務(wù)。Metastore 即hivestore 服務(wù)端,主要功能是提供將DDL,DML 等語句轉(zhuǎn)換為MapReduce 程序,提交到hdfs 集群并運(yùn)行中。hiveserver2 是Hive 的服務(wù)端,主要提供Hive 服務(wù),用戶可以使用beeline、jdbc 等方式連接到Hive 服務(wù)
(1)啟動(dòng)Hadoop,啟動(dòng)yarn
(2)初始化元數(shù)據(jù)庫并啟動(dòng)MetaStore 服務(wù)
schematool -dbType mysql -initSchema
[root@master~]# hive --service metastore &
(3)啟動(dòng)hiveserver2服務(wù),操作如下:
[root@master~]# hiveserver2 &
HiveServer2可以通過hive 命令直接訪問數(shù)據(jù)服務(wù),但是新的命令行工具Beeline,它是基于SQLLine CLI 的JDBC 客戶端。Beeline 工作模式有兩種,即本地嵌入模式和遠(yuǎn)程模式。與連接MySQL 的工具Navicat 功能類似,可以理解為Beeline 的客戶端。
在Hadoop 大數(shù)據(jù)平臺(tái)上,構(gòu)建Hive 數(shù)據(jù)倉庫,在Hive 數(shù)據(jù)倉庫中對海量結(jié)構(gòu)化數(shù)據(jù)進(jìn)行分析,能達(dá)到大數(shù)據(jù)分析和處理的需求。通過獲取相關(guān)結(jié)構(gòu)化應(yīng)用數(shù)據(jù),初步處理后,提交到HDFS 集群,創(chuàng)建Hive 數(shù)據(jù)表,并加載數(shù)據(jù),可以通過Hive 數(shù)據(jù)倉庫進(jìn)行數(shù)據(jù)分析、查詢和統(tǒng)計(jì)。
本案例中,通過爬蟲獲取騰訊證券網(wǎng)站在美上市股票數(shù)據(jù),提交到集群服務(wù)器,創(chuàng)建Stock_zhengquan 股票數(shù)據(jù)庫,并創(chuàng)建在美上市數(shù)據(jù)表stocks_CN_US,加載數(shù)據(jù)后,在Hive 集群環(huán)境對在美上市股票數(shù)據(jù)進(jìn)行分析和統(tǒng)計(jì),為股票證券相關(guān)金融公司的數(shù)據(jù)倉庫應(yīng)用和服務(wù)的技能。
在Hive 數(shù)據(jù)倉庫創(chuàng)建Stock_zhengquan 數(shù)據(jù)庫后,創(chuàng)建在美上市股票數(shù)據(jù)表stocks_CN_US,HQL 操作代碼如下:

3.2.1 復(fù)雜查詢
查詢代碼為“C”開頭和“A”結(jié)尾的股票的代碼、名稱和最新價(jià):
查詢代碼:
SELECT Symbol_en,stocksname,newprice FROM stocks_cn_us where Symbol_en Rlike "(^C.*|.*A$)"order by newprice desc limit 5;
查詢結(jié)果如下:
BABA 阿里巴巴 252.75
CEO 中海油 131.6
CBPO 泰邦生物 119.78
CSIQ 阿特斯太陽能 46.35
SINA 新浪 43.28
3.2.2 連接查詢
查詢股票中波動(dòng)幅度相等并且其中任何一個(gè)股價(jià)大于20元的股票信息:
SELECT distinct a.Symbol_en,a.stocksname,a.newprice,b.Symbol_en,
b.stocksname,b.newprice FROM stocks_cn_us a JOIN stocks_cn_us b ON a.fluctuation=b.fluctuation and a.Symbol_en<>b.Symbol_en WHERE a.newprice>20;
查詢結(jié)果如下:
CBPO 泰邦生物 119.78
COE 無憂英語 24.88
COE 無憂英語 24.88
CBPO 泰邦生物 119.78
SINA 新浪 43.28
PME 平潭海洋公司 1.48
VIPS 唯品會(huì) 36.48
CGA 中國綠色農(nóng)業(yè) 5.46
將數(shù)據(jù)倉庫技術(shù)運(yùn)用于金融科技企業(yè)大數(shù)據(jù)分析系統(tǒng),搭建Hive 數(shù)據(jù)倉庫,構(gòu)建不同類型的數(shù)據(jù)庫和數(shù)據(jù)表,對海量結(jié)構(gòu)化歷史數(shù)據(jù)進(jìn)行分布式存儲(chǔ)和分析,能幫助金融科技企業(yè)決策者從海量數(shù)據(jù)中挖掘更高的數(shù)據(jù)價(jià)值,作出有利于金融科技企業(yè)股票分析和統(tǒng)計(jì)的決策。