王帥,萬小霞
(鹽城師范學院信息工程學院,鹽城224002)
淘寶、京東以及世界各地的大型商場和連鎖門店,每日都有大量的交易清單產生,一個購物狂歡節就有過億交易金額要處理。快遞、物流每天也有各種數據產生如國內外物流清單、發貨退貨記錄等,醫院、診所也有藥物清單、病人資料、就診記錄等,就連日常聊天一段時間下來也是篇幅巨大。騰訊的數據中心內有大量的會話信息,基于這些數據進行新型應用開發。總之,這些數據不可避免地成為了一個新平臺,大數據時代要求我們在以數據為中心的平臺上進行分析并去開發新型數據管理系統和相應的應用系統[1]。
大數據分析平臺由商城系統和數據可視化系統組成。具體來說,商城系統有離線日志發送、實時數據轉發兩大功能;數據可視化系統具有用戶總人數及活躍度統計、熱銷商品分析、廣告實時點擊量以及地域分布統計等功能。
(1)離線日志發送
將商城的離線數據發送給Flume 日志系統并在本地備份
(2)實時數據發送
將商城的實時數據發送給Kafka 消息管理中心。
(1)用戶統計
表格展示商城用戶總人數、新增用戶人數、昨日活躍度、昨日活躍率。
(2)標簽點擊量TOP5
環狀圖展示點擊數量最多的前5 個分類。
(3)商品點擊量TOP5
半環狀圖展示點擊數量最多的前5 個商品。
(4)熱銷商品TOP5
環狀圖展示購買數量最多的前5 個商品。
(5)收藏商品TOP5
柱狀圖展示加入購物車數量最多的前5 個商品。
(6)廣告實時點擊量
折線圖展示當天各時段的廣告點擊量
(7)銷售區域分布
中國地圖展示各區域銷售情況
(1)離線日志分析
Flume 日志系統接收離線日志,使用Hive 數據倉庫存儲數據,Spark SQL 處理離線數據
(2)實時數據轉發
商城系統重點是整合獲取離線和實時數據兩部分功能,具體實施應與對應上線系統對接,本次使用的商城系統為簡易設計的模擬系統,目的是保證大數據分析平臺的數據來源真實可靠。
本系統主要配置兩大模塊,離線日志發送,實時數據發送。
(1)離線日志發送模塊
首先商城中的離線數據發送至Linux 服務器中的Flume 日志系統,及那根離線數據日志存在服務器上,而后將日志上傳至HDFS 分布式文件管理系統并按格式導入Hive 數據倉庫,再運行編寫好的Spark SQL 和Spark ALS 的JAR 包,將Hive 數據倉庫中的數據提取分析并將結果寫入MySQL 數據庫中。
離線日志發送模塊的流程如圖1 所示。

圖1 離線日志發送模塊流程圖
(2)實時數據發送模塊:
實時數據則由商城系統直接發送給Kafka 消息中心,將Kafka 消息中心作為中轉站,把實時數據轉發給已經啟動好的Spark Streaming 服務,Spark Streaming 就會按照時間滑窗將數據按小時分組存入MySQL 數據庫中。
本系統將設計1 個MySQL 數據庫。數據庫名為shop,數據庫中包含的數據庫表有:
addCar 表:存儲加入購物車匯總信息;
buyGoods 表:存儲購買商品匯總信息;
clickAd 表:記存儲廣告實時點擊匯總信息;
clickGood 表:存儲瀏覽商品匯總信息;
clickTab 表:存儲瀏覽分類匯總信息;
hotGoods 表:存儲銷售區域分布匯總信息;
userStatistics 表:存儲各用戶統計信息;
recommend 表:存儲所有用戶的推薦商品信息。
其中最主要的是推薦表,是推薦算法的直觀展示,表1 給出商品推薦表的詳細設計。

表1 商品推薦表
離線數據處理分為3 步:商城發送日志,過濾日志,導入數據倉并分析。
(1)商城發送日志
商城整合日志組件,配置Logback 配置文件。


以上代碼為Logback 詳細配置,一共兩塊日志采集的功能。fileAppender 的功能為本地備份,日志信息記錄為log 格式的文件,每5MB 生成以一個記錄文件,以時間格式命名。Flume 的功能為發送日志的功能,與Flume 建立連接后,追條發送日志給Flume。每當使用INFO 級別的日志功能就會觸發這兩個功能,將日志本地備份并且發送給Flume 日志系統,如圖2 所示。

