胡琴琴
摘要:信息科技時代,電子商務(wù)給人類生活帶來極大便利的同時也產(chǎn)生了大量的商業(yè)數(shù)據(jù),如何存儲和管理這些數(shù)據(jù),挖掘其潛在價值已成為各大電商研究的重要方向;隨著數(shù)據(jù)量的爆炸性增長,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫系統(tǒng)已無法滿足大規(guī)模數(shù)據(jù)的分析和可視化任務(wù),該文在研究了HDFS的分布式文件存儲以及MapReduce的并行化計算的基礎(chǔ)上,提出了基于Hadoop平臺構(gòu)建商業(yè)數(shù)據(jù)可視化分析模型的系統(tǒng)方案。通過搭建Hadoop平臺,建立Hive數(shù)據(jù)庫,構(gòu)造分析模型,可視化分析結(jié)果展示,研究了Hadoop云平臺的搭建過程,實現(xiàn)了Hadoop環(huán)境下基于Hive數(shù)據(jù)庫的離線數(shù)據(jù)分析和數(shù)據(jù)可視化。
關(guān)鍵詞:數(shù)據(jù)可視化;電子商務(wù);Hadoop;Hive;分析模型
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2016)06-0003-04
1 概述
當今信息時代,形式各異的信息載體如移動智能設(shè)備、電子商務(wù)網(wǎng)站等,幾乎每時每刻都在產(chǎn)生并傳遞大量商業(yè)數(shù)據(jù),數(shù)據(jù)的背后隱藏著信息,而信息之中蘊含著知識和智慧,及時地發(fā)現(xiàn)這些知識并將其應(yīng)用于現(xiàn)實的生產(chǎn)環(huán)境中可以為人們正確分析形勢和作出決策提供依據(jù)。數(shù)據(jù)可視化是從大型數(shù)據(jù)集中以某種概要形式抽提信息,并將其以圖形圖像的形式表達呈現(xiàn),是數(shù)據(jù)的一種視覺表現(xiàn)形式。在商業(yè)智能中,決策者通常需要根據(jù)歷史數(shù)據(jù)總結(jié)出經(jīng)驗教訓,以便在未來競爭中處于有利地位。但是人工地從紛繁復雜的數(shù)據(jù)中抽取關(guān)鍵信息是一件費力費時的工作,相對于從一堆數(shù)據(jù)中去抽取和抽象出具體信息而言,人類更善于處理圖形化的信息,通常能夠一眼洞悉圖片中所傳達的信息,因此數(shù)據(jù)可視化技術(shù)是商業(yè)數(shù)據(jù)分析的不可或缺的一部分。
目前,國內(nèi)已有傳統(tǒng)電子商務(wù)系統(tǒng)的建設(shè)大多采用價格昂貴的大型服務(wù)器,數(shù)據(jù)庫采用關(guān)系型數(shù)據(jù)庫系統(tǒng),隨著云計算的發(fā)展和互聯(lián)網(wǎng)+時代的到來,數(shù)據(jù)呈爆炸式增長,傳統(tǒng)的單臺主機在計算與存儲方面也越來越不能滿足數(shù)據(jù)分析處理的需求[4]。由此產(chǎn)生了Hadoop平臺技術(shù),該平臺技術(shù)包括兩大核心設(shè)計:分布式文件系統(tǒng)HDFS(Hadoop Distributed File System)和并行計算框架MapReduce。HDFS設(shè)計部署在廉價的硬件上,成本低且具有高容錯性,為海量數(shù)據(jù)提供存儲,MapReduce為海量數(shù)據(jù)提供并行計算。作為一個開源大數(shù)據(jù)處理平臺,在業(yè)界已得到廣泛的研究與應(yīng)用,各大知名企業(yè)也大都在各自核心領(lǐng)域運用了此技術(shù)。國外著名社交網(wǎng)站Facebook運用Hadoop技術(shù)構(gòu)建了整個網(wǎng)站的數(shù)據(jù)倉庫,國內(nèi)騰訊、百度和阿里巴巴等互聯(lián)網(wǎng)知名企業(yè)也都采用了Hadoop技術(shù)用于海量數(shù)據(jù)處理分析。可見,研究并使用Hadoop技術(shù)解決商業(yè)數(shù)據(jù)的可視化,具有十分重要的意義,本文提出了一種基于Hadoop平臺實現(xiàn)商業(yè)數(shù)據(jù)可視化的解決方案并論證其可行性。
2 相關(guān)研究
2.1 Hadoop相關(guān)技術(shù)
Hadoop有狹義和廣義之分,狹義的Hadoop通常是指HadoopCore,其包括最底層的分布式文件系統(tǒng)HDFS和并行運算框架MapReduce引擎。廣義的Hadoop 通常泛指Hadoop生態(tài)系統(tǒng)(HadoopEcosystem),其范疇更廣,除了Hadoop本身(HDFS+MapReduce),還包含HBase、Hive、Pig、Sqoop、Mahout和Zookeeper等其他開源工具。
1)HDFS框架
HDFS[1]存儲Hadoop集群中所有存儲節(jié)點上的文件,主要包含兩個功能組件NameNode和DataNode。NameNode管理文件系統(tǒng)的命名空間,存儲文件的元數(shù)據(jù)信息,并維護文件系統(tǒng)樹。DataNode存儲文件的數(shù)據(jù)塊信息,定期向NameNode發(fā)送其所存儲的塊列表信息。
2)MapReduce框架
MapReduce[1]是Hadoop下的分布式數(shù)據(jù)處理模型,主要由JobTracker和TaskTracker組成。Hadoop將作業(yè)分成若干個map任務(wù)和reduce任務(wù)來執(zhí)行,JobTracker是任務(wù)調(diào)度器,通過調(diào)度TaskTracker上運行的map或reduce任務(wù),來協(xié)調(diào)系統(tǒng)作業(yè)。TaskTracker是任務(wù)跟蹤器,向JobTracker報告其任務(wù)執(zhí)行情況。
3)Hive數(shù)據(jù)倉庫
Hive是基于Hadoop的一個分布式數(shù)據(jù)倉庫工具,其數(shù)據(jù)存儲在HDFS上,可以將結(jié)構(gòu)化數(shù)據(jù)文件映射成一張數(shù)據(jù)庫表,并提供基于SQL的查詢語言(由運行時自動翻譯成MapReduce作業(yè))用以查詢數(shù)據(jù)。
4)HBase數(shù)據(jù)庫
HBase是一個分布式的、面向列的非關(guān)系型數(shù)據(jù)庫,通過Hadoop文件系統(tǒng)API來持久化存儲數(shù)據(jù),所有數(shù)據(jù)都存儲在HDFS上,支持MapReduce的批量式計算和海量數(shù)據(jù)的實時隨機查詢。
2.2 數(shù)據(jù)可視化技術(shù)
當前主流的數(shù)據(jù)可視化形式有云圖、平行坐標圖、矩陣圖、直角坐標圖、散點圖等[5]。每種可視化方式都不是完美的,選擇恰當?shù)目梢暬椒ǎ姓宫F(xiàn)數(shù)據(jù)的某個角度,幫助我們分析洞察數(shù)據(jù),轉(zhuǎn)換為決策才是最重要的。
可視化圖形由主區(qū)、圖元、圖例、圖文說明等基本要素組成[8],其中主區(qū)是用于繪制可視化圖形的區(qū)域畫板,通常是一個長度和寬度確定的矩形,用于確定在屏幕的具體區(qū)域繪制可視化圖形。不同類型的可視化形式在可視化基本要素的組織方式和內(nèi)容上有所不同,例如條形圖和地圖,條形圖以直角坐標系為基準,通常以縱軸條形的長度表示各類別的度量值,以橫軸條形的寬度(通常是等長)表示類別,而地圖以地理地圖為基準,通過色彩比重來顯示各個行政分區(qū)的度量值。這表明我們在進行可視化的時候需要對數(shù)據(jù)進行不同的組織變換,而通常同主題的可視化的展現(xiàn)形式基本相同,例如用條形圖展示不同類別的商品的銷售額、銷售量等,這就意味著可以將條形圖的一些基本要素抽象出來,以數(shù)值的形式組合起來構(gòu)成一個可視化分析模型,每次重用此模型即可而不用每次可視化都進行一次數(shù)據(jù)重組。本文研究的是如何將同一類型的可視化組織起來形成一個主題模型,針對于這個主題的可視化,都可以通過此模型方便地構(gòu)建可視化形式。
3 基于Hadoop的商業(yè)數(shù)據(jù)可視化分析模型
本研究以Hadoop云計算平臺為基礎(chǔ),提出了基于Hadoop平臺構(gòu)建商業(yè)數(shù)據(jù)可視化分析模型的方案,技術(shù)方案如圖1所示。原始業(yè)務(wù)數(shù)據(jù)存儲在關(guān)系型數(shù)據(jù)庫中,首先需要將數(shù)據(jù)從關(guān)系型數(shù)據(jù)庫集成到Hadoop的HDFS存儲上,然后建立Hive數(shù)據(jù)庫,將數(shù)據(jù)加載進Hive中,通過HiveQL語句對數(shù)據(jù)進行查詢分析,將查詢的結(jié)果存入HBase數(shù)據(jù)庫中,將相應(yīng)的查詢結(jié)果與已有的可視化參考模型結(jié)合,構(gòu)造可視化分析模型,將模型以固定形式存儲在HBase中,然后通過highChart、echarts等可視化插件對分析模型進行圖形可視化。
3.1 數(shù)據(jù)集成
首先從原始企業(yè)數(shù)據(jù)庫中抽取出需要的業(yè)務(wù)數(shù)據(jù)存入到Hadoop的HDFS文件系統(tǒng)中,具體分為兩個階段,第一階段初始數(shù)據(jù)全量導入,第二階段數(shù)據(jù)增量導入。實驗中采用Sqoop技術(shù)實現(xiàn)數(shù)據(jù)導入,Sqoop是Hadoop生態(tài)系統(tǒng)的一員,主要用于Hadoop與關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)傳遞,可以通過Hadoop的MapReduce將關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)導入到Hadoop的HDFS中,也可以將HDFS中的數(shù)據(jù)導入到關(guān)系型數(shù)據(jù)庫中[2]。具體的使用如圖2所示
圖2中已標注的是服務(wù)器的路由信息,未標注的參數(shù)--table是指定數(shù)據(jù)表名稱,--columns指定導入指定表的哪些字段,--target-dir是指定數(shù)據(jù)的HDFS文件存儲路徑。
在進行第一階段的全量導入時,一次性導入所需的所有數(shù)據(jù),由于商業(yè)數(shù)據(jù)每日數(shù)據(jù)都有更新,所以需要第二階段的增量導入??紤]到HDFS不支持隨機修改和刪除數(shù)據(jù),只能在文件末尾追加,需要分情況處理待更新數(shù)據(jù),本文中將數(shù)據(jù)劃為兩類,一類是一些用于表示實體屬性或狀態(tài)的數(shù)據(jù),如商品類別表、公司表等,此類數(shù)據(jù)具有數(shù)據(jù)量小,更新頻率低的特點,但有修改刪除等操作。一類是基礎(chǔ)業(yè)務(wù)數(shù)據(jù),如訂單表和訂單詳情表等,此類數(shù)據(jù)新增頻繁,但無修改刪除操作。第一類數(shù)據(jù)的更新策略,先刪除HDFS上的此類數(shù)據(jù),然后通過圖2中的Sqoop import命令導入此類數(shù)據(jù)經(jīng)過修改后的數(shù)據(jù)。第二類數(shù)據(jù)的更新策略是直接使用Sqoop import --append命令導入新增部分的數(shù)據(jù),如圖3所示,圖中標注的--append表追加,不可省略,標注的where是SQL查詢語句中的條件查詢。數(shù)據(jù)需每日更新,實驗中采用linux系統(tǒng)自帶的定時任務(wù)crontab每日定時執(zhí)行數(shù)據(jù)導入程序。
3.2 數(shù)據(jù)轉(zhuǎn)換存儲
數(shù)據(jù)通過Sqoop完成數(shù)據(jù)導入以后,為了保證數(shù)據(jù)的質(zhì)量和可用性,需要對數(shù)據(jù)進行格式轉(zhuǎn)換存儲。在實際操作中,通常會進行兩種轉(zhuǎn)換,字段組合和字段拆分。
字段組合:各個企業(yè)數(shù)據(jù)之間是相互獨立的,集中到同一平臺時可能會有關(guān)鍵數(shù)據(jù)沖突問題,解決策略通過建立臨時的Hive表,將數(shù)據(jù)加載到臨時表中,再通過HiveQL(Hive Query Language)語句重組關(guān)鍵字段,保證其唯一性和正確性。
字段拆分:業(yè)務(wù)數(shù)據(jù)中的時間屬性是一個完整的時間信息,為了提高查詢效率,通常將數(shù)據(jù)的時間字段拆分成單獨的年月日,使數(shù)據(jù)在Hive中按照時間分區(qū)存儲。解決策略是通過建立臨時的Hive表和最終的分區(qū)表,將數(shù)據(jù)加載到臨時表中,再通過HiveQL語句拆分數(shù)據(jù)的時間字段并插入到分區(qū)表中。其中建立分區(qū)表使用的命令見圖4,數(shù)據(jù)分區(qū)存儲使用的命令如圖5所示:
3.3 數(shù)據(jù)分析與模型建立
數(shù)據(jù)進入Hive數(shù)據(jù)庫以后,結(jié)合實際業(yè)務(wù)需求,設(shè)計可視化分析主題,通過HiveQL語句對數(shù)據(jù)進行分析,從Hive數(shù)據(jù)庫中查詢相關(guān)的數(shù)據(jù),記錄查詢結(jié)果,然后構(gòu)建可視化分析模型,將模型結(jié)果存入Hbase數(shù)據(jù)庫中??梢暬黝}分析就是在分析商業(yè)數(shù)據(jù)類型、存儲結(jié)構(gòu)的基礎(chǔ)上對具有可視化意義的主題概念進行提煉和取舍的過程。
數(shù)據(jù)可視化在響應(yīng)的速度方面具有很高的要求,本文研究采用Hbase存儲HiveQL查詢結(jié)果和可視化分析模型。Hbase是一個列式數(shù)據(jù)庫,僅支持行鍵檢索數(shù)據(jù),所以對行鍵的設(shè)計至關(guān)重要。
本文對行鍵的設(shè)計采用兩類設(shè)計標準,如圖6所示,第一類采用“分析主題+生成時間”的形式,分析主題是每類HiveQL查詢設(shè)計的類別名,用于區(qū)分統(tǒng)計分析結(jié)果;生成時間采用“yyyyMMdd”的形式,用于標識統(tǒng)計分析結(jié)果的生成時間。其對應(yīng)一個列族,但有多個列,且列數(shù)不固定,列中主要是用于存放成員屬性集和分析模型。成員屬性是每類查詢結(jié)果中能夠唯一標識一條查詢記錄的屬性值。分析模型是該類查詢結(jié)果集針對于某種可視化形式的數(shù)據(jù)存儲模型。分析模型的建立是以現(xiàn)有可視化圖形為依據(jù),抽象出其圖形化屬性,將其數(shù)值化,然后以json字符串的形式存入HBase中。例如圖7中針對于地域維度的銷售分析,將areaSale設(shè)置為分析主題類別名,第一行采用的是第一類行鍵設(shè)計,content是列族名稱,allproperty列存儲的是成員屬性值集合,salepie列存儲的是針對于銷售額分析的餅圖模型。
第二類行鍵設(shè)計采用“分析主題+成員屬性+生成時間”的形式,其與第一類擁有相同的列族,但不同列,每列存儲查詢結(jié)果的屬性值。例如圖中salequatity列表示銷售量,sale表示銷售額,buyerquatity表示買家數(shù)量,sellerquatity表示買家數(shù)量。
4 實驗方案
4.1 Hadoop集群配置
本研究利用實驗室提供的計算機網(wǎng)絡(luò)中心搭建Hadoop云計算平臺,具體的參數(shù)如下:
Hadoop集群:1個Master節(jié)點,3個slave節(jié)點
硬件配置:4G內(nèi)存,100G硬盤
系統(tǒng)版本:Centos 6.4
軟件版本:Hadoop-1.2.1,HBase-0.98.12,Hive-1.1.0,Zookeeper-3.4.6,Sqoop-1.4.6
4.2 實驗驗證
1)數(shù)據(jù)來源
本文以電子商務(wù)領(lǐng)域中的具體應(yīng)用(面向小微企業(yè)的進銷存管理平臺)為實例來驗證本文提出的可視化分析模型。平臺系統(tǒng)的系統(tǒng)架構(gòu)如圖8所示,此系統(tǒng)采用分布式數(shù)據(jù)庫,由一臺路由服務(wù)器和若干臺數(shù)據(jù)庫服務(wù)器組成,企業(yè)需要通過路由服務(wù)器查找到其數(shù)據(jù)所在的數(shù)據(jù)庫服務(wù)器才能進行訪問。數(shù)據(jù)庫采用oracle,每臺數(shù)據(jù)庫服務(wù)器對應(yīng)一個數(shù)據(jù)庫實例,每個數(shù)據(jù)庫示例對應(yīng)多個表空間。目前平臺中企業(yè)可分為獨立企業(yè)和連鎖企業(yè)兩種,獨立企業(yè)擁有獨立的表空間,連鎖企業(yè)共同擁有獨立表空間。整個平臺最多擁有
2)實驗分析
本文在存儲數(shù)據(jù)分析的結(jié)果和數(shù)據(jù)可視化模型時采用的是HBase數(shù)據(jù)庫,由于數(shù)據(jù)可視化在響應(yīng)速度方面具有較高要求,所以對HBase在查詢性能方面做了實驗對比,實驗結(jié)果如圖9所示,圖中統(tǒng)計了在不同數(shù)據(jù)量下,五次查詢用時以及平均用時。
結(jié)論:首次查詢需要建立客戶端與集群的連接,需要較長時間,具體時間的長短受網(wǎng)絡(luò)擁塞狀況、集群運行狀態(tài)等多方面因素影響。連接建立后查詢時間基本穩(wěn)定在毫秒級,實驗測試的結(jié)果顯示Hbase能滿足這方面的要求。
3)實驗結(jié)果
以銷售分析為例,可以從商品類別、時間、地點三個維度出發(fā),分析商品的銷售量、銷售額、買家數(shù)量和賣家數(shù)量,為經(jīng)營者進行銷售歷史統(tǒng)計和未來業(yè)務(wù)調(diào)整提供決策支持。例如,從地域維度進行分析,統(tǒng)計商品的銷售量、銷售額、買家數(shù)量和賣家數(shù)量,設(shè)計的HiveQL語句為:
select p.province_name as provinceName,sum(soi.count) as saleQuantity,sum(so.account_payable) as sale,count(distinct so.customer_code) as buyerQuantity,count(distinct so.company_code) as sellerQuantity
from sale_order so
join sale_order_item soi on so.order_code=soi.order_code join customer c on so.customer_code = c.customer_code join province p on c.province_id=p.province_id group by p.province_name;
以中國地圖的形式構(gòu)建其分析模型mapmodel,Java代碼如下:
//從HBase中讀取數(shù)據(jù)分析結(jié)果集
StringTokenizer tokenizer = new StringTokenizer(allproperty, "*");
while (tokenizer.hasMoreElements()) {
//數(shù)據(jù)轉(zhuǎn)換與重組
String name = (String) tokenizer.nextElement();
String svalue = HbaseTest.get(tablename, model + name + today, columnFamily, target);
double dvalue = Math.round(Double.parseDouble(String.format(svalue, "0.f")));
if (dvalue > maxValue) {
maxValue = dvalue;}
content += ",{\"name\":\"" + name + "\",\"value\":" + dvalue + "}";}
//構(gòu)建分析模型
mapmodel = "{\"title\":{\"subtext\":\"數(shù)據(jù)更新于" + today + "\"},\"dataRange\":{\"max\":" + Math.round(maxValue)+ "},\"series\":{\"data\":[" + content.substring(1) + "]}}";
//結(jié)果寫入HBase數(shù)據(jù)庫
HbaseTest.put(tablename, model + today, columnFamily, "map" + target, mapmodel);
圖形可視化采用的是百度的echarts插件,首先從HBase中讀取已建立的分析模型數(shù)據(jù),前臺通過js進行數(shù)據(jù)解析,然后由echarts實現(xiàn)畫圖和渲染,最后的可視化圖形如圖10所示。
5 結(jié)束語
本文提出了基于Hadoop平臺構(gòu)建商業(yè)數(shù)據(jù)可視化分析模型的設(shè)計方案,通過對商業(yè)數(shù)據(jù)特性的分析和數(shù)據(jù)可視化技術(shù)的研究,將數(shù)據(jù)從關(guān)系型數(shù)據(jù)庫集成到Hadoop平臺,使用統(tǒng)計分析等方法對數(shù)據(jù)進行處理和分析,重點介紹了數(shù)據(jù)分析、分析模型的建立及其存儲,并在特定的應(yīng)用背景下實現(xiàn)和驗證了所提出的商業(yè)數(shù)據(jù)可視化分析模型建立的可行性。
參考文獻:
[1] 劉文峰, 顧君忠, 林欣, 等. 基于Hadoop和Mahout的大數(shù)據(jù)管理分析系統(tǒng)[J]. 計算機應(yīng)用與軟件, 2015, 32(1).
[2] 戴中華, 盛鴻彬, 王麗莉. 基于Hadoop平臺的大數(shù)據(jù)分析與處理與處理[J]. 通訊世界, 2015(6).
[3] 孟志青, 段智華. 商業(yè)銷售分析數(shù)據(jù)倉庫的數(shù)據(jù)可視化的一種設(shè)計[J]. 計算機工程與應(yīng)用, 2000, 36(10).
[4] 諶頏. 基于Hadoop的標簽推薦系統(tǒng)設(shè)計[J]. 應(yīng)用技術(shù)與研究, 2015(7).
[5] 劉勘, 周曉崢, 周洞汝. 數(shù)據(jù)可視化的研究與發(fā)展[J]. 計算機工程, 2002,28(8).
[6] 李偉, 張爽, 康建東,等. 基于hadoop的電網(wǎng)大數(shù)據(jù)處理探究[J]. 電子測試, 2014(1).
[7] 黃輝, 陸利忠, 閆鑌, 等. 三維可視化技術(shù)研究[J]. 信息工程大學學報, 2010, 11(2).
[8] 梁辰, 徐健. 社會網(wǎng)絡(luò)可視化的技術(shù)方法與工具研究[J]. 現(xiàn)代圖書情報技術(shù), 2012(5).