岑凱倫,于紅巖,楊騰霄
(1.上海海事大學信息工程學院,上海201306;2.上海海事大學交通運輸學院,上海 201306;3.上海紐盾科技有限公司研發部,上海 200092)
大數據下基于Spark的電商實時推薦系統的設計與實現
岑凱倫1,于紅巖2,楊騰霄3
(1.上海海事大學信息工程學院,上海201306;2.上海海事大學交通運輸學院,上海201306;3.上海紐盾科技有限公司研發部,上海200092)
隨著互聯網規模的迅速增長,導致用戶在面對海量的互聯網信息時,無法從中獲取自己真正感興趣的信息,產生“信息超載”問題。個性化推薦在此問題上彌補了搜索引擎的不足,即代替用戶評估其所有未看過的產品,并通過分析用戶的興趣愛好和歷史行為,主動推薦符合用戶喜好的項目。目前個性化推薦系統已在電子商務、電影、音樂網站等領域取得了顯著的成功。
根據IDC發布的數字宇宙報告顯示,至2020年數字宇宙將超出預期,達到40ZB,相當于地球上人均產生5247GB的數據[1]。面對未來如此巨大規模的數據量,傳統單機環境下的推薦系統存在著兩大問題:一是單機節點的推薦模型訓練由于單機硬件條件的限制,無法存儲所有需要運算的數據量;二是由于訓練數據集規模的增大,單機節點進行訓練的時長不斷增長。傳統單機環境下的推薦系統無法滿足大數據時間推薦的需求,Hadoop[2]平臺能夠處理高達上TB級別的海量數據。目前有大量的學者對單機的機器學習算法使用Hadoop平臺編寫進行擴展以實現對大規模數據集的處理。江小平[3]等基于MapReduce編程模型對樸素貝葉斯文本分類算法進行并行化擴展。劉義[4]等基于Map-Reduce編程模型在Hadoop平臺上實現了基于R-樹的k-近鄰連接算法。對于推薦內容的計算,大量的學者將推薦系統和Hadoop平臺進行集成,Yu[5]等采集用戶之間傳遞的信息以及發表的游記文本作為訓練數據,利用Hadoop平臺構建旅游推薦系統。 Walunj[6]等利用基于MapReduce實現的Mathout算法庫構建電子商務推薦系統,該算法庫集成了協同過濾算法,具有更好的操作性。
Hadoop平臺解決了海量數據計算推薦模型的問題,但是Hadoop平臺在并行計算時必須將中間結果存儲在磁盤中,并且需要從磁盤中再次讀取,導致Hadoop平臺構建的推薦系統存在如下不足:一是離線推薦模型在面對海量數據時會出現訓練時間較長的問題;二是無法對用戶的實時日志行為做出實時處理。由于基于Hadoop平臺構建的推薦系統存在的不足,無法滿足實時推薦的需求,使得用戶對于電商網站的推薦反饋速度提出了更高的要求。Spark是新興的大數據處理引擎,其很好地解決了Hadoop平臺在計算時需要將運算的中間結果存入磁盤所導致的計算速度緩慢問題。從2009年Spark誕生至今,作為開源項目已經在流處理、圖計算、機器學習、結構化數據查詢等各個方面,取得了很多重要的成果[7]。Spark平臺為迭代式數據處理提供更好的支持,每次迭代的數據可以保存在內存中,而不是寫入文件。Spark平臺提供了集群的分布式內存抽象,即RDD[8],一個不可變的帶分區集合,以實現數據操作方式的多樣性。目前針對Spark平臺的相關研究論文較少,Lu[9]等利用遠程內存提升Spark平臺在處理大數據時的速度。Qi[10]等利用Spark平臺將用于配對測試檢測的基因算法進行兩階段并行處理,提升了配對測試的體積大小和計算的效率。Yang[11]等基于Spark平臺提出了分批處理的梯度下降算法,并對深度置信網絡進行訓練,提升了收斂速度。國內對于Spark平臺的研究目前主要集中在一些互聯網行業,如阿里巴巴、百度、騰訊、網易、搜狐等。騰訊公司數據倉庫已經大量使用 Spark平臺替代原來的Hadoop平臺的MapReduce,并使系統性能大大提高。曹波[12]等將傳統關聯分析中的FP-Growth算法在Spark平臺實現了并行處理,解決了識別大數據的伴隨車輛組問題。王虹旭[13]等設計了在Spark平臺上的并行數據分析系統,來解決海量數據分析問題。嚴玉良[14]等提出了一種基于Spark的大規模單圖頻繁子集挖掘算法,通過次優樹構建并行計算的候選子圖,在給定最小支持度時挖掘出所有的頻繁子圖。王詔遠[15]等基于Spark平臺提出一種并行蟻群優化算法,通過將螞蟻轉換為彈性分布式數據集,由此給出一系列轉換算子,實現螞蟻構造過程的并行化。
目前基于Hadoop平臺的推薦系統解決了推薦模型并行訓練的問題,但離線訓練速度慢。通過對Spark平臺的研究,Spark平臺擁有比Hadoop平臺更強大的計算能力,能更快速地處理并行數據,但目前的研究僅是針對大數據下電商網站離線推薦系統的設計,并未提出基于Spark平臺的實時推薦流程和算法。本文設計和實現了應對大數據的基于Spark平臺的電商實時推薦系統,設計了實時推薦系統流程,提出了分布式日志實時采集、分布式日志實時傳輸、實時日志過濾和基于Spark平臺的實時推薦模型的關鍵技術。實驗結果表明,本系統具有高可靠性和穩定性,能夠滿足大數據下實時推薦的需求。
1.1系統架構設計
(1)設計思想
電商網站存在著大量的用戶隱式行為 (例如用戶瀏覽商品、用戶下單、用戶取消訂單、用戶將商品加入購物車和用戶將商品從購物車刪除),此外,由于電商系統規模的擴大和各個業務系統的拆分,使得系統日志文件散落在各個服務器上。傳統基于Hadoop平臺的推薦系統無法有效地匯總用戶隱式行為日志,并對隱式行為日志進行有效分析,無法滿足系統實時推薦的需求。本文的設計思想是根據電商網站的顯式用戶行為相對稀缺這一特點,采用用戶隱式行為來構建用戶評分,并在隱式數據源的基礎上將傳統基于Hadoop平臺構建的推薦系統移植到Spark平臺,同時在傳統離線推薦的基礎上結合用戶實時點擊流,實時分析用戶行為,并融合離線推薦模型,以反饋最適合當前用戶的實時推薦列表。本文設計的基于Spark平臺的電商實時推薦系統架構,如圖1所示。
在圖1中,基于Spark平臺的電商實時推薦系統架構分為3層:離線處理層、服務層和實時處理層。在服務層,首先系統將訪問各個業務系統的請求交由多臺應用網關進行下發,在應用網關集群前通過HTTP服務器進行負載均衡。然后通過構建分布式日志框架,在應用網關服務器上安裝分布式日志采集Agent,采集訪問各個業務系統的日志信息。由于電商網站的日志產出量巨大,需要可靠的消息傳送中間件作為模型訓練與數據源采集之間的紐帶,系統構建了基于Kafka集群的消息分發中間件,實現日志數據的統一下發。由于日志數據中包含著各個業務系統的日志以及用戶點擊流的日志,在進入離線或實時推薦階段前,需經過統一的數據清洗。與以往將日志數據存儲于某一固定介質、統一做離線批處理完成清洗不同,本系統采用Spark平臺的Spark Streaming技術實現日志的實時處理。Spark Streaming技術可以按照時間分片,對固定時間間隔內收到的數據進行統一批處理,能達到實時處理的效果,并具有很高的吞吐量。

