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