邢英俊
摘要:Spark在實(shí)際的工業(yè)生產(chǎn)和實(shí)踐中已經(jīng)獲得了廣泛的應(yīng)用,但是由于其誕生的時(shí)間較晚,版本更新速度慢?,F(xiàn)階段,使用Spark框架在某些具體的大數(shù)據(jù)場(chǎng)景中能對(duì)其挖掘,就要結(jié)合原有的模塊改寫部分功能,發(fā)揮其應(yīng)有的作用。解決大數(shù)據(jù)挖掘問題的同時(shí),Spark框架由于功能性不足,如進(jìn)行機(jī)器學(xué)習(xí)庫(kù)的時(shí)候的MLlib里面解決關(guān)聯(lián)新問題的分布式機(jī)器學(xué)習(xí)算法還有不足之處。故此,該文就Spark大數(shù)據(jù)挖掘技術(shù)開展深入的研究,希望能為該領(lǐng)域研究提供參考。
關(guān)鍵詞:Spark;大數(shù)據(jù);挖掘;研究
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)16-0019-02
各個(gè)行業(yè)的數(shù)據(jù)流量正在持續(xù)增加,大數(shù)據(jù)挖掘和分析開始面臨極為嚴(yán)重的挑戰(zhàn)。高效合理的大數(shù)據(jù)挖掘計(jì)算方法分析平臺(tái)能對(duì)海量的數(shù)據(jù)進(jìn)行處理,因而大數(shù)據(jù)時(shí)代下,好的數(shù)據(jù)處理平臺(tái)就顯得極為重要。Spark是一個(gè)開源適用于大數(shù)據(jù)的可靠性能分布式計(jì)算框架,能支持在大數(shù)據(jù)上進(jìn)行復(fù)雜的查詢,能快速的處理數(shù)據(jù)并進(jìn)行精準(zhǔn)的服務(wù)。
1Spark大數(shù)據(jù)生態(tài)系統(tǒng)及處理框架
Spark生態(tài)系統(tǒng)可以系統(tǒng)性的分為三個(gè)層面。核心部分是Spark runtime是經(jīng)常提及的Spark core層。該層包含了Spark的基本核心內(nèi)容,能在核心功能分區(qū)中進(jìn)行分布式的算子。下面可以就Cluster Manager和Data Manager層的集群管理進(jìn)行數(shù)據(jù)管理。在對(duì)集群進(jìn)行管理的時(shí)候能根據(jù)數(shù)據(jù)管理情況選擇適合的系統(tǒng),如HDFS、S3等。當(dāng)前的工業(yè)生產(chǎn)環(huán)境中,使用最為廣泛的模式是Spark On Yarn的模式,該模式的應(yīng)用極為廣泛。由于Spark SQL是借用SQL進(jìn)行分布式工作內(nèi)容查詢的,MLIib主要是利用分布式機(jī)器學(xué)習(xí)庫(kù),對(duì)Spark進(jìn)行系統(tǒng)化編寫,并借以處理大規(guī)模的計(jì)算模塊,通過大數(shù)據(jù)的流式計(jì)算,能讓各個(gè)模塊實(shí)現(xiàn)無縫式的連接模式,相互之間緊密配合,最終能實(shí)現(xiàn)其作用。
1.1 Spark Runtime
Spark Core包含的Spark的功能包括與任務(wù)的調(diào)度、內(nèi)存的管理等內(nèi)容,其中包括與故障的系統(tǒng)性恢復(fù)以及相關(guān)的存儲(chǔ)系統(tǒng)交互的對(duì)應(yīng)子元素。在對(duì)Spark使用RDD這類結(jié)構(gòu)進(jìn)行包裝數(shù)據(jù)傳輸期間,先要對(duì)Spark的核心邏輯數(shù)據(jù)進(jìn)行簡(jiǎn)單的了解,這類數(shù)據(jù)與對(duì)象概念有很多相似的地方。主要的特點(diǎn)如下:第一,所有的數(shù)據(jù)全集被分割為多個(gè)子集,每個(gè)子集都可以被發(fā)送到集群中的任意節(jié)點(diǎn)中對(duì)其進(jìn)行處理;第二,計(jì)算的中間結(jié)果被很好地保存下來,從可靠性角度思考問題能獲悉,計(jì)算結(jié)果相同也可以在多個(gè)子集節(jié)點(diǎn)中保存?zhèn)浞莸奈募?nèi)容;第三,其中的任意一個(gè)數(shù)據(jù)子集若在整個(gè)計(jì)算中出現(xiàn)問題,就要對(duì)該子集進(jìn)行重新的調(diào)整和處理,進(jìn)而完成容錯(cuò)機(jī)制。
1.2 GraphX
GraphX作為Spaerk內(nèi)的關(guān)鍵子項(xiàng)目,構(gòu)建的前提是以Spark為基礎(chǔ)的,在大規(guī)模的圖計(jì)算基礎(chǔ)上,由于GraphX的出現(xiàn),能讓Spark的生態(tài)系統(tǒng)在大圖處理方面獲得更為豐富的計(jì)算,同時(shí)在與其他相關(guān)組件進(jìn)行系統(tǒng)融合的前提下,能使用較為強(qiáng)大的數(shù)據(jù)處理能力,讓所有的應(yīng)用均能在多項(xiàng)場(chǎng)景處理中獲得。
GraphX主要是提供極為豐富的圖數(shù)據(jù)操作符,由于類庫(kù)的定義較多,其中包括于核心、優(yōu)化操作符,還有部分被定義到GraphOps的操作符定義中。在使用Scale的隱形語言轉(zhuǎn)換特征時(shí),能調(diào)用GraphOps中的操作符。
GraphX中能在多個(gè)分布集群上進(jìn)行圖計(jì)算運(yùn)算,且具有較多的API接口,特別是圖的規(guī)模達(dá)到一定以后,就要進(jìn)行算法精益化,這樣就便于在分布式圖集上進(jìn)行大規(guī)模的處理。Grapt~X的優(yōu)勢(shì)是讓數(shù)據(jù)的吞吐和規(guī)模等得到提升。
1.3Spark Streaming
由于Spark系統(tǒng)是Spark Streaming的數(shù)據(jù)分布式處理框架系統(tǒng),在擴(kuò)展Spark流式數(shù)據(jù)能力的同時(shí)。讓Spark Streaming的數(shù)據(jù)流按照時(shí)間的方式對(duì)其進(jìn)行單位分割,這就能形成RDD,既以小的時(shí)間間隔對(duì)流數(shù)據(jù)開展處理,由于處理期間受到延時(shí)的情況影響,所以可以從嚴(yán)格意義上看作為準(zhǔn)實(shí)時(shí)處理系統(tǒng)。眾所周知由于Spark Streaming作為較出色的容錯(cuò)系統(tǒng),對(duì)錯(cuò)誤的處理和恢復(fù)力較高,所以在錯(cuò)誤問題處理上占據(jù)優(yōu)勢(shì)。由于Spark Streaming能與其相關(guān)的Spark生態(tài)模塊如Spark SQl,GraphXC等生態(tài)模塊進(jìn)行無縫式的集合,所以在聯(lián)合完成相關(guān)的流數(shù)據(jù)以后能處理復(fù)雜的任務(wù)。
2Scala語言
在分布式框架、編碼效率等方面有兼容性較好,所以能構(gòu)建大型的軟件項(xiàng)目,也能直接對(duì)復(fù)雜的數(shù)據(jù)進(jìn)行處理,這在處理上有著極大的優(yōu)勢(shì)。眾所周知scala語言是以JVM形式存在的,由于Scala能對(duì)Java的代碼和類庫(kù)有更好的支持,所以編寫期間最好使用調(diào)用的方式對(duì)Java進(jìn)行語句編寫。由于這種語言的特點(diǎn)不僅能面向?qū)ο?,也能有著函?shù)式的編程語言特性。
Scala作為一種Spark是一種框架開發(fā)語言系統(tǒng),更是一種Spark平臺(tái)核心開發(fā)語言形式,在高效處理對(duì)應(yīng)數(shù)據(jù)平臺(tái)信息的情況下,要求使用的Scala語言編寫兩者能達(dá)到一致,因而可以直接進(jìn)行Spark生態(tài)分布式編程,這就要熟練的對(duì)相關(guān)的scala語言進(jìn)行了解。當(dāng)前我們能了解到Spark支持使用的Sca—la,Java和Python這三種開發(fā)語言通過對(duì)這種類型的語言進(jìn)行應(yīng)用程序的開發(fā),能獲悉到一點(diǎn)spark對(duì)于Scala的支持非常好,只有在對(duì)spark進(jìn)行源代碼的無縫式結(jié)合,能讓相關(guān)的功能調(diào)用達(dá)到最優(yōu)化局面。
3Spark開發(fā)環(huán)境及其分布式集群搭建
在以Spark為背景下開展的數(shù)據(jù)挖掘技術(shù),在對(duì)其進(jìn)行研究的情況下,可以建立良好的Spark集群。既在實(shí)際的應(yīng)用場(chǎng)景中通過使用Spark的集群模式,使用Spark單機(jī)模式的分布應(yīng)用編碼,搭建良好的Spark開發(fā)環(huán)境并對(duì)相關(guān)的集群涉及內(nèi)容進(jìn)行簡(jiǎn)要的系統(tǒng)開發(fā)分析,在構(gòu)筑Hadoop Yarn集群以后,能將所有的Spark集群全部部署到Y(jié)arn上面,以搭建良好的Spark應(yīng)用開發(fā)環(huán)境。
3.1硬件系統(tǒng)要求
在構(gòu)建Spark分布式集群的時(shí)候需要有多臺(tái)物理主機(jī)進(jìn)行配置,這能讓整個(gè)系統(tǒng)的運(yùn)行效果更優(yōu),同時(shí)也能讓運(yùn)行中的兼容性更佳,操作系統(tǒng)最好使用Linus系統(tǒng)。本文在實(shí)驗(yàn)環(huán)境主要是在測(cè)試MavBook Pro主機(jī)上搭建三臺(tái)虛擬機(jī)。我們當(dāng)前所選用的虛擬機(jī)分別是Vmware Fusion最新的7.0版本。
使用三臺(tái)機(jī)器的優(yōu)勢(shì)是:第一,三臺(tái)機(jī)器一起充當(dāng)Master的節(jié)點(diǎn),可以讓另外兩臺(tái)直接充當(dāng)Worker的節(jié)點(diǎn),進(jìn)而能讓模擬的Spark集群環(huán)境更佳。由于實(shí)驗(yàn)環(huán)境均是在單機(jī)使用虛擬軟件搭建的前提下開設(shè)的,所以不會(huì)受到機(jī)器的內(nèi)存或者磁盤空間局限出現(xiàn)集群環(huán)境失敗的狀況,既能使用較少的成本讓Spark集群靈活的運(yùn)行起來。第二,三臺(tái)機(jī)器下對(duì)Spark集群環(huán)境的配置是與多臺(tái)機(jī)器進(jìn)行配置完全不一致的,這就要在必要的情況下對(duì)集群的結(jié)點(diǎn)數(shù)量進(jìn)行增加或者減少。
3.2配合Spark的IDE開發(fā)環(huán)境
Scala語言編寫成的整個(gè)計(jì)算框架中Spark語言是首選語言之一,該語言的應(yīng)用是要選擇好的Scala集成開發(fā)環(huán)境。由于Scala自身攜帶Shell只能對(duì)語言進(jìn)行簡(jiǎn)單的程序編排,但是若是IDEA是現(xiàn)在較為成熟的Scala的語言開發(fā)環(huán)境,故此選用IDEA在單機(jī)下進(jìn)行Spark的應(yīng)用和開發(fā)顯得尤為重要。
IDEA的全稱是IntelliJ IDEA,該集成開發(fā)環(huán)境能支持多個(gè)語言編程環(huán)境,相較于傳統(tǒng)的編程環(huán)境,該語言環(huán)境能更好地支持IDE。無論是從代碼的提示還是代碼助手的角度考慮問題,都能從框架支持的角度對(duì)問題進(jìn)行思考,IDEA在具體使用時(shí)能生產(chǎn)大于代碼幾倍的緩存文件,由于這些文件均要被IDEA進(jìn)行讀寫,所以會(huì)占用大量的I/O,進(jìn)而也能提高緩存文件的性能。
4基于Spark的分布協(xié)同過濾推薦實(shí)現(xiàn)
4.1MLIib算法庫(kù)
Spark十分重視機(jī)器學(xué)習(xí)方面的內(nèi)容,所以有以下幾方面注意事項(xiàng):
由于機(jī)器算法具有很多步驟,所以在迭代計(jì)算的時(shí)候,任何一次計(jì)算都要寫人磁盤中等待任務(wù)啟動(dòng),但這會(huì)在使用時(shí)消耗大量CPU。基于此,具體使用Spark的時(shí)候,部分工作可以直接存放到內(nèi)存中進(jìn)行運(yùn)行,將迭代部分計(jì)算任務(wù)全部存放到內(nèi)存中,能讓迭代的計(jì)算效率得到提升,可以在必要的情況下操作磁盤和網(wǎng)絡(luò)??傊?,Spark十分擅長(zhǎng)迭代計(jì)算,也能成為分布式的機(jī)器學(xué)習(xí)平臺(tái)。第二,從通信角度思考問題,Spark極為出色和高效,通訊的效率也很高。當(dāng)開展分布式機(jī)器算法學(xué)習(xí)期間,部分資源均集中在不同的集群節(jié)點(diǎn)上,高效的進(jìn)行通信效率能讓分布式算法的運(yùn)行效果更佳。
4.2協(xié)同過濾算法
協(xié)同過濾算法是大家是在使用時(shí)選擇一個(gè)靠譜的想法,并將這種想法提供給用戶。簡(jiǎn)單介紹是如果一個(gè)人想要去看電影,但是她不知道應(yīng)該選擇哪部電影,或者哪部電影更好一些,那么她的做法一定是詢問身邊的人,希望得到他們的推薦亦或是上網(wǎng)查看影評(píng)進(jìn)行賽選。
4.2.1系統(tǒng)過濾綜述
現(xiàn)在所有的用戶中選擇個(gè)興趣和愛好類似的用戶,結(jié)合他們的喜愛選擇物品,并將其組織在前一起形成一個(gè)新的集合或者序列。這些用戶我們能直接將其定義為鄰居,但是這期間最核心的問題是如何對(duì)用戶之間是否存有相似的聘問,或者如何對(duì)符合條件的用戶進(jìn)行有效的組織和使用。
4.2.2協(xié)同過濾核心思想
協(xié)同過濾的核心思想需要以下三個(gè)步驟實(shí)現(xiàn):第一,收集用戶的偏好;第二,分析用戶使用的物品相似度;第三,根據(jù)計(jì)算進(jìn)行推薦。
系統(tǒng)推薦的效果關(guān)鍵因素是如何對(duì)用戶的喜好進(jìn)行整理。由于不同的用戶提供的偏好方式不同,且會(huì)受到場(chǎng)景的影響。一般場(chǎng)景下,應(yīng)該提取一種用戶系統(tǒng),根據(jù)用戶提出的行為做分組,有兩種不同的分組方式:1)根據(jù)用戶的不同行為進(jìn)行分組;2)根據(jù)不同的行為對(duì)用戶的喜好進(jìn)行分組,且對(duì)它們進(jìn)行加權(quán)處理。實(shí)現(xiàn)上述數(shù)據(jù)行為收集以后,要做好數(shù)據(jù)的預(yù)處理。