圖1 基于Spark平臺的電商實時推薦系統架構
在離線處理層,作為實時推薦的數據源收集完畢后,對數據源中的用戶行為進行權重的分級,得到用戶對于某商品的基本評分,并輸入推薦模型訓練。傳統的方案是使用Hadoop平臺的離線推薦模型訓練,但Hadoop平臺存在三個問題:一是抽象層次低,需要編寫很冗余的代碼完成操作;二是Hadoop平臺只提供Map和Reduce兩個操作,表達能力欠缺;三是處理中間結果存儲在HDFS文件系統中,使得計算迭代式任務速度緩慢。本設計采用的Spark平臺利用RDD進行抽象,實現的數據邏輯相比Hadoop平臺更簡短,同時提供多種轉換和操作,具有很強的表達力。同時,相對于Hadoop平臺,Spark平臺的中間計算結果可以緩存在內存中,對于需要很多迭代計算的推薦任務,提高了計算效率。此外,基于Spark計算框架和Spark Mlib機器學習庫提供了ALS推薦模型,可以構建新的離線推薦系統,并且將電商網站所有用戶推薦列表寫入Redis緩存系統中,緩解電商網站系統壓力。
在電商網站中,如果只進行離線的模型訓練,用戶當天的訪問行為并不能實時地反映在推薦列表上,無法更好地滿足用戶需求以及提高電商網站商品的轉化率。因此,在實時處理層,系統需要對實時的用戶行為進行處理,將其與離線推薦的結果進行混合,從而提高實時推薦的效果。Hadoop平臺由于存儲的特性,只適用于批處理的場景,而采用了Spark Streaming(Spark流技術)的Spark平臺,針對用戶的每次訪問,可以實時過濾日志信息,抽出所需要的信息,獲得與該商品相似的前N位商品列表,并與離線模型進行混合處理,進行重排序,使得電商網站可以感知到用戶最新的行為,提升電商網站的轉化率。
與以往基于Hadoop平臺的離線推薦系統相比,本文構建的基于Spark平臺的電商實時推薦系統具有比以往更快的反饋速度和訓練速度。
(2)實時推薦系統流程
基于以上設計思想,系統從Spark Streaming端獲取所需要的數據,并復用了日志數據源端提供的數據,經過數據聚合、數據傳輸和數據過濾后,進行離線和實時推薦,返回融合了離線推薦和實時推薦結果的推薦列表。系統設計的實時推薦流程如下。
步驟1:計算隱式評分。電商網站通過HTTP服務器Nginx,根據配置好的響應規則,將用戶的請求分發到多臺應用網關中,由應用網關完成向各個業務系統的請求調用,如購物車、交易以及商品系統。在應用網關中植入分布式日志采集工具Agent,收集發向各個業務系統的日志信息,并匯集后發向Kafka消息集群。Kafka集群會接入Spark Streaming實時處理框架進行日志過濾,抽取出用戶交易行為、用戶瀏覽行為和用戶對購物車操作行為,并寫入Hive表。使用Shark讀取Hive表。其中Shark是基于Spark平臺上且兼容Hive語法的SQL執行引擎,其底層調用Spark并行實現。在調用Shark時,系統賦予每一種用戶行為的不同權重,利用Shark計算用戶對商品的評分。
步驟2:離線推薦模型訓練。計算完隱式評分,即可以得到(用戶ID-商品ID-評分)三元組,作為離線推薦模型的數據源,由于單一用戶在網站上的購買數據占商品總量很低,因此使用交替最小二乘(ALS)算法,計算出隱式因子,填補用戶未購買的商品的預測評分,然后訓練出離線推薦模型。
步驟3:生成離線推薦列表。將電商網站上的用戶依次輸入模型,得到所有電商網站注冊用戶的離線推薦列表,設置推薦列表長度,為了減低數據庫訪問的壓力,系統將所有的推薦列表放入Redis緩存系統中,同時提供獲取推薦列表的接口,供PC端、移動網頁端和移動App端調用。其中Redis是一款基于內存存儲的,可持久化的鍵值對數據庫。
步驟4:生成實時推薦列表。首先利用 Spark Streming技術,將Kafka集群傳來的日志信息過濾出日志點擊流,從中抽取出用戶產生行為操作的商品ID和用戶ID。然后根據步驟2訓練好的離線推薦模型,進行商品相似度排序,可得到相似度排名前5的商品。最后根據得到的用戶ID和商品ID的推薦列表,構建商品ID和用戶ID的列表,即商品被推薦到用戶的鍵值對,定位到相關用戶ID,并將用戶推薦列表的前5個替換為步驟5得到的TOP 5商品,以此減少Redis的更新次數,來優化系統的響應速度。
1.2系統架構設計
本文設計和實現的基于Spark平臺的電商實時推薦系統,主要會經歷如下階段:日志數據的采集;日志數據的聚合;日志數據的傳輸;日志數據的過濾;用戶隱式行為的實時推薦。
(1)分布式日志的實時采集
電商實時推薦系統需要大量隱式的用戶行為作為基礎數據,而且每種用戶行為的源日志信息分布在不同的業務系統中,需要構建分布式日志匯總系統將日志進行收集,以備后續流程使用。本系統基于開源的分布式日志收集工具Logstash,實現對各業務子系統的日志進行收集。分布式日志采集模塊如圖2所示。

