蘇樹鵬
摘 要 在校園信息化過程中,傳統(tǒng)的業(yè)務平臺升級方法復雜,硬件成本太高,軟硬件利用率低等缺點,本文在云計算基礎上構(gòu)建用于處理海量數(shù)據(jù)的數(shù)字校園倉庫系統(tǒng)。該系統(tǒng)基于Hadoop+Hive框架實現(xiàn)對海量數(shù)據(jù)的并行處理,降低系統(tǒng)開發(fā)復雜度,提高高效性。
關(guān)鍵詞 云計算 海量數(shù)據(jù) Hadoop Map-Reduce Hive
中圖分類號:TP315 文獻標識碼:A
Data Warehouse Research Based on Hadoop and Hive Digital Campus
SU Shupeng
(Guangxi Technological College of Machinery and Electricity, Nanning, Guangxi 530007)
Abstract In the process of campus information, the traditional method of complex business platform upgrades, hardware cost is too high, and low utilization of hardware and software shortcomings, this paper constructs a digital campus system for processing massive data warehouse in the cloud computing basis. The system is based on Hadoop + Hive framework to achieve the massive data parallel processing, reduce system development complexity and improve efficiency.
Key words cloud computing; massive data; Hadoop; Map-Reduce; Hive
隨著以云計算、物聯(lián)網(wǎng)等為代表的新型信息技術(shù)的不斷涌現(xiàn),校園信息化過程中各系統(tǒng)產(chǎn)生結(jié)構(gòu)化以及非結(jié)構(gòu)化海量數(shù)據(jù),傳統(tǒng)業(yè)務平臺的數(shù)據(jù)倉庫已無法滿足需求,構(gòu)建新的大數(shù)據(jù)存儲及并行處理、分析的架構(gòu)應運而生。Hadoop是利用廉價的集群設備進行計算大規(guī)模數(shù)據(jù)的分布式平臺,其主要特點高效率、可靠、擴展能力強。本文基于Hadoop 和Hive 構(gòu)建數(shù)字校園的數(shù)據(jù)倉庫,快速對數(shù)字校園不斷膨脹的數(shù)據(jù)進行處理和分析,為各部門提供有價值的業(yè)務決策。
1 Hadoop與Hive
1.1 Hadoop
Hadoop是由Apache公司開發(fā)的開源分布式存儲和計算系統(tǒng),其由兩大核心部件組成:HDFS(Hadoop Distributed File System)和M/R(Map/Reduce),HDFS是存儲系統(tǒng),存儲文件會被分割成多個文件塊,每個文件塊被分配存儲到HDFS數(shù)據(jù)節(jié)點上,且會根據(jù)配置通過復制文件塊來保證數(shù)據(jù)的安全性。M/R用于大規(guī)模數(shù)據(jù)集的并行運算模型。一個作業(yè)通常會把輸入的數(shù)據(jù)集切分為若干獨立的數(shù)據(jù)塊,M/R把數(shù)據(jù)塊分發(fā)給集群的節(jié)點進行Map任務計算,節(jié)點會周期性向主節(jié)點報告完成的工作和狀態(tài),如果節(jié)點存在故障,主節(jié)點把數(shù)據(jù)分發(fā)到其他節(jié)點完成計算??蚣馨袽ap的輸出的結(jié)果交給Reduce任務,作業(yè)整個計算過程的數(shù)據(jù)都存儲在HDFS中,框架負責任務的調(diào)度和監(jiān)控。
1.2 Hive
Hive是基于Hadoop的開源數(shù)據(jù)倉庫工具,提供了一套類數(shù)據(jù)庫的數(shù)據(jù)存儲和處理機制,用于存儲和處理海量結(jié)構(gòu)化數(shù)據(jù),它把海量數(shù)據(jù)存儲于Hadoop文件系統(tǒng),Hive提供了完整的sql查詢功能,將用戶編寫的SQL語句進行解析和轉(zhuǎn)換,最終生成一系列基于Hadoop的map/reduce任務,通過執(zhí)行這些任務完成數(shù)據(jù)處理。Hive 擁有元數(shù)據(jù)存儲,主要用于存儲模式和統(tǒng)計信息,這些在數(shù)據(jù)探索,查詢優(yōu)化和查詢編譯中很有作用。
2 基于Hadoop和Hive數(shù)據(jù)倉庫
2.1 Hive的特性
(1)靈活的存儲引擎。Hive沒有固定的數(shù)據(jù)存儲格式,用戶可以自由組織Hive中的表,加載數(shù)據(jù)的過程中,不需要進行數(shù)據(jù)格式的轉(zhuǎn)換,只需告訴Hive數(shù)據(jù)中的列分隔符和行分隔符,Hive就可以解析數(shù)據(jù)。所以Hive加載數(shù)據(jù)只需將數(shù)據(jù)內(nèi)容復制到相應的HDFS目錄中。(2)高效執(zhí)行引擎。Hive的編譯器對源代碼進行語法分析、語義分析并生成目標代碼生成,Hive基于MapReduce,Hive的Sort和GroupBy都依賴MapReduce,而 MapReduce相當于固化了執(zhí)行算子,Map的MergeSort必須執(zhí)行,GroupBy算子只有一種模式,Reduce的Merge-Sort也必須選。(3)容錯機制。Hive的執(zhí)行計劃在MapReduce框架上以作業(yè)的方式執(zhí)行,每個作業(yè)的中間結(jié)果文件寫到本地磁盤,最終輸出文件寫到HDFS文件系統(tǒng),利用HDFS的多副本機制來保證數(shù)據(jù)的可靠性,從而達到作業(yè)的容錯性。如果在作業(yè)執(zhí)行過程中某節(jié)點出現(xiàn)故障,那么Hive執(zhí)行計劃基本不會受到影響。因此,基于Hive實現(xiàn)的數(shù)據(jù)倉庫可以部署在由普通機器構(gòu)建的分布式集群之上。(4)可視化。Hive的可視化界面基本屬于字符終端,用戶的技術(shù)水平一般比較高。面向不同的應用和用戶,提供個性化的可視化展現(xiàn),是Hive改進的一個重要方向。個性化的可視化也可以理解為用戶群體的分層,例如,圖形界面方式提供初級用戶,簡單語言方式提供中級用戶,復雜程序方式提供高級用戶。
2.2 基于Hadoop與Hive的數(shù)據(jù)倉庫架構(gòu)
系統(tǒng)的數(shù)據(jù)倉庫架構(gòu)如下圖1所示,各業(yè)務系統(tǒng)的數(shù)據(jù)通過ETL導入HDFS 中。Hive構(gòu)架基于Hadoop平臺上,Hive的Driver將HiveQL聲明傳遞給編譯器進行標準解析,類型檢查和語義分析,然后編譯器生成一個邏輯計劃且進行優(yōu)化,最后,將優(yōu)化后的DAG形式的Map/Reduce任務使用M/R按照依賴順序執(zhí)行任務,快速地將數(shù)據(jù)反饋給上層的應用。
圖1 基于Hadoop 與Hadoop 的數(shù)據(jù)倉庫架構(gòu)
3 Hive在數(shù)字校園的數(shù)據(jù)倉庫中的應用
本文在搭建Hadoop+Hive架構(gòu)上對網(wǎng)絡日志數(shù)據(jù)進行統(tǒng)計,包括類別訪問量、關(guān)鍵詞收索和每秒訪問量等。日志數(shù)據(jù)分布在5臺前端機,后臺腳本根據(jù)時間戳將每小時同步傳過來的日志數(shù)據(jù)合并成一個日志文件,導入Hive系統(tǒng)。
3.1 數(shù)據(jù)導入
由于Hive只支持單字符的分隔符如”\001”,所以在數(shù)據(jù)導入期必須把網(wǎng)絡日記數(shù)據(jù)的分隔符替換成”\001”。通過自定義函數(shù)進行格式化:
public boolean next(LongWritable key, BytesWritable value)
throws IOException {
while ( reader .next(key, text ) ) {
String strReplace = text .toString().toLowerCase().replace( "@$_$@" , "\001" );
Text txtReplace = new Text();
txtReplace.set(strReplace );
value.set(txtReplace.getBytes(), 0, txtReplace.getLength());
return true ; }
return false ;}
轉(zhuǎn)換好格式之后,使用hive都提供了“ local ”關(guān)鍵字,將數(shù)據(jù)導入到hive。
3.2 數(shù)據(jù)處理:編寫hql語句進行數(shù)據(jù)統(tǒng)計
(1)創(chuàng)建表格keyword_2014,將統(tǒng)計每個關(guān)鍵詞的搜索量結(jié)構(gòu)傳入該表格
create table keyword_2014 as select keyword,count(keyword) as count from searchlog_20140403 group by keyword order by count desc;
(2)創(chuàng)建表格device_2014,將統(tǒng)計每類用戶終端的搜索量存入該表格
create table device_2014 as select device,count(device) as count from searchlog_20140403 group by device order by count desc;
(3)創(chuàng)建表 time_2014,將統(tǒng)計每秒訪問量 TPS存入該表
insert overwrite table time_20140403 select time,count(time) as count from searchlog_20140403 group by time order by count desc;
(4)計算每個搜索請求響應時間的最大值,最小值和平均值
insert overwrite table response_20140403 select max(responsetime) as max,min(responsetime) as min,avg(responsetime) as avg from searchlog_20140403;
(5)創(chuàng)建一個表用于存放今天與昨天的關(guān)鍵詞搜索量和增量及其增量比率create external table if not exists keyword_20140404_20140403(keyword string, count int, increment int, incrementrate double)
(6)統(tǒng)計兩天關(guān)鍵詞統(tǒng)計結(jié)果兩個表keyword_20140404,keyword_20140403,其數(shù)據(jù)文件內(nèi)容將為 XML 格式。
insert overwrite table keyword_20140404_20140403 select cur.keyword, cur.count, cur.count-yes.count as increment, (cur.count-yes.count)/yes.count as incrementrate from keyword_20140404 cur join keyword_20140403 yes on (cur.keyword = yes.keyword) order by incrementrate desc;
3.3 統(tǒng)計結(jié)果以XML格式輸出,借助XmlResultOutputFormat 格式化成 XML 文件
public void write(Writable w) throws IOException {
String[] strFields = ((Text)w).toString().split("\001");
StringBuffer sbXml = new StringBuffer();
if ( strResultType .equals( "keyword" )) {
sbXml.append( "
"
"
"