圖2 后端日志圖
(2)過濾日志
配置Flume 啟動配置文件,編寫Shell 腳本。


以上代碼為Flume 詳細配置,通過此配置啟動Flume 日志系統,每當接收到日志數據時,按照攔截格式保留需求數據,存于本地shop 目錄下的logs 文件夾內。

以上代碼為Shell 腳本中的部分功能,目的是將logs 文件夾中的昨日數據,剪切到臨時文件夾logsmv,通過HDFS 命令將歷史文件夾中的日志上傳到HDFS文件管理系統,最后清空臨時文件夾。使用臨時文件夾logsmv 的目的是因為在命令執行期間可能會有新的日志進來,清空數據的時候會產生誤刪的情況。
(3)導入數據倉并分析
啟動Hive 和Spark 服務,執行Spark SQL 的JAR 包。
以上代碼為Spark SQL 詳細功能,使用Scala 語言開發。先將HDFS 文件系統中的日志導入Hive 數據倉庫中內,再將日志數據分類分析,最后將結果存入MySQL 數據庫,便于查詢。
實時數據處理分為3 步:商城發送消息、消息中轉、實時分析數據。
(1)商城發送消息
為商城整合消息組件,與Kafka 建立會話。

以上代碼為商城將廣告點擊的消息發送給Kafka的實現代碼,通過配置的參數將消息發送到指定IP 和端口的Kafka。
(2)消息中轉
將Kafka 作為消息中轉站。

以上代碼為啟動Kafka 服務并開啟shop 會話。
(3)實時分析數據
數據可視化模塊獲取消息,分析實時數據。

以上代碼為Spark Streaming 獲取Kafka 的消息,而后將計算每個小時的各個廣告點擊量并存入MySQL。
本功能模塊為前后端分離項目,前臺使用VUE 框架,后臺使用Spring Boot 搭建的SSM 框架,界面效果如圖3 所示。

圖3 數據可視化界面
本功能模塊為離線分析拓展模塊,通過算法實現數據分析進階功能,即針對每一位用戶,為其推薦滿足其喜好的商品,讓平臺具有智能化。
(1)ALS 推薦算法
本模塊使用的技術是Spark MLlib,基于Spark ML?lib 實現的ALS 推薦算法。


以上代碼為商品推薦的具體實現。ALS 是交替最小二乘(Alternating Least Squares)的簡稱。在機器學習中,ALS 特指使用交替最小二乘求解的一個協同過濾推薦算法。它通過將用戶的瀏覽、收藏和購買行為進行打分,將用戶與商品之間缺失的評分補齊,以評分為依據來推斷每個用戶的愛好并向用戶推薦適合的產品。
(2)RMSE 算法調優
ALS 推薦算法訓練過程中存在擬合問題,擬合問題有兩種,欠擬合和過擬合,都會影響結果的精準度。欠擬合就是擬合精度不夠,舉個例子,數據集是個第一象限的冪函數,而我們得到的結果卻是個一次函數直線,雖然也接近目標,但是誤差還是比較大。過擬合是指精度要求過高,過分考慮到每一個數據點,使得原本很完美的結果曲線變形。在科學研究過程中,對于異常數據的排除和忽略是至關重要的環節。在算法調優時,可以通過RMSE 均方根誤差判斷擬合參數是否合理。


以上代碼為算法調優的具體實現,代碼對評分矩陣進行分解,隱特征數量設置為10,迭代10 次,正則化參數設為了0.01。將真實評分數據集與預測評分數據集合并,可以得到用戶對每一個商品的實際評分和預測評分,然后計算評分的根均方差,以誤差值為依據,調整參數進行調優。
本次大數據分析平臺的重要核心功能就是數據的分析模塊,分析中針對不同需求場景,對應著不同的算法。在對算法的研究過程中,了解到聚類、分類、推薦、決策樹等高階算法,更加加深了對普通算法的理解,即使使用尋常算法,許多難題也都迎刃而解。繼大數據學習之后,學習算法接觸人工智能也是主流方向,用大規模數據訓練模型,可以給后續學習打下基礎。