圖2 分布式日志采集模塊
在圖2中,系統植入在應用網關處的日志監控可以實時監測日志文件的變化,并根據偏移量,讀取來自交易系統、商品系統和購物車系統的最新日志信息,然后將日志輸出到Redis中緩存起來。日志聚合索引目錄是日志的存儲者,負責從Redis緩存中收集日志,并格式化處理,輸出給所需要的用戶。分布式日志采集模塊的自定義輸出為Kafka消息集群。
(2)基于Kafka集群的數據傳輸
通過構建分布式日志實時采集模塊,完成了用戶行為日志的采集。但是在進入日志過濾階段之前,由于日志流并發產生且數量很大,如何保證數據的實時性以及盡量減少數據丟失,這些都給隱式用戶行為日志數據的收集帶來了巨大的挑戰。LinkedIn公司開發了一套專用的分布式消息訂閱和發布系統——Kafka,于2010年開源,并且成為Apache的開源項目之一。本文設計和實現的電商實時推薦系統中,構建Kafka集群,來承載上千萬的用戶行為日志信息,為后續的日志過濾階段提供了安全可靠的消息傳輸。由于Kafka集群是一套分布式系統,其吞吐量可以隨著集群的擴展而線性增加。圖3為基于Kafka集群的數據分發架構。

