王磊++時亞文
摘要:作為第三代機器學習工具,spark被視為替換Hadoop的下一代數(shù)據(jù)處理解決方案.包括了迭代計算、批處理計算、內(nèi)存計算、流式計算、數(shù)據(jù)查詢分析計算及圖計算,提供了強大的內(nèi)存計算引擎.Spark有望成為下一代大數(shù)據(jù)熱門框架.研究分析了Spark組件生態(tài)圈和Lambda架構(gòu).最后介紹了Spark應用于機器學習領(lǐng)域.
關(guān)鍵詞:機器學習;spark;Hadoop
中圖分類號:TP301 文獻標識碼:A 文章編號:1009-3044(2016)20-0007-02
Abstract:As the third generation of machine learning tools, spark is considered as the next generation of data processing solution to replace Hadoop, including the iterative calculation, batch calculation, memory computing, flow calculation, data query analysis and graph calculation. It provides a powerful memory computing engine.Spark, which is the next generation of big data popular framework.
Key words:Machine learning; spark; Hadoop
大數(shù)據(jù)通常分為批量數(shù)據(jù)流及實時數(shù)據(jù)流。兩種流類型都有各自解決方案,前者通常采用MPI、OpenMP及Hadoop等并行模型進行集群計算,后者采用流數(shù)據(jù)模型進行處理,如
Storm、S4及Spark Streaming。IBM研究院Sun[1]等認為MapReduce計算模型在倒排索引、kNN分類等批量處理的數(shù)據(jù)挖掘或統(tǒng)計機器學習算法中有較好效果,K-Means、高斯混合、PageRank、LDA等需要多次迭代的算法用MapReduce模型也有較好效果,缺陷是MapReduce計算模型在大量數(shù)據(jù)同步的算法如SVM中效果不佳,因此Spark集群計算平臺應運而生。
1 Spark模型介紹[2]
Spark是UC Berkeley AMP lab開發(fā)的開源集群計算平臺,是以內(nèi)存計算為基礎(chǔ)的集群計算框架。Hadoop模型中的MapReduce模式的缺陷是運行速度慢,比較適合離線的任務分解,運行程序時需要復制額外的信息,序列化和磁盤I/0所帶來的時間空間開銷代價也比較大,Spark模型基于內(nèi)存計算而且執(zhí)行作業(yè)是基于構(gòu)建的Stage有向無環(huán)圖,Spark模型運行速度快的主要原因是算子融合和有向無環(huán)圖,Spark模型設(shè)計和內(nèi)核處理模式較適合進行大規(guī)模信息處理。Spark組件生態(tài)圈如圖1。
2 Spark在RDD中的編程模型[3,5]
RDD(Resilient Distributed Datasets)彈性分布式數(shù)據(jù)集是分布式內(nèi)存的一個抽象概念,RDD設(shè)計了一種高度受限的共享內(nèi)存模型,通過在其他彈性分布式數(shù)據(jù)集執(zhí)行確定的轉(zhuǎn)換操作而創(chuàng)建,這些限制使得容錯實現(xiàn)的開銷代價降低。
Spark的設(shè)計思想是在任務和數(shù)據(jù)的容錯方式基礎(chǔ)上,設(shè)計出一種全新的容錯方式模型,能夠減少網(wǎng)絡流量及磁盤輸入輸出開銷。RDD是一種只讀數(shù)據(jù)塊,可以通過從存儲系統(tǒng)上讀取數(shù)據(jù)或者進行其他RDD操作。RDD數(shù)據(jù)的只讀特性表示如果對一個RDD數(shù)據(jù)塊進行了操作,那么結(jié)果將會是一個新的RDD,這種情況放在代碼情景下,假設(shè)變換前后都是使用同一個變量表示這一RDD,RDD里面的數(shù)據(jù)意義并不是真實的數(shù)據(jù),而是一些元數(shù)據(jù)信息。
Spark提供多種計算方式,使其他成為高效的數(shù)據(jù)流水線,提供了復雜查詢,流式計算、機器學習、圖計算等功能。Spark支持scala、python和java評議,提供了shell,方便與用戶交互。Spark可以運行在Hadoop數(shù)據(jù)源上,如HDFS、Hive、HBase等,這樣的一種特征,可以讓Spark開發(fā)者及用戶輕易地從原系統(tǒng)遷移到Spark系統(tǒng)上來。
3 Spark架構(gòu)思路[1,7]
Spark計算模型采用Lambda Architecture架構(gòu)處理批量及實時流數(shù)據(jù),Lambda Architecture架構(gòu)分為三層:包括Batch Layer批處理層、Serving Layer服務層以及Speed Layer速度層。
其中批處理層設(shè)計基于Hadoop計算模型,在Spark平臺上開發(fā)的圖計算框架GraphX和機器學習庫Mllib可作為批量數(shù)據(jù)分析。服務層可以接收外部ad-hoc查詢請求,利用Shark等索引服務對批量處理層的結(jié)果進行索引,完成準實時的SQL查詢?nèi)蝿?。速度層采用Spark Streaming分布式的流處理平臺實時處理數(shù)據(jù)成查詢處理。
4 Spark實現(xiàn)機器學習算法[3,8]
4.1 Spark中的邏輯回歸算法
JavaHdfsLR是邏輯回歸分類算法的Spark實現(xiàn),采用漸進梯度下降模型。使用SGD加上諸如牛頓-拉普森的近似法來預測似然函數(shù)。輸入數(shù)據(jù)集及輸出結(jié)果都是Hadoop分布式文件系統(tǒng)中的文件。
4.2 Spark中的支持向量機
使用SVMModel的內(nèi)部類來表示訓練過程中返回的模型對象以及SVMWithSGD。支持向量機的工作流:
1)創(chuàng)建Spark上下文。
2)加載已標記的輸入訓練數(shù)據(jù),SVM中用到的標記必須是{0,1}。
3)使用由{label,features}對及其他輸入?yún)?shù)組成的RDD輸入來訓練模型。
4)使用輸入數(shù)據(jù)來創(chuàng)建一個類型為SVMWithSGD的對象。
5)調(diào)用GenerallizedLinearModel重寫后的run()方法,它會使用預配置的參數(shù)在輸入RDD的LabeledPoint上運行算法,并對所有輸入特征的初始權(quán)重進行處理。
6)獲得一個SVM模型對象。
7)終止Spark上下文。
5 總結(jié)
作為第三代機器學習工具,spark被視為替換Hadoop的下一代數(shù)據(jù)處理解決方案.包括了迭代計算、批處理計算、內(nèi)存計算、流式計算、數(shù)據(jù)查詢分析計算及圖計算,提供了強大的內(nèi)存計算引擎.Spark有望成為下一代大數(shù)據(jù)熱門框架.研究分析了Spark組件生態(tài)圈和Lambda架構(gòu).最后介紹了Spark應用于機器學習領(lǐng)域。
參考文獻:
[1] 唐振坤.基于Spark的機器學習平臺設(shè)計與實現(xiàn)[D].廈門大學,2011.
[2]http://baike.baidu.com/link?url=NjUeVoyTiUBYebTHNOyw3 9VNZ1Yn9OMPz-SMujvalpeDTbcwuYNOQS5xRQttjvtXa3mO O5QdAI3Ho_H4dgsg8tywKzdDg_w3ZURoiHOCYK7百度學科
[3] Vijay Srinivas Agneeswaran.顛覆大數(shù)據(jù)分析:基于Storm、Spark等Hadoop替代技術(shù)的實時應用[M]. 吳京潤,黃經(jīng)業(yè),譯.中國工信出版集團,電子工業(yè)出版社,2015.
[4]胡俊.基于Spark的大數(shù)據(jù)混合計算模型[J].計算機系統(tǒng)應用2015,24(4):214-218.
[5]楊志偉.基于Spark平臺推薦系統(tǒng)研究[D].中國科學技術(shù)大學,2015.
[6]李爽.基于Spark的數(shù)據(jù)處理分析系統(tǒng)的設(shè)計與實現(xiàn)[D].北京交通大學,2015.
[7] 梁彥.基于分布式平臺Spark和YARN的數(shù)據(jù)挖掘算法的并行化研究[D].中山大學.2014
[8]Nathan Marz, James Warren.Big Data: Principles and Best Practices of Scalable Realtime Data Systems.2015.