

摘 要: Hadoop大數據平臺上可以搭建Yarn,Mahout,Storm,GraphLab等框架,其提供了大數據的各種處理能力。但它們各自按自己的機制工作,整合度極低。雖然在Mahout框架中,對機器學習的算法支持較為完善,但是數據必需是離線的。在大數據時代,要求不僅具有處理能力,還強調了數據的時效性,以前的框架都顯得有點力不從心。Spark是Hadoop平臺上的新型利器,它的各個部分幾乎能替代以前的分散的框架,且采用統一的處理機制,整合度很好,速度比傳統處理方式快幾十倍甚至幾百倍。基于Hadoop平臺的Spark快數據推薦算法分析與應用是在Hadoop平臺上用Yarn作資源管理,Spark作快數據的處理,這極大地提高了大數據的處理效率。該文以專業推薦系統為應用基礎,采用Yarn作資源管理,及Spark ALS算法做推薦,Spark PageRank算法做專業排名,實驗結果表明,Spark框架對大數據的處理機制能夠滿足日益增值的大數據應用對速度的要求。
關鍵詞: Hadoop; Spark; 快數據; ALS算法; PageRank算法
中圖分類號: TN911?34 文獻標識碼: A 文章編號: 1004?373X(2016)10?0018?03
Analysis and application of Spark fast data recommendation algorithm based
on Hadoop platform
CHEN Hongjun1, WU Xueqin2
(1. Chengdu College, University of Electronic Science and Technology of China, Chengdu 610074, China;
2. Sichuan TOP IT Vacational Institute, Chengdu 611743, China)
Abstract: Analysis and application of Spark fast data recommendation algorithm based on Hadoop platform is to use Yarn as resource management on Hadoop platform, and Spark as fast data processing, which greatly improves the processing efficiency of large data. In this paper, the specialty recommendation system is taken as application foundation, Yarn as resource management, Spark ALS algorithm as the basis of professional recommendation system, and Spark PageRank algorithm as specialist ranking. The experimental results show that, as for the big data processing mechanism , the Spark framework can meet the speed requirement of increasingly value?added big data application.
Keywords: Hadoop; Spark; fast data; ALS algorithm; PageRank algorithm
Hadoop平臺是開源組織Apache基金會開發的分布式架構,是大數據的基礎平臺。Hadoop平臺上目前可以搭建Yarn,Mahout,Storm,GraphLab和Spark等。Yarn用于資源管理,自動或者手動地為大數據挖掘提供容器資源。在Mahout框架中對機器學習的算法支持較為完善,缺點是數據必須是離線的,不能做到實時性,同時由于其采用MapReduce計算模型,隨著數據量的增大,其挖掘時效已經達不到要求。Storm用于實時在線數據的處理。GraphLab主要用于圖計算。Spark框架稱為快數據,是基于內存的編程模型,它可以把中間的迭代過程不放在磁盤中,直接數據一個不落地在內存中執行,極大地提高了它的執行速度。Spark是大數據挖掘的新型利器。Spark的優點不僅僅體現在快,也體現在功能強大的整合能力,其整合能力體現在它的大數據能力的強大。 Spark的框架分為4大模塊:Spark SQL?RDD(數據執行的基本單元),MLlib(機器學習),Graphx(圖計算)和Spark Streaming(實時處理)[1];這四個部分的數據處理單元都是RDD,所以整個框架形成了大數據處理各種應用場景編程的一致性。Spark框架集機器學習、圖計算和在線學習于一身,是一個簡潔、強大、高效的框架。
1 專業推薦的理論基礎
專業推薦旨在基于Hadoop平臺的Spark框架,采用Spark SQL的RDD數據處理機制對數據做結構的包裝,采用Spark 機器學習Mllib中的ALS算法作推薦,以及利用Spark 圖計算的PageRank算法做專業排名,通過以上機制能夠達到對報考志愿的學生按相似性格作專業推薦,并對專業做評分[2]。流程圖如圖1所示。
1.1 RDD的數據表示機制
RDD(Resilient Distributed Datasets),稱為彈性分布式數據集[3],本質上是Spark分布式內存模型中的數據結構,可以讓用戶顯式地將數據存儲到磁盤和內存中,并能控制數據的分區。 對開發者而言,RDD可以看作是Spark的一個對象,它本身運行于內存中,如讀文件是一個RDD,對文件計算是一個RDD,結果集也是一個RDD ,不同的分片、 數據之間的依賴、key?value類型的map數據都可以看做RDD。Spark SQL允許在SQL和HiveQL中的相關查詢表達式在Spark中的執行。
RDD是高度受限的共享內存模型,即RDD是只讀的記錄分區的集合,只能通過在其他RDD執行確定的轉換操作(如map,filter,join,partionBy和groupByKey等)而創建,但是這種創建過程的開銷很低。
在專業推薦對存在Hadoop文件系統HDFS中待處理數據data進行RDD的轉換,程序片段如:
val ratings = data.map(_.split(′,′) match {
case Array(user, major, rate) => Rating(user.toInt, major.toInt, rate.toDouble)
})
把對經過ALS算法和PageRank算法的結果進行RDD轉換。
val prData = ranks.join(majors).map {
case (id, (rank, major)) => (rank, (major, id))
}.sortByKey(1).zipWithIndex().map {
case ((rank,(major, id)),index) => (id.toInt,(major,rank,index))
}
1.2 ALS算法
ALS是交替最小二乘(Alternating Least Squares)的簡稱。在機器學習的上下文中,ALS 特指使用交替最小二乘求解的一個協同推薦算法。它通過觀察到的所有用戶給產品的打分,來推斷每個用戶的喜好并向用戶推薦適合的產品。
專業推薦的打分矩陣U×M,其算法模型如下:[f(U,M)=(i,j)∈I(rij-uTimj)2+λ(inuiui2+jnmjmj2)] 式中:U表示學生,U=ui,其中i=1,2,…,nu,nu表示了學生的數量;M代表專業,M=mj,其中j=1,2,…,mj,mj表示了學生的數量;rij表示i學生對j專業的評分,這個分數可以是一個真實的數字或是無值的;T表示矩陣的轉置,λ表示矩陣的特征向量。
在專業推薦中,采用Spark的ALS算法模型做數據集的訓練及作預測函數,每次收到新的數據后,將其更新到訓練數據集中,然后更新ALS訓練得到的模型[4]。該初始數據為100萬條數據,ALS訓練模型中設置迭代次數為20,收斂值為0.01。如下語句所示,訓練后的數據集在model中。
val rank = 10
val numIterations = 20
val model = ALS.train(ratings, rank, numIterations, 0.01)
1.3 PageRank算法
PageRank算法主要應用于搜索引擎的搜索結果的排名。搜索的每個頁面的重要性可以由其“得票數”確定。“得票數”由所有鏈向它的頁面的重要性來決定。到1個頁面的超鏈接相當于對該頁投1票。1個超鏈接指向了s個頁面,那么它對每個頁面的貢獻值是[1s]。一個頁面的重要性排名PageRank是由所有鏈向它的頁面的重要性經過遞歸算法得到的[5]。
數學模型如下:
[PageRank(pi)=1-qN+qpjPageRank(pj)L(pj)]
式中:p1,p2,…,pn是被研究的專業;M(pi)是pi關注該專業的數量;L(pj)是pj關注該專業的人關注其他專業的數量,而N是所有專業的數量。在專業推薦中,采用了Spark Graphx中的PageRank算法做專業排名。代碼片段如下:
val graph = GraphLoader.edgeListFile(sc, \"hdfs://hadoop135:8020/spark/combine/Major_PR.data\").cache()
val ranks = graph.pageRank(0.001).vertices
2 實驗環境與測試結果
本實驗環境,采用Spark對比傳統MapReduce的方式對該專業模型中的ALS推薦部分做了測試。采用Hadoop 2.2大數據平臺,并采用Yarn管理有2個主機的集群。每個主機的配置:每臺機器4塊內存條,每塊4 GB,共32 GB內存,數據量為2 GB,共100萬條數據。為了更好的測試運行的效率,實驗對比了ALS算法,如表1所示。
表1 Spark對比傳統MapReduce的執行效率
實驗得出,Spark處理推薦性能明顯優于傳統的MapReduce方式。
3 結 語
Spark是Hadoop大數據平臺的一個利器,速度快,整合能力強。在大數據的分析與應用發展極為迅速的今天,Spark是非常值得研究的。本文中的專業推薦模型還可以從實時數據的收據、處理、呈現等方面繼續改進。
參考文獻
[1] 陳虹君.基于Hadoop平臺的Spark框架研究[J].電腦知識與技術,2014(35):8407?8408.
[2] SPIEWAK D, ZHAO Tian. ScalaQL: Language?integrated database queries for scala [C]// Proceedings of Second International Conference on Software Language Engineering. [S.l.:s.n.], 2009: 154?163.
[3] Anon. Resilient distributed datasets: a fault?tolerant abstraction for in?memory cluster computing, UCB/EECS?2011?82 [R]. Berkeley: EECS Department, University of California , 2011.
[4] BU Yingyi, HOWE B, BALAZINSKA M, et al. Ernst. HaLoop: efficient iterative data processing on large clusters [J]. Proceedings of VLDB endowment, 2010, 3(1): 285?296.
[5] 陳虹君.Spark框架的Graphx算法研究[J].電腦知識與技術,2015(1):75?77.
[6] 徐劍,陳群,王卓,等.一種基于Hadoop的多表鏈接策略[J].現代電子技術,2014,37(6):90?94.