圖3 基于Kafka集群的數據傳輸
在圖3中,Kafka集群由三個部分構成:生產者(Producer),代表日志的來源;代理(Broker),代表消息的中間存儲層;消費者(Consumer),代表消息的使用者。其中,Producer負責將消息收集并推送(Push)到Broker,而Broker則負責接收Producer發送來的消息,并將消息本地持久化,Consumer則是消息的真正使用者,從Broker拉取(Pull)消息并進行處理。系統中植入在應用網關的 Logstash日志監控會將處理完的日志發送至LogStash日志聚合索引,由LogStash日志聚合索引作為生產者將日志數據發送至Kafka集群,Spark節點作為消費者,啟動Spark Spreaming處理實時傳來的日志流,并根據實時推薦的需求做不同的過濾處理。
(3)基于Spark Streaming的日志過濾
數據傳輸后,系統統一使用Spark Streaming過濾數據,并根據流程將日志做不同的處理,實現離線和實時推薦的復用的日志過濾模塊。Spark Streaming接收到的是實時收集到的日志信息,含有很多的噪聲數據,需要從中抽取出所需要的信息。在實時推薦流程中,需要獲取點擊流的日志數據,從中抽取出用戶ID和商品ID。用戶點擊商品所調用的接口方法用于獲取商品詳情,根據預先定義的日志信息的主題,從Kafka代理層中拉取日志信息。其中在日志信息中記錄了用戶這次請求調用的接口。LogStash展示的是商品詳情查看源日志的格式化日志,具體如表1所示。

表1 LogStash的格式化日志
由于表1只是LogStash提供的前端展現,在系統流程中,需要調用Spark Sreaming對所有接受到的日志調用filter函數,將消息中包含獲取商品詳情方法的日志過濾出來,過濾后得到所有的商品詳情的請求日志,在消息中解析變量字段對應的內容,從中獲得itemId,即商品ID,然后獲取用戶行為字段,并從字段對應的內容中獲取_cip(用戶IP),_uid(用戶id)等關鍵信息,為后續的實時推薦提供了數據源。
(4)基于Spark平臺的實時推薦算法
本文設計的大數據電商實時推薦系統主要分為離線處理和實時處理兩個不同的流程,基于Spark平臺對已有離線推薦系統進行優化,并且在實時性上進一步加強,將離線推薦的結果和實時推薦的結果進行融合,實現電商網站的實時推薦。系統首先進行離線模型的訓練,離線推薦主要基于對用戶隱式行為的挖掘,如支付、未支付、增刪購物車和瀏覽詳情等操作,因而需要獲得用戶的隱式行為,得到用戶對商品的隱式評分。隱式用戶行為表如表2所示。

