林勇+吳翀+嚴(yán)盟+彭敏佳
摘 要: Hadoop技術(shù)的核心框架MapReduce非常適用于日志分析系統(tǒng),并具有良好的易用性和可擴展性。文章將MapReduce的日志處理技術(shù)應(yīng)用于某項目平臺的日志數(shù)據(jù)分析中,以實驗結(jié)果證明了MapReduce能較好地解決Web日志處理單機所面臨的效率低下問題,能更好地整合計算機資源。
關(guān)鍵詞: Hadoop; MapReduce; Web日志; 日志分析
中圖分類號:TP391.9 文獻標(biāo)志碼:A 文章編號:1006-8228(2017)06-26-03
Research and application of MapReduce in log analysis
Lin Yong, Wu Chong, Yan Meng, Peng Minjia
(Zhejiang Topcheer Information Technology Co.,Ltd., Hangzhou, Zhejiang 310006, China)
Abstract: Hadoop MapReduce is very applicable to log analysis system, and has good usability and scalability. In this paper, the MapReduce log processing technology is applied to the log data analysis of a project platform, and the experimental results show that MapReduce can solve the low efficiency problem of processing Web log with single machine, better integrate computer resources.
Key words: Hadoop; MapReduce; Web log; log analysis
0 引言
Web日志包含著網(wǎng)站最重要的信息,通過日志分析,我們可以知道網(wǎng)站的訪問量,哪個網(wǎng)頁訪問人數(shù)最多,哪個網(wǎng)頁最有價值,哪些網(wǎng)頁需要優(yōu)化等相關(guān)信息。一般中型的網(wǎng)站(10W的PV以上),每天會產(chǎn)生1G以上Web日志文件。大型或超大型的網(wǎng)站,可能每小時就會產(chǎn)生10G的數(shù)據(jù)量。當(dāng)數(shù)據(jù)量每天以10G、100G增長的時候,單機處理能力已經(jīng)不能滿足需求。我們就需要增加系統(tǒng)的復(fù)雜性,用計算機集群,存儲陣列來解決。在Hadoop出現(xiàn)之前,海量數(shù)據(jù)存儲,和海量日志分析都是非常困難的。只有少數(shù)公司掌握著高效的并行計算、分步式計算、分步式存儲的核心技術(shù)。Hadoop的出現(xiàn),大幅度地降低了海量數(shù)據(jù)處理的門檻,讓小公司甚至是個人都有能力搞定海量數(shù)據(jù),Hadoop非常適用于日志分析系統(tǒng)[1]。
1 Hadoop
Hadoop是一個由Apache基金會所開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu)。用戶可以在不了解分布式底層細節(jié)的情況下,開發(fā)分布式程序。充分利用集群的威力進行高速運算和存儲。
Hadoop實現(xiàn)了一個分布式文件系統(tǒng)(Hadoop Distributed File System),簡稱HDFS。HDFS有高容錯性的特點,并且設(shè)計用來部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)來訪問應(yīng)用程序的數(shù)據(jù),適合那些有著超大數(shù)據(jù)集(large data set)的應(yīng)用程序。HDFS放寬了(relax)POSIX的要求,能以流的形式訪問(streaming access)文件系統(tǒng)中的數(shù)據(jù)。
Hadoop的框架最核心的設(shè)計就是:HDFS和MapReduce。HDFS為海量的數(shù)據(jù)提供了存儲,MapReduce為海量的數(shù)據(jù)提供了計算[2]。
2 MapReduce編程模型
Google提出的MapReduce編程模型,由于良好的易用性和可擴展性,得到了工業(yè)界和學(xué)術(shù)界的廣泛支持。Hadoop,MapReduce的開源實現(xiàn),已經(jīng)在Yahoo!,F(xiàn)acebook,IBM百度,中國移動等多家單位中使用[3]。
MapReduce以函數(shù)方式提供了Map和Reduce來進行分布式計算。Map相對獨立且并行運行,對存儲系統(tǒng)中的文件按行處理,并產(chǎn)生鍵值(key/value)對。Reduce以Map的輸出作為輸入,相同key的記錄匯聚到同一reduce,reduce對這組記錄進行操作,并產(chǎn)生新的數(shù)據(jù)集。所有Reduce任務(wù)的輸出組成最終結(jié)果。形式化描述如下:
apReduce主要分為以下幾步。
⑴ 用戶提交MapReduce程序至主控節(jié)點,主控節(jié)點將輸入文件劃分成若干分片(split)。主控節(jié)點Master 和工作節(jié)點worker啟動相應(yīng)進程。
⑵ 主控節(jié)點根據(jù)工作節(jié)點實際情況,進行map任務(wù)的分配。
⑶ 被分配到map任務(wù)的節(jié)點讀取文件的一個分片,按行進行map處理,將結(jié)果存在本地。結(jié)果分成R個分片進行存儲,R對應(yīng)的是Reduce數(shù)目。
⑷ Map節(jié)點將存儲文件的信息傳遞給Master主控節(jié)點,Master指定Reduce任務(wù)運行節(jié)點,并告知數(shù)據(jù)獲取節(jié)點信息。
⑸ Reduce節(jié)點根據(jù)Master傳遞的信息去map節(jié)點遠程讀取數(shù)據(jù)。因為reduce函數(shù)按分組進行處理,key相同的記錄被一同處理,在reduce節(jié)點正式處理之前,對所有的記錄按照key排序。
⑹ Reduce將處理結(jié)果寫入到分布式文件系統(tǒng)中[4]。
3 某項目平臺日志數(shù)據(jù)分析
我們使用科技系統(tǒng)某項目平臺日志數(shù)據(jù),進行提取KPI數(shù)據(jù)分析,以PV(PageView,頁面訪問量統(tǒng)計)為例進行測試。
項目采用tomcat集群,tomcat訪問日志每天產(chǎn)生一份。每天在夜間在0點后,向HDFS導(dǎo)入前一天的日志文件。
一條tomcat訪問日志如下所示:
日志處理流程如圖2所示。完成導(dǎo)入后,啟動MapReduce程序,提取并計算統(tǒng)計指標(biāo),最后將結(jié)果按指標(biāo)值排序。整個處理過程采用兩個任務(wù)串聯(lián)執(zhí)行方式完成。
3.2 任務(wù)-PV值統(tǒng)計
3.2.1 Map階段
在Map階段是從日志文件中讀取記錄,提取日志中的數(shù)據(jù)url值,以url作為Map()方法的key,將常量值1作為value。算法如下:
⑴ Map開始;
⑵ 獲取日志文件路徑;
⑶ 讀取日志文件;
⑷ 用正則表達式模式識別url,設(shè)置url為Key;
⑸ 設(shè)置value為1;
⑹ 寫人key與value,context.write(request,1);
⑺ Map結(jié)束。
3.2.2 Reduce階段
在Reduce階段將得到的數(shù)據(jù)以key作為主鍵,將所有value值相加得出最終結(jié)果:
⑴ Reduce開始;
⑵ 收集Map階段傳人的key與value,
⑶ 累加values;
⑷ 寫入key,sum,context.wirte(key,sum);
⑸ Reduce結(jié)束。
3.3 任務(wù)二PV值排序
3.3.1 Map階段
Map階段是從任務(wù)一輸出目錄獲取數(shù)據(jù),將PV值做為key,url作為value。算法如下:
⑴ Map開始;
⑵ 獲取任務(wù)一輸出目錄路徑;
⑶ 讀取任務(wù)一結(jié)果文件;
⑷ 設(shè)置PV值為Key;
⑸ 設(shè)置url值為1;
⑹ 寫人key與value,context.write(pv,url);
⑺ Map結(jié)束。
3.3.2 Reduce階段
在Reduce階段將得到的數(shù)據(jù)以key作為主鍵,系統(tǒng)將根據(jù)key的實現(xiàn)自動進行排序,采用IntWritable為Key可進行升序排列,若要實現(xiàn)升序排列,需要自己實現(xiàn)Key實現(xiàn)。
⑴ Reduce開始;
⑵ 收集Map階段傳人的key與value,
⑶ 寫入pv,url,context.wirte(context.write(pv,url););
⑷ Reduce結(jié)束。
3.4 執(zhí)行結(jié)果
由圖3可知,前三個頁面訪問量占了總訪問量的95%,說明對該三個頁面進行優(yōu)化,可達到很好性能提升效果。
同時,我們嘗試分別采用不同數(shù)量節(jié)點對日志進行處理。
由圖4可知,隨著節(jié)點數(shù)的增加,對日志處理所需要的時間呈不斷下降的趨勢。
4 結(jié)束語
本文介紹了Hadoop技術(shù)和MapReduce編程模型,并將MapReduce編程模型應(yīng)用于某項目平臺日志數(shù)據(jù)的KPI數(shù)據(jù)分析中,以PV(PageView,頁面訪問量統(tǒng)計)為例進行了測試。實驗結(jié)果充分說明了,基于Hadoop的MapReduce的日志處理技術(shù)能較好地解決Web日志處理單機所面臨的效率低下問題,更好地整合計算機資源。下一步將考慮完善KPI指標(biāo),并嘗試使用spark引擎對KPI指標(biāo)進行實時分析,以提高對系統(tǒng)各種突發(fā)狀況的響應(yīng)速度。
參考文獻(References):
[1] 毛嚴(yán)奇,彭沛夫.基于MapReduce的Web日志挖掘預(yù)處理[J].
計算機與現(xiàn)代化,2013.9:35-41
[2] 王宏宇.基于Hadoop平臺的云計算構(gòu)建與日志分析[D].哈
爾濱理工大學(xué)碩士學(xué)位論文,2012.
[3] 竇蒙,聞立杰,王建民等.基于MapReduce的海量事件日志并
行轉(zhuǎn)化算法[J].計算機集成制造系統(tǒng),2013.19(8):1784-1793
[4] 徐正巧,趙德偉.基于MapReduce的網(wǎng)絡(luò)日志分析系統(tǒng)[J].網(wǎng)
絡(luò)與通信,2015.10:89-90