亢華愛(ài)
摘 要:Hive是一種建立在Hadoop上的數(shù)據(jù)倉(cāng)庫(kù)基礎(chǔ)構(gòu)架。Hive系統(tǒng)結(jié)構(gòu)中的解析器,可以將用戶(hù)編寫(xiě)的HiveQL語(yǔ)句進(jìn)行解析,解析出相應(yīng)的MapReduce程序,本文使用Hive對(duì)某網(wǎng)站用戶(hù)評(píng)論數(shù)據(jù)進(jìn)行分析,快速實(shí)現(xiàn)MapReduce統(tǒng)計(jì)任務(wù)。
關(guān)鍵詞:Hive;HQL;MapReduce
中圖分類(lèi)號(hào):TB 文獻(xiàn)標(biāo)識(shí)碼:A doi:10.19311/j.cnki.1672-3198.2022.05.077
1 Hive的概述
Hive起源于Facebook,F(xiàn)acebook公司有著大量的日志數(shù)據(jù),面對(duì)這樣海量的結(jié)構(gòu)化數(shù)據(jù), Facebook開(kāi)發(fā)團(tuán)隊(duì)想到設(shè)計(jì)一種使用SQL語(yǔ)言就能夠?qū)θ罩緮?shù)據(jù)查詢(xún)分析的工具,這樣只需要懂SQL語(yǔ)言,就能夠勝任大數(shù)據(jù)分析方面的工作,大大節(jié)省開(kāi)發(fā)人員的學(xué)習(xí)成本,Hive就這樣應(yīng)運(yùn)而生了。Hive 是Hadoop生態(tài)系統(tǒng)中的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)技術(shù)。大量數(shù)據(jù)存儲(chǔ)在HDFS中,Hive能夠?qū)⑦@些的數(shù)據(jù)進(jìn)行數(shù)據(jù)加載、提取和轉(zhuǎn)換。
在Hadoop生態(tài)系統(tǒng)結(jié)構(gòu)中,Hive這個(gè)數(shù)據(jù)倉(cāng)庫(kù)技術(shù)占有非常重要的地位,Hive能夠?qū)⒁粋€(gè)個(gè)結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張張數(shù)據(jù)庫(kù)表。Hive完成的映射關(guān)系包括,SQL中的表、字段映射為HDFS中的目錄、文件。Hive實(shí)現(xiàn)這種映射依靠的是Hive解析器,Hive解析器能夠?qū)⒂脩?hù)的SQl語(yǔ)句解析成相應(yīng)的MapReduce程序。總之,Hive借助Hadoop的MapReduce程序完成計(jì)算;借助Hadoop的HDFS進(jìn)行數(shù)據(jù)存儲(chǔ);依靠MySql進(jìn)行元數(shù)據(jù)的存儲(chǔ)。
Hive具有完整的SQL查詢(xún)功能,用戶(hù)可以使用類(lèi)似SQL的語(yǔ)言進(jìn)行數(shù)據(jù)查詢(xún),對(duì)于熟悉MapReduce的程序員,也可以開(kāi)發(fā)用戶(hù)自定義的mapper程序和 reducer程序來(lái)處理復(fù)雜的分析工作。雖然Hive具有類(lèi)SQL的查詢(xún)語(yǔ)句HQL,能夠完成數(shù)據(jù)查詢(xún)功能,但從體系結(jié)構(gòu)、功能等方面來(lái)看,它都不是數(shù)據(jù)庫(kù)。
使用Hive的過(guò)程中,用戶(hù)只需要熟悉SQL語(yǔ)言就可以完成大數(shù)據(jù)分析工作,這樣就可以讓一些不擅長(zhǎng)基于Java的開(kāi)發(fā),編程基礎(chǔ)一般,不熟悉MapReduce開(kāi)發(fā)的用戶(hù),能夠在HDFS大規(guī)模數(shù)據(jù)集上利用SQL語(yǔ)言進(jìn)行查詢(xún)、匯總、分析數(shù)據(jù)。
1 Hive的優(yōu)點(diǎn)及系統(tǒng)架構(gòu)
Hive使用廣泛,它具有如下優(yōu)點(diǎn)。
(1) Hive支持標(biāo)準(zhǔn)的SQL語(yǔ)法,省去了用戶(hù)編寫(xiě)MapReduce程序的過(guò)程,完成相同的業(yè)務(wù)邏輯Hive只需要寫(xiě)短短幾行Sql命令就可以完成需要的功能,大大減少了公司的開(kāi)發(fā)成本。
(2)由于Hive的操作接口采用了類(lèi)似于SQL的語(yǔ)法,這樣就提供了快速開(kāi)發(fā)的便利,容易學(xué)習(xí)、容易使用。避免去編寫(xiě)大量的MapReduce程序,減小開(kāi)發(fā)人員的時(shí)間和學(xué)習(xí)成本。
(3)Hive是為大數(shù)據(jù)批量處理而生的,Hive的出現(xiàn)也解決傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)在大數(shù)據(jù)處理上的瓶頸。
Hive的優(yōu)勢(shì)和它的系統(tǒng)架構(gòu)是分不開(kāi)的,hive的體系結(jié)構(gòu)包括:
(1)用戶(hù)接口:用戶(hù)接口包括shell終端命令行;JDBC/ODBC ;WebUI。
(2)Hive解析器:Hive解析器的核心功能就是根據(jù)用戶(hù)編寫(xiě)的Sql語(yǔ)法匹配出相應(yīng)的MapReduce模板,形成對(duì)應(yīng)的MapReduce job進(jìn)行執(zhí)行。
(3)Hive元數(shù)據(jù)庫(kù)(MetaStore):Hive將表中的元數(shù)據(jù)信息存儲(chǔ)在數(shù)據(jù)庫(kù)中, Hive中的元數(shù)據(jù)信息包括表的名字、表的列和分區(qū)、表的屬性、表的數(shù)據(jù)所在的目錄等。實(shí)際工作中配置中使用Mysql存儲(chǔ)元數(shù)據(jù)信息。Hive中的解析器在運(yùn)行的時(shí)候會(huì)讀取元數(shù)據(jù)庫(kù)MetaStore中的相關(guān)信息。
(4)Hadoop:Hive這個(gè)數(shù)據(jù)倉(cāng)庫(kù)的數(shù)據(jù)是存儲(chǔ)在Hadoop的HDFS中,業(yè)務(wù)實(shí)際分析計(jì)算是利用Hadoop的MapReduce完成的。
2 HQL基本應(yīng)用
Hive定義了一套自己的SQL,簡(jiǎn)稱(chēng)HQL,它與關(guān)系型數(shù)據(jù)庫(kù)的SQL略有不同,但支持了絕大多數(shù)的語(yǔ)句如:DDL、DML以及常見(jiàn)的聚合函數(shù)、連接查詢(xún)、條件查詢(xún)。
(1)DDL操作(數(shù)據(jù)定義語(yǔ)言)包括:Create、Alter、Show、Drop等。
create database-創(chuàng)建新數(shù)據(jù)庫(kù)
alter database -修改數(shù)據(jù)庫(kù)
drop database -刪除數(shù)據(jù)庫(kù)
create table -創(chuàng)建新表
alter table -變更(改變)數(shù)據(jù)庫(kù)表
drop table -刪除表
create index -創(chuàng)建索引(搜索鍵)
drop index -刪除索引
show table -查看表
(2)DML操作(數(shù)據(jù)操作語(yǔ)言)包括:Load 、Insert、Update、Delete、Merge。
load data -加載數(shù)據(jù),包括insert into - 插入數(shù)據(jù)和insert overwrite - 覆蓋數(shù)據(jù)
update table -更新表
delete from table where id = 1;表示刪除表中ID等于1的數(shù)據(jù)(delete在Hive 0.14開(kāi)始可用,并且只能在支持ACID的表上執(zhí)行)。
merge合并語(yǔ)句(MERGE在Hive 2.2開(kāi)始可用,并且只能在支持ACID的表上執(zhí)行)。
3 基于Hive完成離線(xiàn)數(shù)據(jù)分析
我們分析的數(shù)據(jù)來(lái)源是某商品的用戶(hù)評(píng)論數(shù)據(jù),該數(shù)據(jù)以文件的形式存儲(chǔ)在hdfs中,啟動(dòng)Hadoop和Hive之后,在Hive中創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)和數(shù)據(jù)表,將清洗后的數(shù)據(jù)文件導(dǎo)入該表中,用戶(hù)只需要依據(jù)實(shí)際的業(yè)務(wù)需要編寫(xiě)HQL語(yǔ)句,接下來(lái)Hive框架會(huì)把HQL語(yǔ)句解析成相應(yīng)的MapReduce程序,借助MapReduce計(jì)算框架運(yùn)行job,便可以獲得期望的分析結(jié)果。
具體操作過(guò)程如下:
(1)在hive中創(chuàng)建commentdata數(shù)據(jù)倉(cāng)庫(kù),并切換到commentdata下。
create database commentdata;
use commentdata;
(2)在hive中創(chuàng)建一張表,用于存放清洗后的數(shù)據(jù),表名為comment,Hive創(chuàng)建comment內(nèi)部表的語(yǔ)句如下:
create table comment(
productid string,
commentcount int,
goodcount int,
generalcount int,
poorcount int,
goodrateshow float,
generalrateshow float,
poorrateshow float,
guid string,
content string,
creationtime string,
score int,
nickname string,
userlevelname string,
userclientshow string,
ismobile string,
days int
)row format delimited fields terminated by \\t';
(3)表設(shè)計(jì)好以后,在Hive端使用load命令,將清洗后的數(shù)據(jù)文件part-r-00000導(dǎo)入Hive表中。
(4)編寫(xiě)HQL語(yǔ)句,分析用戶(hù)使用移動(dòng)端購(gòu)買(mǎi)還是PC端購(gòu)買(mǎi),及移動(dòng)端和PC端的用戶(hù)比例。
(5)編寫(xiě)HQL語(yǔ)句,分析用戶(hù)評(píng)論周期,分析收到貨后,用戶(hù)一般多久進(jìn)行評(píng)論。
(6)編寫(xiě)HQL語(yǔ)句,分析會(huì)員級(jí)別,用來(lái)判斷購(gòu)買(mǎi)此商品的用戶(hù)級(jí)別。
4 結(jié)論
Hive核心功能是一個(gè)SQL解析引擎,能夠?qū)⒂脩?hù)編寫(xiě)的SQL語(yǔ)句轉(zhuǎn)化為對(duì)應(yīng)的MapReduce程序,Hive本身并不存儲(chǔ)和計(jì)算數(shù)據(jù),它依賴(lài)Hadoop的HDFS完成大數(shù)據(jù)的存儲(chǔ),依賴(lài)MapReduce進(jìn)行計(jì)算,并且借助MySql來(lái)存儲(chǔ)元數(shù)據(jù)。
參考文獻(xiàn)
[1]林子雨.大數(shù)據(jù)技術(shù)原理與應(yīng)用[M].北京:人民郵電出版社,2017.
[2]蔣煥亮.基于Hive的日志倉(cāng)庫(kù)構(gòu)建研究[J].計(jì)算機(jī)時(shí)代,2016,(11).
[3]王康,陳海光,李東靜,等.基于Hive的性能優(yōu)化研究[J].上海師范大學(xué)學(xué)報(bào),2017,(8).
3003500338205