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

圖1 最受歡迎的topn 的視頻訪問次數
將統計結果寫入Mysql 中,這個過程是從底層往上層封裝的。編寫Mysql 的連接工具類,步驟如下:
Step1:創建數據庫表;
Step2:在pom.xml 文件中添加JDBC 依賴包;
Step3:和表結構對應的課程訪問次數實體類;
Step4:調用DAO 實現統計結果寫入Mysql;
Step5:執行程序后,查看驗證數據庫結果。如圖2 所示。

圖2 將結果寫入Mysql
由實驗結果可知,該系統能夠較好的實現Web 日志的分析,可以為網站決策者提供必要的參考依據。