蘆成剛 王桂榮
(延邊大學(xué)工學(xué)院,吉林 延吉133002)
當(dāng)今社會中大量數(shù)據(jù)的出現(xiàn)使數(shù)據(jù)分析領(lǐng)域的地位變得越來越重要。在當(dāng)今的大數(shù)據(jù)領(lǐng)域,Spark 作為大數(shù)據(jù)通用計算平臺,不但活躍,而且熱門與高效[1]。為了給用戶提供更好的體驗,有必要分析網(wǎng)絡(luò)日志。網(wǎng)絡(luò)日志非常龐大,傳統(tǒng)的日志分析方式已經(jīng)很難滿足人們的需要,有必要利用新的技術(shù)架構(gòu)進行分析。本文介紹一種以Hadoop 分布式文件系統(tǒng)(HDFS)為存儲結(jié)構(gòu),基于Spark 相關(guān)技術(shù),利用Flume 的高擴展性和高可靠性,將日志進行分布式存儲并離線分析處理的日志分析處理系統(tǒng)[2]。
在本地電腦上安裝一臺虛擬機,在該虛擬機上克隆出三臺主機,安裝cent os 系統(tǒng)。每臺主機安裝Hadoop 存儲系統(tǒng),其中,一臺為主機(Master),兩臺為從機(Slave),構(gòu)成模擬分布式存儲系統(tǒng)。Spark 可以獨立安裝使用,也可以和Hadoop 一起安裝使用。
1.2.1 Scala 環(huán)境安裝
1.2.1.1 Master 機器
Step1: 下載Scala 安裝包,解壓到/opt 目錄下;
Step2: 修改Scala 安裝包目錄所屬用戶和用戶組;
Step3: 找到環(huán)境變量文件.bashrc , 點擊打開后進行編輯,添加一些其它選項,設(shè)置它的Scala_home 為解壓目錄下的安裝包,設(shè)置它的path 環(huán)境變量為安裝包下的bin 文件;
Step4: 驗證Scala 安裝。
1.2.1.2 Slave 機器
Slave 機的安裝步驟和Master 機器安裝步驟是一樣的,根據(jù)前面Master 機器的安裝步驟來安裝就可以。
1.2.2 Spark 安裝
1.2.2.1 Master 機器安裝步驟如下:
Step1:在/opt 目錄中,下載Spark 安裝包并將其解壓;
Step2:找到Spark 安裝包的目錄,重新設(shè)置用戶與用戶組;
Step3: 找到環(huán)境變量文件.bashrc , 打開進行編輯,添加Spark 的環(huán)境信息,設(shè)置SPARK_HOME 屬性,使其指向/opt 目錄下的spark 安裝軟件,修改它的Path 環(huán)境變量,使其指向SPARK 的bin 文件和sbin 文件;
Step4: 對Spark 進行配置。找到Spark 安裝位置并進入到conf 目錄,找到Spark-env.sh.template 文件,將其拷貝到Spark-env.sh。用文本編輯器打開Spark-env.sh 并將其編輯,添加相關(guān)配置信息,主要是配置相關(guān)環(huán)境變量,例如:
JAVA_HOME:指定Java 安裝路徑,指向安裝文件;SCALA_HOME:指定Scala 安裝路徑,指向它的安裝版本;SPARK_MASTER_IP:指定Spark 集群 中的Master 節(jié)點的IP 地址;
SPARK_WORKER_MEMORY:指定的是Worker 節(jié)點能夠分配給Executors 的最大內(nèi)存大??;
HADOOP_CONF_DIR:指定Hadoop 集群配置文件目錄。
最后,找到Slaves.template 文件并將其拷貝到Slaves,在里面編輯內(nèi)容為:
Master
Slave01
Slave02
即Master 既是Master 節(jié)點又是Worker 節(jié)點。
1.2.2.2 Slave 機器
這里Slave 機的安裝步驟和Master 機器安裝步驟相同,根據(jù)前面Master 機器的安裝步驟來安裝就可以。
日志是計算機系統(tǒng)中非常廣泛的概念,任何程序都可以輸出日志。日志源設(shè)備的類型多樣,型號復(fù)雜,需要對日志信息進行初步的規(guī)范化處理[3]。本設(shè)計基本使用的是Web 日志,Web 日志里包括由各種Web 服務(wù)器生成的用戶訪問日志和Web 應(yīng)用程序輸出的日志。在Web 日志中,每個日志可以很直觀的表達(dá)用戶的訪問行為。接下來這個是一條完整的日志:
117.35.88.11-- [10/Nov/2016:00:01:02 +0800] "GET/article/ajaxcourserecommends?id=124
HTTP/1.1" 200 2345 "www.imooc.com" "http://www.imooc.com/code/1852" - "Mozilla/5.0 (Windows NT 6.1; WOW64)
此日志可以獲取大量信息,例如訪問者IP、訪問時間、訪問過的網(wǎng)頁和訪問者。Web 日志中有大量消息是人們感興趣的,例如,不同網(wǎng)站的不同類型頁面瀏覽量,獨立IP 的數(shù)量等??梢酝ㄟ^Web 日志計算關(guān)鍵字查詢的頻率和用戶檢索的用戶查詢的數(shù)量,并用于構(gòu)建廣告點擊魔術(shù)并分析用戶行為特征[4]。
該平臺按結(jié)構(gòu)分為三個模塊:日志收集模塊、日志分發(fā)模塊、日志分析模塊。
日志收集模塊:Flume 通過收集和處理Web 日志數(shù)據(jù),可以將其導(dǎo)入進HDFS,Flume 收集數(shù)據(jù)的具體過程為:
2.2.1 檢查Flume 配置文件,該文件在$FLUME_ HOME/conf目錄下。
2.2.2 檢查配置代理,監(jiān)視在指定文件夾中是否有新文件的更改。如果出現(xiàn)新文件,就執(zhí)行下一步,并且繼續(xù)監(jiān)視文件夾中的文件更改情況。
2.2.3 如果有新文件,查看新文件出現(xiàn)的內(nèi)容并解析。
2.2.4 往通道中寫入,如果成功,則將文件標(biāo)記為已完成或?qū)⑽募h除,如果寫入不成功,則重新讀取文件內(nèi)容并解析。
2.2.5 傳輸數(shù)據(jù)到channel 中,并將數(shù)據(jù)寫入HDFS 存儲。
日志存儲模塊:本系統(tǒng)使用HDFS 進行數(shù)據(jù)存儲,通過使用Flume,文件會以三秒的間隔自動上傳到HDFS,用于三個節(jié)點。日志數(shù)據(jù)存儲模塊的數(shù)據(jù)存儲過程如下:
Step1: 在客戶端,調(diào)用create () 函數(shù),創(chuàng)建文件DistributedFileSystem。
Step2:對元數(shù)據(jù)進行封裝,此功能用FileStaus 類完成。
Step3:調(diào)用元數(shù)據(jù)節(jié)點,此功能用FileSystem 類完成。
Step4: 元數(shù)據(jù)節(jié)點有重要的作用,首先確定原文件是否存在,如果不存在,就重新調(diào)用create(),創(chuàng)建新文件,如果存在,就面向客戶端創(chuàng)建新文件。
Step5: 客戶端用于寫數(shù)據(jù),FSDOutputStream 則負(fù)責(zé)將數(shù)據(jù)分成塊,寫入數(shù)據(jù)隊列。
Step6:FSDOutputStream 保存確認(rèn)隊列,用以確認(rèn)數(shù)據(jù)塊是否發(fā)送,等待數(shù)據(jù)節(jié)點通知,數(shù)據(jù)是否成功寫入和存儲,如果成功存儲則結(jié)束。
日志分析模塊:日志分析模塊主要組成部分為日志數(shù)據(jù)清理,日志數(shù)據(jù)特征提取,日志數(shù)據(jù)功能正規(guī)化與日志數(shù)據(jù)特征分析等[5]。日志數(shù)據(jù)清理模塊中,理想情況下,Web 日志數(shù)據(jù)集中的每條記錄都已完成。但實際上會有一些嘈雜且不完整的數(shù)據(jù)殘留。丟失數(shù)據(jù)的原因大概就是因為,不愿意發(fā)布的數(shù)據(jù)或者是手動輸入時一時疏忽,導(dǎo)致了一些數(shù)據(jù)的丟失。在Web 日志數(shù)據(jù)集中,如果一條記錄的屬性被標(biāo)記為空或“_”,那么該記錄被認(rèn)為具有缺失值,并不是一條完整的數(shù)據(jù)[6]。
收集到的數(shù)據(jù)應(yīng)先對其進行清洗操作,之后需要解析訪問的日志,使用Sparksql 解析訪問日志。通過Spark 對離線日志進行分析,統(tǒng)計最受歡迎的topn 的視頻訪問次數(shù)。統(tǒng)計結(jié)果如圖1所示。
圖1 最受歡迎的topn 的視頻訪問次數(shù)
將統(tǒng)計結(jié)果寫入Mysql 中,這個過程是從底層往上層封裝的。編寫Mysql 的連接工具類,步驟如下:
Step1:創(chuàng)建數(shù)據(jù)庫表;
Step2:在pom.xml 文件中添加JDBC 依賴包;
Step3:和表結(jié)構(gòu)對應(yīng)的課程訪問次數(shù)實體類;
Step4:調(diào)用DAO 實現(xiàn)統(tǒng)計結(jié)果寫入Mysql;
Step5:執(zhí)行程序后,查看驗證數(shù)據(jù)庫結(jié)果。如圖2 所示。
圖2 將結(jié)果寫入Mysql
由實驗結(jié)果可知,該系統(tǒng)能夠較好的實現(xiàn)Web 日志的分析,可以為網(wǎng)站決策者提供必要的參考依據(jù)。