表2 隱式用戶行為表
基于Spark平臺的實時推薦算法如下:
(1)讀取用戶行為表。系統運用Shark從Hive中獲取3個用戶行為表,即用戶交易表、用戶購物車數據表和用戶瀏覽商品記錄表。
(2)構建訓練數據源。讀入用戶行為表,根據用戶點擊行為的權重,得到(用戶ID,商品ID),評分)鍵值對。讀入交易表,對支付行為以及非支付行為進行分別處理,根據對應的權重,得到(用戶ID,商品ID),評分)鍵值對。讀入購物車數據表,因為購物車有多種不同的行為,本系統只需要增加物品至購物車,以及從購物車刪除商品,購物車表進行過濾,篩選出需要的記錄,得到(用戶ID,商品ID),評分)。讀入用戶瀏覽商品記錄表,根據對應的權重,得到(用戶ID,商品ID),評分)鍵值對。
(3)離線推薦模型訓練。處理完3個用戶行為表,調用union函數,將用戶行為表中得到的(用戶ID,商品ID),評分)鍵值對進行融合,去掉重復鍵值對,并構建Spark Mlib機器學習庫中基于ALS的協同過濾算法的數據源,即(用戶ID,商品ID,評分)三元組。設置ALS迭代的次數以及相關參數,ALS算法會對用戶-商品評分矩陣進行分解,利用隱語義因子進行表達,同時用于預測缺失的元素。
(4)實時推薦模型。離線模型訓練完畢后,首先電商網站將網站所有的用戶輸入模型,將推薦列表寫入Redis緩存系統,優化網站性能。然后啟動實時推薦任務,根據從點擊流中取得的商品ID,利用離線推薦模型,取得與之最相似的前5個商品。最后在Redis緩存系統中找到對應用戶ID的推薦列表,剔除原有列表的最后5個,將第2步中得出的5個商品放入Redis中推薦列表的隊首。
通過上述離線推薦與實時推薦的融合,完成基于Spark平臺的實時推薦模型,達到實時響應用戶請求,實現實時推薦反饋的目的。
本文的實驗環境如下:基于Spark平臺的電商實時推薦系統搭建了3臺云服務器,托管在阿里云上,承擔每日的用戶訪問;每臺服務器配置8核CPU,16GB內存和300GB硬盤。軟件配置如下:采用Spark 1.5.2版本用于大數據處理;Java 1.8版本用于編寫Spark程序;Logstash 2.1.1版本用于分布式日志采集;Kafka 0.8.2.2版本用于分布式日志數據傳輸;此外Hadoop 2.6版本用于分布式文件系統并與Spark平臺進行測試對比。本文對分布式日志采集、分布式日志傳輸、實時日志過濾和實時推薦等系統關鍵技術進行實驗。
2.1分布式日志采集
大數據下電商網站每天為大量的用戶提供服務,圖4顯示了電商網站的每天采集的日志總量,達到1600 萬/天的日志吞吐量。海量的用戶行為日志數據為實時推薦提供了足量的訓練數據。本文所構建的分布式日志采集模塊解決了大數據電商網站跨系統收集用戶訪問日志的問題。

圖4 電商網站每天日志總量
2.2分布式日志數據傳輸
分布式日志采集系統每天會采集到1600萬的日志信息,其中絕大部分會交給Kafka集群進行傳遞,作為實時推薦的數據源,因此需要對Kafka集群進行吞吐量的測試,以保證數據可靠、實時傳輸。多個Producer可同時向同一個主題發送數據,在Broker負載飽和前,Producer數量越多,集群每秒收到的消息量越大,并且呈線性增漲,不同個數Producer時的總吞吐率如圖5所示。

