劉亮
摘??要:隨著移動(dòng)互聯(lián)網(wǎng)時(shí)代的到來(lái),用戶數(shù)據(jù)呈現(xiàn)出了爆炸式增長(zhǎng),網(wǎng)站產(chǎn)生的訪問(wèn)日志也越來(lái)越大,達(dá)到了GB甚至TB級(jí)。大規(guī)模的日志中,隱藏了企業(yè)感興趣的數(shù)據(jù),挖掘其中的價(jià)值變得非常重要。網(wǎng)站日志分析系統(tǒng)基于Hadoop大數(shù)據(jù)處理平臺(tái)進(jìn)行設(shè)計(jì),由5個(gè)部分組成:由Flume組件收集日志編寫(xiě)MapReduce應(yīng)用程序?qū)υ紨?shù)據(jù)進(jìn)行清洗;通過(guò)Hive的HQL對(duì)數(shù)據(jù)進(jìn)行查詢分析;Sqoop組件將Hive中的數(shù)據(jù)同步到Mysql;使用Echarts對(duì)數(shù)據(jù)進(jìn)行可視化。經(jīng)實(shí)驗(yàn)結(jié)果表明,數(shù)據(jù)量大于10G時(shí),集群較于單結(jié)點(diǎn)具有更大的優(yōu)勢(shì);同時(shí),該技術(shù)棧使得Hadoop工程師與軟件工程師的工作可以有效分離,充分利用技術(shù)人員的技能特點(diǎn)。
關(guān)鍵詞:網(wǎng)站日志;集群;Hadoop;
中圖分類號(hào):TP391?????文獻(xiàn)標(biāo)識(shí)碼:A
一、概述
對(duì)于GB、TB級(jí)別的半結(jié)構(gòu)化數(shù)據(jù)的處理,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)已經(jīng)無(wú)法在特定的時(shí)間內(nèi)進(jìn)行查詢分析,隨著互聯(lián)網(wǎng)2.0時(shí)代的來(lái)臨,Web數(shù)據(jù)已經(jīng)呈指數(shù)級(jí)增長(zhǎng),單一結(jié)點(diǎn)的平臺(tái)已經(jīng)無(wú)法完成海量數(shù)據(jù)的分析任務(wù)。Hadoop是一個(gè)適用于大數(shù)據(jù)處理分析的分布式平臺(tái),其生態(tài)系統(tǒng)組件包括:Flume、Hive、Sqoop等,通過(guò)Mapreduce對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,導(dǎo)入至Hive進(jìn)行統(tǒng)計(jì)分析,通過(guò)Sqoop組件將分析結(jié)果同步到關(guān)系型數(shù)據(jù)庫(kù),對(duì)于大規(guī)模數(shù)據(jù)處理方面,該技術(shù)棧在企業(yè)中得到了廣泛應(yīng)用。
Echarts是一個(gè)強(qiáng)大開(kāi)源的圖表JS類庫(kù),對(duì)Hive的分析結(jié)果能夠進(jìn)行圖表化展示,供企業(yè)管理層進(jìn)行決策。
二、相關(guān)技術(shù)
Hadoop是一個(gè)開(kāi)源的大數(shù)據(jù)計(jì)算框架,具有HDFS、MapReduce、Yarn三大核心組件,開(kāi)發(fā)人員只需要實(shí)現(xiàn)map()以及reduce方法就能夠快速編寫(xiě)MapReduce程序,大大降低了大數(shù)據(jù)開(kāi)發(fā)的難度。同時(shí),Hadoop具有強(qiáng)大的生態(tài)系統(tǒng),F(xiàn)lume擅長(zhǎng)日志的收集、聚合以及傳輸;Hive是一個(gè)數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng),提供強(qiáng)大的HQL功能;Sqoop是一款HDFS(Hive)與關(guān)系型數(shù)據(jù)庫(kù)的傳遞工具。
ECharts屬于Apache的孵化項(xiàng)目,由百度開(kāi)發(fā),是一個(gè)使用JavaScript實(shí)現(xiàn)的開(kāi)源可視化庫(kù),可以流暢的運(yùn)行在?PC和移動(dòng)設(shè)備上,提供直觀,交互豐富,可高度個(gè)性化定制的數(shù)據(jù)可視化圖表,在數(shù)據(jù)可視化方面具有廣泛應(yīng)用。
三、系統(tǒng)設(shè)計(jì)
基于MapReduce+Hive+Sqoop+Echarts技術(shù)的網(wǎng)站日志分析系統(tǒng)的系統(tǒng)架構(gòu)如圖1所示:
圖1??系統(tǒng)架構(gòu)圖
1、日志采集模塊:Flume是一個(gè)高可用的日志采集、聚合和傳輸?shù)腍adoop組件,負(fù)責(zé)將各個(gè)前端web服務(wù)器中的日志傳送到日志接收節(jié)點(diǎn)上。Flume的數(shù)據(jù)流由事件(Event)貫穿始終。事件是Flume的基本數(shù)據(jù)單位,它攜帶日志數(shù)據(jù)(字節(jié)數(shù)組形式)并且攜帶有頭信息,這些Event由Agent外部的Source生成,當(dāng)Source捕獲事件后會(huì)進(jìn)行特定的格式化,然后Source會(huì)把事件推入(單個(gè)或多個(gè))Channel中。你可以把Channel看作是一個(gè)緩沖區(qū),它將保存事件直到Sink處理完該事件。Sink負(fù)責(zé)持久化日志或者把事件推向另一個(gè)Source。能保證Flume的可靠性及可恢復(fù)性。
2、數(shù)據(jù)清洗模塊:通過(guò)Flume采集過(guò)來(lái)的日志,通常需要經(jīng)過(guò)特定的處理,此時(shí)需要自定義一個(gè)MapReduce程序完成特定的任務(wù),將清洗過(guò)后的數(shù)據(jù),作為Hive的數(shù)據(jù)源。MapReduce首先對(duì)輸入文件分片,Map輸出的中間結(jié)果會(huì)先放在內(nèi)存緩沖區(qū)中,從緩沖區(qū)寫(xiě)到磁盤(pán)的時(shí)候,會(huì)進(jìn)行分區(qū)并排序,接下來(lái)進(jìn)入reduce階段,每個(gè)reducer對(duì)應(yīng)一個(gè)ReduceTask,在真正開(kāi)始reduce之前,先要從分區(qū)中抓取數(shù)據(jù),相同的分區(qū)的數(shù)據(jù)會(huì)進(jìn)入同一個(gè)reduce。這一步中會(huì)從所有map輸出中抓取某一分區(qū)的數(shù)據(jù),在抓取的過(guò)程中伴隨著排序、合并,最后得到完整的reduce輸出。
3、查詢分析模塊:Hive部署在Hadoop集群中的NameNode,也即master節(jié)點(diǎn)上,具體的查詢分析由HQL來(lái)完成。Hive執(zhí)行具體的?HQL語(yǔ)句的步驟如下:一、用戶通過(guò)客戶端組件(cli,webUI等)提交HQL語(yǔ)句。二、驅(qū)動(dòng)器將接收到的?HQL語(yǔ)句發(fā)送到編譯器,編譯器將?HQL語(yǔ)句進(jìn)行解析、優(yōu)化。最終的優(yōu)化策略是一個(gè)由MapReduce任務(wù)和HDFS任務(wù)組成的有向無(wú)環(huán)圖。最后執(zhí)行引擎利用?Hadoop來(lái)執(zhí)行這些任務(wù)。
4、數(shù)據(jù)可視化模塊:通過(guò)Sqoop將Hive查詢結(jié)果同步到關(guān)系型數(shù)據(jù)庫(kù),使用J2EE+Echarts技術(shù)對(duì)結(jié)果以圖表形式進(jìn)行展示。用戶在向其提供的瀏覽器客戶端上輸入或選擇需要查詢的內(nèi)容,后臺(tái)利用J2EE技術(shù)連接關(guān)系型數(shù)據(jù)庫(kù),將查詢結(jié)果以JSON格式作為Echarts的數(shù)據(jù)源,進(jìn)行以圖表、表格等多種形式進(jìn)行展示。
四、實(shí)驗(yàn)結(jié)果分析
為了測(cè)試系統(tǒng),我們?cè)谔囟ǖ钠脚_(tái)上做了實(shí)驗(yàn),分別利用幾組規(guī)模不同的數(shù)據(jù)分別在單機(jī)情況下和集群情況下進(jìn)行時(shí)間測(cè)試。
實(shí)驗(yàn)環(huán)境。實(shí)驗(yàn)環(huán)境為單機(jī)配置為:處理器類型:Intel(R)Core(TM)i5-8250U;內(nèi)存容量:8GB。Hadoop集群是由5臺(tái)與單機(jī)配置相同的服務(wù)器組成。在集群中的所有服務(wù)器上都運(yùn)行Centos7.4操作系統(tǒng),并安裝配置?Hadoop?2.8。在這?5臺(tái)服務(wù)器中,其中的一臺(tái)用來(lái)作為Master,并安裝配置Hive?2.3.6,其余4臺(tái)作為數(shù)據(jù)節(jié)點(diǎn)。
實(shí)驗(yàn)數(shù)據(jù)及內(nèi)容。在實(shí)驗(yàn)中,我們采用實(shí)際網(wǎng)站中的日志作為輸入。實(shí)驗(yàn)的內(nèi)容是統(tǒng)計(jì)某一給定的時(shí)間片內(nèi),用戶訪問(wèn)網(wǎng)站使用的代理工具前五排名。
③?實(shí)驗(yàn)結(jié)果分析。通過(guò)分析實(shí)驗(yàn)結(jié)果,我們發(fā)現(xiàn),如果數(shù)據(jù)量小于5G,那么?Hadoop集群并不能發(fā)揮其海量處理的優(yōu)勢(shì),甚至?xí)r間消耗大于單機(jī)處理。但是,當(dāng)要處理的網(wǎng)站日志達(dá)到10G的時(shí)候,Hadoop集群的優(yōu)勢(shì)就會(huì)隨著數(shù)據(jù)量的逐漸增大而顯現(xiàn)出來(lái)。如圖?2所示。
圖2??單擊與集群模式耗時(shí)比對(duì)圖
五、結(jié)論
本文使用了Flume、MapReduce、Hive、Sqoop、Echarts等技術(shù)設(shè)計(jì)了一種基于Hadoop集群的網(wǎng)站日志分析平臺(tái),相比于單機(jī)模式具有較大的優(yōu)勢(shì),數(shù)據(jù)量越大越能體現(xiàn)出集群的優(yōu)勢(shì);同時(shí),該平臺(tái)使得Hadoop工程師可以專注于數(shù)據(jù)的收集、清洗及分析,傳統(tǒng)軟件工程師可以專注于數(shù)據(jù)可視化,將兩者的工作有效分離出來(lái),克服了開(kāi)發(fā)人員的技能短板問(wèn)題,能夠面向企業(yè)商業(yè)應(yīng)用,具有積極的推廣意義。
參考文獻(xiàn)
[1]??云計(jì)算中Hadoop技術(shù)研究與應(yīng)用綜述[J].夏靖波,韋澤鯤,付凱,陳珍.計(jì)算機(jī)科學(xué).2016(11).
[2]??周勇,劉鋒.基于Hadoop的Web日志分析系統(tǒng)的設(shè)計(jì)[J]?軟件工程,2019,2(3):11—12.
[3]??基于Hadoop平臺(tái)的日志分析模型[J].于兆良,張文濤,葛慧,艾偉,孫運(yùn)乾.計(jì)算機(jī)工程與設(shè)計(jì).2016(02)
[4]??陳苗,陳華平.基于Hadoop的Web日志挖掘[J].計(jì)算機(jī)工程,2011,37(11):37-39.
[5]??TomWhite.Hadoop權(quán)威指南[M].曾大聃,周傲英,譯.北京:清華大學(xué)出版社,2010.