圖5 Kafka集群的生產者性能實驗
由圖5可以看出,單個Producer每秒可成功發送約128萬條負載為100字節的消息,并且隨著Producer個數的提升,每秒總共發送的消息量線性提升。系統中有4臺Producer,每天產生的日志總量是1600萬。系統構建的Kafka集群,經實驗證明,足以接收穩定傳輸分布式采集到的數據。在穩定接收的前提下,對Kafka集群又進行消費測試,在集群中已有大量消息的情況下,使用1-3個Consumer時的Kafka集群總吞吐量如圖6所示。

圖6 Kafka集群的消費者性能實驗
由圖6可知,單個Consumer每秒可消費306萬條消息,該數量遠大于單個Producer每秒可消費的消息數量,這保證了在默認配置下,消息可被及時處理。并且隨著Consumer數量的增加,系統集群的總吞吐量呈線性增加,能夠滿足用戶訪問量增大,日志傳輸量增大的需求。
2.3基于Spark Streaming的日志過濾
Kafka集群可以穩定負載本文構建的實時推薦系統的日志傳輸量,因此需要對Spark Streaming實時處理日志,對提取出所需要數據的力進行測試。Spark-
Streaming處理日志速率如圖7所示。

圖7 SparkStreaming處理日志速率
在圖7中,Spark Streaming平均每秒處理202條記錄,且運行狀況良好。同時根據系統運行15小時的日志顯示,Spark Streaming一共完成18557次實時批處理,提取了13533355條記錄,能夠滿足實時日志的處理需求。
利用Spark Streaming對實時日志流進行實時過濾,從日志中抽取出對應的商品ID和用戶ID,供實時推薦流程使用,抽取出的日志信息如表3所示。

表3 實時抽取的日志信息
2.4基于Spark平臺的實時推薦
由于Spark平臺在處理任務上相對于Hadoop平臺的優越性,本文采用Spark以及其生態系統中的ALS模型作為實時推薦平臺的計算平臺與訓練模型。為了測試Hadoop平臺與Spark平臺在處理計算任務時的性能差異,本系統選用了電商平臺采集的數據集對Spark平臺與Hadoop平臺的MapReduce在執行作業性能上做了對比實驗。Spark與Hadoop執行作業時間對比如圖8所示。
從圖8中可以看出,Spark平臺在進行不同作業類型的計算時,性能都相對于Hadoop平臺的MapReduce平均提升4倍以上。但對于WordCount、UserBased及ItemBased此類迭代次數不多的任務時,相對于Hadoop平臺的MapReduce計算速率提升幅度較小,平均提升3倍以上。
在進行本系統所使用的ALS模型訓練時,因為其需要多次迭代運算,性能提升非常顯著。ALS模型在Hadoop平臺及Spark平臺上訓練性能對比,如圖9所示。

圖8 Spark平臺與Hadoop平臺執行作業時間對比

圖9 ALS模型在Hadoop及Spark平臺上訓練性能對比
從圖9中可以發現,在多次迭代后,Spark平臺的效率相比Hadoop平臺要提高10倍以上,這是由于Hadoop平臺的Mapreduce每次迭代后,都要重新讀取HDFS,使得作業完成的時間和迭代次數成線性增長,而Spark平臺由于其將中間結果緩存在內存中,即使進行多次迭代,時間也不會出現明顯增加。
圖8和圖9的對比實驗顯示了Spark平臺作為推薦平臺的基礎架構相對于傳統推薦系統的優越性。實驗最后對離線推薦的結果進行了測試。圖10顯示的是在移動App端基于測試用戶的用戶行為的離線推薦結果。當測試用戶點擊了巧克力的類目,通過實時獲取用戶訪問的信息,實時推薦模塊會啟動,抽取出與該商品最相似的商品,并與離線推薦列表進行融合,產生實時推薦列表。測試用戶的實時推薦結果如圖11所示。

圖10 離線推薦結果

圖11 實時推薦結果
圖10和圖11的實驗結果驗證了本文設計的基于Spark的電商實時推薦系統能夠有效承載網站的日志信息,并根據用戶的實時用戶行為做出實時推薦反饋,優化了用戶體驗,提升了網站的銷售額。根據日志采集系統,電商網站推薦模塊的交易轉化率提升了5%,有效優化了用戶體驗。
基于Hadoop實現的推薦系統存在著離線訓練速度慢,并且無法對用戶實時行為做出推薦反饋,不能滿足大數據時代用戶對實時推薦系統的需求。以往研究表明,Spark平臺在并行處理大數據上擁有比Hadoop平臺更強的運算性能,但目前未有一套完整的實現流程解決Spark平臺下針對用戶隱式行為日志做出實時推薦的問題。本文設計和實現了大數據下基于Spark平臺的電商實時推薦系統;提出了一套新的實時推薦流程;針對跨系統用戶隱式行為日志的收集及傳輸的需求,設計并實現了分布式日志采集模塊和分布式日志傳輸模塊;并且通過基于Spark Streaming的日志實時過濾模塊完成日志數據的過濾。在統一數據源的基礎上,本文創新地提出了大數據下電商網站的實時推薦算法,將離線推薦推薦的推薦結果和實時流計算出的推薦結果進行融合,生成實時推薦列表。最后用實驗驗證了系統的可靠性、穩定性以及相對于Hadoop平臺的高效性。下一步的工作將針對大數據下電商網站越來越多種類的用戶行為,設計多樣的數據處理方式,以提升系統的通用性。
[1]IDC.The Digital Universe of Opportunities:Rich Data and the Incdreasing Value of the Internet of Things[EB/OL].[2014-04]. http://www.emc.com/leadership/digital-universe/2014iview/executive-summary.htm
[2]FERRERIA C R L,Traina J C,MACHADO T A J,et al.Clustering Very Large Multi-Dimensional Datasets with Mapreduce[C]. 17th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining,2011 ACM.San Diego:ACM Press,2011:690-698.
[3]江小平,李成華,向文等.云計算環境下樸素貝葉斯文本分類算法的實現[J].計算機應用,2011,31(9):2551-2555.
[4]劉義,景寧,陳犖,熊偉.MapReduce框架下基于R-樹的k-近鄰連接算法.軟件學報,2013,24(8):1836-1851.
[5]YU Y,HUANG C,LEE Y.An Intelligent Touring System Based on Mobile Social Network and Cloud Computing for Travel Recommendation[C].28th International Conference on Advanced Information Networking and Applications Workshops(AINA),2014 IEEE. Victoria,Canada:IEEE Press,2014:19-24.
[6]WALUNJ S G,SADAFALE K.An Online Recommendation System for E-commerce Based on Apache Mahout Framework[C].2013 Annual Conference on Computers and People Research,2013 ACM.Cincinnati:ACM Press,2013:153-158.
[7]ZAHARIA M,CHOWDHURY M,FRANKLIN M J,et al.Spark:Cluster Computing with Working Sets[C].Proceedings of the 2nd USENIX Conference on Hot Topics in Cloud Computing,2010:10-10.
[8]ZAHARIA M,CHOWDHURY M,DAS T,et al.Resilient Distributed Datasets:A Fault-Tolerant Abstraction for in-Memory Cluster Computing[C].Proceedings of the 9th USENIX Conference on Networked Systems Design and Implementation.USENIX Association,2012:2-2.
[9]X.LU,M.W.U.RAHMAN,N.ISLAM,D.SHANKAR.Accelerating Spark with RDMA for Big Data Processing:Early Experiences[C]. Proceedings of the 22nd Annual Symposium on High-Performance Interconnects.2010:9-16.
[10]QI RZ,WANG ZJ,LI SY.A Parallel Genetic Algorithm Based on Spark for Pairwise Test Suite Generation[J].Journal of ComputerScience and Technology,2016,31(2):417-27.
[11]YANG J,HE SQ.The Optimization of Parallel DBN Based on Spark[C].Proceedings of the 19th Asia Pacific Symposium on Intelligent and Evolutionary Systems,2016:157-169.
[12]曹波,韓燕波,王桂玲.基于車牌識別大數據的伴隨車輛組發現方法[J].計算機應用,2015,35(11):3203-3207.
[13]王虹旭,吳斌,劉旸.基于Spark的并行圖數據分析系統[J].計算機科學與探索,2015,9(9):1066-1074.
[14]嚴玉良,董一鴻,何賢芒等.FSMBUS:一種基于Spark的大規模頻繁子圖挖掘算法[J].計算機研究與發展,2015,52(8):1768-1783.
[15]王詔遠,王宏杰,刑煥來等.基于Spark的蟻群優化算法[J].計算機應用,2015,35(10):2777-2780,2797.
Big-Data;Spark Platform;Hadoop Platform;Real-Time Recommendation;Implicit User Behavior
Design and Implement of E-Commerce Real-Time Recommender System with Spark Based on Big Data
CEN Kai-lun1,YU Hong-yan2,YANG Teng-xiao3
(1.College of Information Engineering,Shanghai Maritime University,Shanghai 201306;2.College of Transport and Communications,Shanghai Maritime University,Shanghai 201306;3.Research and Department,Shanghai Newdon Technology Company Limited,Shanghai 200092)
國家自然科學基金(No.61562056)、教育部人文社科青年基金資助項目(No.13YJC630210)、2014年上海市科技型技術創新基金項目(No.1401H164800)、上海市楊浦區國家創新型試點城區建設與管理專項資金項目(No.2015YPCX03-002)
1007-1423(2016)24-0061-09DOI:10.3969/j.issn.1007-1423.2016.24.015
岑凱倫(1991-),男,上海人,碩士研究生,研究方向為云計算、大數據處理
于紅巖(1979-),女,山東文登人,講師,博士,研究方向為電子商務、云計算安全
楊騰霄(1977-),男,山西長治人,工程師,碩士,研究方向為云計算安全
2016-05-12
2016-07-25
大數據下基于Hadoop平臺構建的電商推薦系統存在著計算緩慢、無法根據用戶實時行為作出推薦的問題。針對以上問題,設計和實現基于Spark平臺的電商實時推薦系統。與Hadoop平臺構建的推薦系統相比,系統首先基于Spark平臺構建了分布式日志采集模塊和分布式日志數據傳輸模塊,用于采集和傳輸用戶隱式行為日志,解決電子商務跨系統數據源收集問題;其次在統一數據源的基礎上,采用基于Spark的矩陣分解推薦模型進行離線訓練,提升離線推薦訓練的效率;進而在離線推薦的基礎上,提出一種使用Spark Streaming實時流技術對電商日志數據做實時過濾,獲取用戶當前所需商品,并將離線推薦結果與實時推薦結果通過統一介質融合的方案,實現對用戶隱式行為進行實時推薦反饋的功能。最后經實驗證明,基于Spark平臺的電商實時推薦系統相對于Hadoop平臺的電商推薦系統具有更高的可靠性和穩定性,能夠承載大規模數據量,離線推薦訓練速度相對于Hadoop平臺提高10倍,并且對用戶的實時行為也能夠作出實時推薦反饋,提升5%的交易轉化率,增強電商網站的用戶體驗。
大數據;Spark平臺;Hadoop平臺;實時推薦;用戶隱式行為
Concerns the problem that the e-commerce recommendation system which based on Hadoop platform has low computing speed and can't make recommendation based on real-time user behavior.In order to solve the problem,designs real-time e-commerce recommendation system which is based on Spark platform.What is different from the previous system is that distributed log collection module and distributed log data transmission module are designed to collect and transfer log data of implicit user behavior,which solves the problem of collecting the log data come from different system.On the basis of a unified data source,the matrix decomposition model based on Spark is used to do off-line training and Spark streaming is used to do real-time log filtering to get the most similar goods to the good which included in the log.The result of real-time recommendation and off-line recommendation is merged in the system as feedback to the realtime user behavior.The experimental results show that the system which can carry massive amounts of data has the higher reliability and stability than the system which is based on Hadoop,the training speed of the off-line recommendation is 10 times as fast as that of the Hadoop platform,can make real-time recommended feedback to real-time user behavior which increase the user experience and the percent conversion of trade can be increased 5%.