畢業(yè)設(shè)計(jì)-基于測(cè)量的在線視頻流媒體質(zhì)量因素分析_第1頁(yè)
已閱讀1頁(yè),還剩76頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  畢業(yè)設(shè)計(jì)(論文)</b></p><p>  中文題目:基于測(cè)量的在線視頻流媒體質(zhì)量因素分析 </p><p>  英文題目:Using Spark to analyze factors for </p><p>  the quality of video streaming</p><

2、;p>  2014 年 6 月 4 日</p><p>  題 目: 基于測(cè)量的在線視頻流媒體質(zhì)量因素分析 </p><p>  學(xué)院:電信學(xué)院專業(yè):自動(dòng)化(鐵道信號(hào))</p><p>  學(xué)生姓名: 學(xué)號(hào): &l

3、t;/p><p>  指導(dǎo)教師建議成績(jī): </p><p>  評(píng)閱教師建議成績(jī): </p><p>  答辯小組建議成績(jī): </p><p><b>  答辯委員會(huì)意見(jiàn):</b></p><

4、p><b>  最終成績(jī):</b></p><p>  主管教學(xué)副院長(zhǎng)或答辯委員會(huì)主席簽字:</p><p>  年 月 日</p><p>  題 目: 基于測(cè)量的在線視頻流媒體質(zhì)量因素分析 </p><p>

5、;  適合專業(yè): 自動(dòng)化 自動(dòng)化(鐵道信號(hào)) </p><p>  指導(dǎo)教師(簽名): 郭宇春 提交日期: 2014 年 3 月 2 日</p><p>  學(xué)院:電信 專業(yè):自動(dòng)化(鐵道信號(hào)) </p><p>  學(xué)生姓名: 學(xué)號(hào): </p><p>  

6、題 目: 基于測(cè)量的在線視頻流媒體質(zhì)量因素分析 </p><p>  學(xué)院:電子信息工程學(xué)院 專業(yè):自動(dòng)化(鐵道信號(hào)) </p><p>  學(xué)生姓名: 學(xué)號(hào): </p><p>  指導(dǎo)教師簽名: 審核日期:

7、 年 月 日</p><p>  題 目: 基于測(cè)量的在線視頻流媒體質(zhì)量因素分析 </p><p>  學(xué)院:電子信息工程學(xué)院 專業(yè):自動(dòng)化(鐵道信號(hào)) </p><p>  學(xué)生姓名: 學(xué)號(hào): </p><p>  總成績(jī):_______指導(dǎo)教師 (簽名)

8、:_________日期:______年 月 日</p><p>  題 目: 基于測(cè)量的在線視頻流媒體質(zhì)量因素分析 </p><p>  學(xué)院:電子信息工程學(xué)院 專業(yè):自動(dòng)化(鐵道信號(hào)) </p><p>  學(xué)生姓名: 學(xué)號(hào): </p><p>  評(píng)定成績(jī):

9、 評(píng)閱人: 日期: 年 月 日</p><p>  題 目: 基于測(cè)量的在線視頻流媒體質(zhì)量因素分析 </p><p>  學(xué)院:電子信息工程學(xué)院 專業(yè):自動(dòng)化(鐵道信號(hào)) </p><p>  學(xué)生姓名: 學(xué)號(hào): </p>&l

10、t;p>  評(píng)定成績(jī): 答辯組長(zhǎng): 日期: 年 月 日</p><p><b>  中文摘要</b></p><p>  Spark是一個(gè)針對(duì)超大數(shù)據(jù)集合的低延遲的集群分布式計(jì)算系統(tǒng),Spark兼容于Hadoop 數(shù)據(jù)源,但是比MapReducer快100倍左右,特別適合于機(jī)器學(xué)習(xí)處理。Spark還在萌芽

11、階段,尚未高速發(fā)展,隨著Spark1.0.0 版本的發(fā)布,標(biāo)志著apache的頂級(jí)開(kāi)源項(xiàng)目Spark作為大數(shù)據(jù)的新貴,越來(lái)越多的受到IT業(yè)界的極大關(guān)注,將被廣泛應(yīng)用。</p><p>  搭載實(shí)現(xiàn)Spark平臺(tái)并應(yīng)用Spark來(lái)研究處理分析在線視頻流媒體質(zhì)量因素。</p><p>  論文介紹了課題的相關(guān)研究背景知識(shí),并且對(duì)Spark的組成及原理進(jìn)行了詳細(xì)地介紹和研究。根據(jù)實(shí)驗(yàn)的需要,完成

12、了平臺(tái)的總體配置,對(duì)其性能進(jìn)行了驗(yàn)證,研究其機(jī)器學(xué)習(xí)庫(kù)。首先介紹在業(yè)界獲得普遍認(rèn)同的分布式文件系統(tǒng)的用戶需求和架構(gòu)模型.然后針對(duì)RDD的體系架構(gòu)進(jìn)行介紹,最后通過(guò)KMeans機(jī)器學(xué)習(xí)算法分析了用戶在流媒體視頻觀看時(shí)間與緩沖次數(shù)的關(guān)系,總結(jié)了流媒體相關(guān)因素的關(guān)系。</p><p>  實(shí)驗(yàn)采用的平臺(tái)是Linux的Ubuntu12.04LTS版本,應(yīng)用的是Apache Spark平臺(tái)。系統(tǒng)所有的編寫(xiě)、調(diào)試與測(cè)試都在此

13、實(shí)驗(yàn)平臺(tái)下進(jìn)行。</p><p>  關(guān)鍵詞:Spark;機(jī)器學(xué)習(xí);KMeans;數(shù)據(jù)挖掘;視頻流媒體</p><p><b>  Abstract</b></p><p>  Apache Spark is a fast and general engine for large-scale data processing.Which run

14、programs up to 100x faster than Hadoop MapReduce in memory,or 10x faster on disk.Spark is easy to use,writing applications quickly in Java, Scala or Python.More and more IT engineers pay attention to it,and it is being w

15、idely used in famous companies such as Alibaba Taobao,Amazon,Baidu,Netease,Sohu,Tencent,Yahoo!.</p><p>  Using machine learning for data mining analyzing the relationship between buffer and time of user view

16、ing by Spark.</p><p>  Introducing the related background knowledge of Spark and principle of Spark.According to the needs of the experiment,building the platform of Spark.Secondly,introducing the architect

17、ure model of RDD.Then using the Kmeans algorithm for analyzing the relationship between buffer and time of user viewing through machine learning.In the end,summarizing the relationships between the related factors of str

18、eaming video. </p><p>  The experimental platform used is the Linux version of Ubuntu12.04 LTS and Apache Spark platform.All the writing,debugging and testing is in this platform.</p><p>  Key w

19、ords:spark; machine learning; K-means; data mining; streaming video</p><p><b>  目錄</b></p><p><b>  目錄1</b></p><p><b>  第一章 前言3</b></p>

20、<p>  1.1 課題研究背景和意義3</p><p>  1.2 課題研究?jī)?nèi)容和本文的主要工作方法5</p><p>  1.3 論文組織結(jié)構(gòu)5</p><p>  第二章 Spark開(kāi)發(fā)平臺(tái)概述6</p><p>  2.1 Spark的背景6</p><p>  2.1.1 Sp

21、ark的介紹6</p><p>  2.1.2 Spark的適用場(chǎng)景8</p><p>  2.1.3 在業(yè)界的使用8</p><p>  2.1.4 Spark與Hadoop對(duì)比8</p><p>  2.2 RDD框架概述9</p><p>  2.2.1 RDD介紹9</p>

22、<p>  2.2.2 RDD的主要?jiǎng)?chuàng)建方式9</p><p>  2.2.3 RDD的特點(diǎn)10</p><p>  2.2.4 RDD的好處10</p><p>  2.2.5 RDD的存儲(chǔ)與分區(qū)10</p><p>  2.2.6 容錯(cuò)性10</p><p>  2.2.7可用性。1

23、0</p><p>  2.2.8 RDD的內(nèi)部表示11</p><p>  2.3 Local模式和Mesos模式11</p><p>  2.4 作用于RDD的各種操作11</p><p>  2.5 Spark的編程模型12</p><p>  第三章 Spark平臺(tái)搭建13</p>

24、;<p>  3.1 安裝Ubuntu Linux操作系統(tǒng)13</p><p>  3.2 配置安裝Java JDK13</p><p>  3.2.1 下載jdk13</p><p>  3.2.2 安裝jdk14</p><p>  3.2.3 配置環(huán)境變量14</p><p> 

25、 3.2.4 檢查是否安裝成功14</p><p>  3.3 搭建Hadoop環(huán)境15</p><p>  3.3.1 下載安裝Hadoop15</p><p>  3.3.2 配置hadoop15</p><p>  3.3.3 安裝rsync和ssh16</p><p>  3.3.4 配置

26、ssh免登錄16</p><p>  3.3.5 啟動(dòng)hadoop17</p><p>  3.4 安裝Scala18</p><p>  3.5 部署Spark20</p><p>  3.5.1 下載spark-1.0.0源碼20</p><p>  3.5.2 解壓編譯20</p>

27、;<p>  3.5.3 設(shè)置SPARK_HOME環(huán)境變量20</p><p>  3.5.4 驗(yàn)證spark環(huán)境21</p><p>  第四章 機(jī)器學(xué)習(xí)算法模型22</p><p>  4.1 聚類分析23</p><p>  4.2 K-means algorithm23</p><

28、p>  4.2.1 算法描述24</p><p>  4.2.2 算法的性能分析24</p><p>  第五章 實(shí)驗(yàn)處理與實(shí)驗(yàn)分析25</p><p>  5.1 預(yù)處理待測(cè)量的數(shù)據(jù)集26</p><p>  5.2 待測(cè)量數(shù)據(jù)集的條數(shù)26</p><p>  5.3 運(yùn)用KMeans算法

29、27</p><p>  5.3.1 下載NumPy27</p><p>  5.3.2 Kmeans算法的python代碼28</p><p>  5.3.3 在Spark中運(yùn)行29</p><p>  5.4 聚類效果及分析30</p><p>  5.4.1 Kmeans中k值的選取30&l

30、t;/p><p>  5.4.2 本次實(shí)驗(yàn)結(jié)果分析32</p><p>  5.5 結(jié)論33</p><p>  第六章 結(jié)束語(yǔ)34</p><p><b>  參考文獻(xiàn)34</b></p><p><b>  附錄36</b></p><p

31、><b>  第一章 前言</b></p><p>  1.1 課題研究背景和意義</p><p>  流媒體(Video Streaming)是指在Internet中使用流式傳輸技術(shù)的連續(xù)時(shí)基媒體,視頻流媒體(Media Streaming)業(yè)務(wù)是指支持多媒體數(shù)據(jù)流通過(guò)網(wǎng)絡(luò)從服務(wù)器向客戶機(jī)傳送,接收方邊接收邊播放的技術(shù)。與傳統(tǒng)的先下載后播放的做法相比,流媒

32、體技術(shù)有很大的優(yōu)勢(shì),如實(shí)時(shí)性強(qiáng),有利于保護(hù)版權(quán)等。隨著計(jì)算機(jī)網(wǎng)絡(luò)和多媒體技術(shù)的不斷發(fā)展,流媒體直播技術(shù)的應(yīng)用越來(lái)越廣泛,傳統(tǒng)的Flash早已被視頻流媒體所取代。近年來(lái),無(wú)線網(wǎng)絡(luò)的飛速發(fā)展和帶寬的迅速提高,為流媒體技術(shù)在無(wú)線網(wǎng)絡(luò)中的應(yīng)用奠定了堅(jiān)實(shí)的基礎(chǔ)。</p><p>  在流媒體的背后進(jìn)行著的是對(duì)大數(shù)據(jù)的挖掘,數(shù)據(jù)挖掘一般是指從大量的數(shù)據(jù)中通過(guò)算法搜索隱藏于其中信息的過(guò)程。數(shù)據(jù)挖掘通常與計(jì)算機(jī)科學(xué)有關(guān),并通過(guò)統(tǒng)

33、計(jì)、在線分析處理、情報(bào)檢索、機(jī)器學(xué)習(xí)、專家系統(tǒng)和模式識(shí)別等諸多方法來(lái)實(shí)現(xiàn)上述目標(biāo)。</p><p>  大數(shù)據(jù),一個(gè)似乎已經(jīng)被媒體傳播的過(guò)于泛濫的詞匯,的的確確又在逐漸影響和改變著我們的生活。也許有人認(rèn)為大數(shù)據(jù)在中國(guó)仍然只是噱頭,但在當(dāng)前中國(guó)互聯(lián)網(wǎng)領(lǐng)域,大數(shù)據(jù)以及大數(shù)據(jù)所催生出來(lái)的生產(chǎn)力正在潛移默化地推動(dòng)業(yè)務(wù)發(fā)展,并為廣大中國(guó)網(wǎng)民提供更加優(yōu)秀的服務(wù)。</p><p>  提到大數(shù)據(jù),自然不

34、能不提Hadoop[1]。HDFS已然成為大數(shù)據(jù)公認(rèn)的存儲(chǔ),而MapReduce作為其搭配的數(shù)據(jù)處理框架在大數(shù)據(jù)發(fā)展的早期表現(xiàn)出了重大的價(jià)值??捎捎谄湓O(shè)計(jì)上的約束MapReduce只適合處理離線計(jì)算,其在實(shí)時(shí)性上仍有較大的不足,隨著業(yè)務(wù)的發(fā)展,業(yè)界對(duì)實(shí)時(shí)性和準(zhǔn)確性有更多的需求,很明顯單純依靠MapReduce框架已經(jīng)不能滿足業(yè)務(wù)的需求了。Hadoop中的數(shù)據(jù)傳送與共享,串行方式、復(fù)制以及磁盤IO等因素使得Hadoop集群在低延遲、實(shí)時(shí)計(jì)

35、算方面表現(xiàn)有待改進(jìn)。</p><p>  優(yōu)酷土豆作為國(guó)內(nèi)最大的視頻網(wǎng)站,和國(guó)內(nèi)其他互聯(lián)網(wǎng)巨頭一樣,率先看到大數(shù)據(jù)對(duì)公司業(yè)務(wù)的價(jià)值,早在2009年就開(kāi)始使用Hadoop集群,隨著這些年業(yè)務(wù)迅猛發(fā)展,優(yōu)酷土豆又率先嘗試了仍處于大數(shù)據(jù)前沿領(lǐng)域的Spark內(nèi)存計(jì)算框架,很好地解決了機(jī)器學(xué)習(xí)和圖計(jì)算多次迭代的瓶頸問(wèn)題,使得公司大數(shù)據(jù)分析更加完善。在今天,數(shù)據(jù)處理要求非常快,作為Hadoop的替代者,Spark性能比Map

36、Reduce提升很多,使其成為一大熱門開(kāi)源項(xiàng)目。</p><p>  Apache Spark是新推出的一個(gè)高效的分布式計(jì)算系統(tǒng),是一個(gè)通用的并行計(jì)算框架,發(fā)源于美國(guó)加州大學(xué)伯克利分校AMPLab[2]的集群計(jì)算平臺(tái)。Databricks,Cloudera都已決定支持Spark,Spark被認(rèn)為是大數(shù)據(jù)領(lǐng)域的大事情,且很有可能成為大數(shù)據(jù)領(lǐng)域的下一個(gè)大家伙。</p><p>  Spark內(nèi)

37、存計(jì)算框架適合各種迭代算法和交互式數(shù)據(jù)分析,能夠提升大數(shù)據(jù)處理的實(shí)時(shí)性和準(zhǔn)確性。而MapReduce處理框架則擅長(zhǎng)復(fù)雜的批處理操作、登陸過(guò)濾、ETL(數(shù)據(jù)抽取、轉(zhuǎn)換、加載)、網(wǎng)頁(yè)索引等應(yīng)用,MapReduce在低延遲業(yè)務(wù)上一直被人所詬病。</p><p>  作為一個(gè)基于內(nèi)存in-memory數(shù)據(jù)處理平臺(tái),兼容于Hadoop 數(shù)據(jù)源但是比Hadoop MapReduce運(yùn)行得快得多。Spark迭代計(jì)算的主要實(shí)現(xiàn)思

38、想就是RDD,把所有計(jì)算的數(shù)據(jù)保存在分布式的內(nèi)存中。RDD 是分布在一組節(jié)點(diǎn)中的只讀對(duì)象集合。這些集合是彈性的,如果數(shù)據(jù)集一部分丟失,則可以對(duì)它們進(jìn)行重建。迭代計(jì)算通常情況下都是對(duì)同一個(gè)數(shù)據(jù)集做反復(fù)的迭代計(jì)算,數(shù)據(jù)在內(nèi)存中將大大提升IO操作。這也是Spark涉及的核心:內(nèi)存計(jì)算。Spark是基于內(nèi)存的迭代計(jì)算框架,適用于需要多次操作特定數(shù)據(jù)集的應(yīng)用場(chǎng)合。需要反復(fù)操作的次數(shù)越多,所需讀取的數(shù)據(jù)量越大,受益越大,數(shù)據(jù)量小但是計(jì)算密集度較大的

39、場(chǎng)合,受益就相對(duì)較小。</p><p>  雖然 Spark 與 Hadoop 有相似之處,但它提供了具有有用差異的一個(gè)新的集群計(jì)算框架。首先,Spark 是為集群計(jì)算中的特定類型的工作負(fù)載而設(shè)計(jì),即那些在并行操作之間重用工作數(shù)據(jù)集(比如機(jī)器學(xué)習(xí)算法)的工作負(fù)載。為了優(yōu)化這些類型的工作負(fù)載,Spark 引進(jìn)了內(nèi)存集群計(jì)算的概念,可在內(nèi)存集群計(jì)算中將數(shù)據(jù)集緩存在內(nèi)存中,以縮短訪問(wèn)延遲。</p><

40、;p>  RDD能夠從磁盤讀取然后保持在內(nèi)存中,提高了性能,這和Hadoop大部分基于磁盤的速度要快多。Spark也可以直接對(duì)HDFS進(jìn)行數(shù)據(jù)的讀寫(xiě)。Spark可以與MapReduce運(yùn)行于同集群中,共享存儲(chǔ)資源與計(jì)算。</p><p>  本實(shí)驗(yàn)選擇Spark是因?yàn)閭鹘y(tǒng)的并行計(jì)算模型無(wú)法有效的解決迭代計(jì)算(iterative)和交互式計(jì)算(interactive);而Spark的使命便是解決這兩個(gè)問(wèn)題,這

41、也是它存在的價(jià)值和理由。因此特別適合于機(jī)器學(xué)習(xí)處理來(lái)分析大數(shù)據(jù)。</p><p>  本文著眼于聚類的機(jī)器學(xué)習(xí)方法應(yīng)用分布式系統(tǒng)處理挖掘大數(shù)據(jù),通過(guò)spark對(duì)流媒體質(zhì)量因素進(jìn)行測(cè)量和分析,關(guān)聯(lián)分析在不同技術(shù)條件和環(huán)境下流媒體的質(zhì)量特征與因素,得出不同元素如媒體內(nèi)容、終端類型、地理位置、觀看時(shí)間等對(duì)視頻流媒體質(zhì)量影響的關(guān)系和程度。</p><p>  1.2 課題研究?jī)?nèi)容和本文的主要工作

42、方法</p><p>  本畢業(yè)設(shè)計(jì)主要任務(wù)是搭載實(shí)現(xiàn)Spark平臺(tái)并應(yīng)用Spark來(lái)研究處理分析在線視頻流媒體質(zhì)量因素。包括:</p><p>  (1) 對(duì)Spark平臺(tái)下的RDD(彈性分布式數(shù)據(jù)集),機(jī)器學(xué)習(xí)算法KMeans以及相關(guān)的機(jī)制進(jìn)行了分析和研究,這為運(yùn)用機(jī)器學(xué)習(xí)算法進(jìn)行分析打好了基礎(chǔ)。</p><p>  (2) 通過(guò)安裝hadoop、jdk、sca

43、la、spark,并配置環(huán)境變量,搭建完成Spark平臺(tái)。</p><p>  (3) 對(duì)數(shù)據(jù)集進(jìn)行了預(yù)處理。</p><p>  (4) 采用機(jī)器學(xué)習(xí)算法對(duì)預(yù)處理的數(shù)據(jù)集進(jìn)行計(jì)算。</p><p>  (5) 從理論上分析了實(shí)驗(yàn)結(jié)果。</p><p>  1.3 論文組織結(jié)構(gòu)</p><p>  第一章闡述了課題

44、的背景及意義。介紹了分布式文件系統(tǒng)。提出了本文研究的主要內(nèi)容。</p><p>  第二章詳細(xì)介紹了Spark開(kāi)發(fā)平臺(tái),對(duì)RDD的相關(guān)特性,框架,機(jī)制進(jìn)行了深入的討論。</p><p>  第三章描述了平臺(tái)的搭載過(guò)程并通過(guò)運(yùn)行例子驗(yàn)證其有效性。</p><p>  第四章描述了機(jī)器學(xué)習(xí)算法中的聚類模型KMeans。</p><p>  第五章

45、通過(guò)處理分析數(shù)據(jù),得出不同數(shù)據(jù)因素之間的關(guān)系。</p><p>  第六章為全文總結(jié)。列舉了本論文的研究成果,并分析了研究工作的不足,展望了進(jìn)一步研究的內(nèi)容和方向。</p><p>  第二章 Spark開(kāi)發(fā)平臺(tái)概述</p><p>  2.1 Spark的背景</p><p>  2.1.1 Spark的介紹</p>&

46、lt;p>  Spark是一種與Hadoop相似的開(kāi)源集群計(jì)算環(huán)境,在性能和迭代計(jì)算上很有看點(diǎn),現(xiàn)在是Apache的頂級(jí)孵化項(xiàng)目。Spark由加州大學(xué)伯克利分校AMP實(shí)驗(yàn)室(Algorithms,Machines,and People Lab)開(kāi)發(fā),可用來(lái)構(gòu)建大型的、低延遲的數(shù)據(jù)分析應(yīng)用程序。Spark啟用了內(nèi)存分布數(shù)據(jù)集,除了能夠提供交互式查詢外,它還可以優(yōu)化迭代工作負(fù)載。Spark是在 Scala語(yǔ)言中實(shí)現(xiàn)的,它將Scala用

47、作其應(yīng)用程序框架,而Scala的語(yǔ)言特點(diǎn)也鑄就了大部分Spark的成功。項(xiàng)目的core部分的代碼只有63個(gè)Scala文件,非常短小精悍。與 Hadoop不同,Spark和Scala能夠緊密集成,其中的Scala可以像操作本地集合對(duì)象一樣輕松地操作分布式數(shù)據(jù)集。盡管創(chuàng)建Spark是為了支持分布式數(shù)據(jù)集上的迭代作業(yè),但是實(shí)際上它是對(duì)Hadoop的補(bǔ)充,可以在Hadoop文件系統(tǒng)中并行運(yùn)行。通過(guò)名為 Mesos的第三方集群框架可以支持此行為。

48、Spark可用來(lái)構(gòu)建大型的、低延遲的數(shù)據(jù)分析應(yīng)用程序。</p><p>  Spark和Hadoop MapReduce類似,由Master(類似于MapReduce的Jobtracker)和Workers(Spark的Slave工作節(jié)點(diǎn))組成。用戶編寫(xiě)的Spark程序被稱為Driver程序,Driver程序會(huì)連接master并定義了對(duì)各RDD的轉(zhuǎn)換與操作,這些驅(qū)動(dòng)程序可實(shí)現(xiàn)在單一節(jié)點(diǎn)上執(zhí)行的操作或在一組節(jié)點(diǎn)上并

49、行執(zhí)行的操作。與 Hadoop 類似,Spark 支持單節(jié)點(diǎn)集群或多節(jié)點(diǎn)集群。對(duì)于多節(jié)點(diǎn)操作,Spark 依賴于 Mesos 集群管理器。Mesos 為分布式應(yīng)用程序的資源共享和隔離提供了一個(gè)有效平臺(tái)。該設(shè)置充許 Spark 與 Hadoop 共存于節(jié)點(diǎn)的一個(gè)共享池中。而對(duì)RDD的轉(zhuǎn)換與操作通過(guò)Scala閉包(字面量函數(shù))來(lái)表示,Scala使用Java對(duì)象來(lái)表示閉包且都是可序列化的,以此把對(duì)RDD的閉包操作發(fā)送到各Workers節(jié)點(diǎn)。

50、Workers存儲(chǔ)著數(shù)據(jù)分塊和享有集群內(nèi)存,是運(yùn)行在工作節(jié)點(diǎn)上的守護(hù)進(jìn)程,當(dāng)它收到對(duì)RDD的操作時(shí),根據(jù)數(shù)據(jù)分片信息進(jìn)行本地化數(shù)據(jù)操作,生成新的數(shù)據(jù)分片、返回結(jié)果或把RDD寫(xiě)入存儲(chǔ)系統(tǒng)。 </p><p>  Spark是開(kāi)源的類Hadoop MapReduce的通用的并行計(jì)算框架,Spark基于map reduce算法實(shí)現(xiàn)的分布式計(jì)算,擁有Hadoop MapReduce所具有的優(yōu)點(diǎn);但不同于MapReduce

51、的是Job中間輸出和結(jié)果可以保存在內(nèi)存中,從而不再需要讀寫(xiě)HDFS。除了能夠提供交互式查詢外,它還可以優(yōu)化迭代工作負(fù)載。Spark的迭代,內(nèi)存運(yùn)算能力以及交互式計(jì)算,能更好地適用于數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)等需要迭代的map reduce的算法。其架構(gòu)如圖2.1.1所示。</p><p><b>  圖2.1.1</b></p><p>  2.1.2 Spark的適用場(chǎng)景

52、</p><p>  Spark是基于內(nèi)存的迭代計(jì)算框架,適用于需要多次操作特定數(shù)據(jù)集的應(yīng)用場(chǎng)合。需要反復(fù)操作的次數(shù)越多,所需讀取的數(shù)據(jù)量越大,受益越大,數(shù)據(jù)量小但是計(jì)算密集度較大的場(chǎng)合,受益就相對(duì)較小。</p><p>  由于RDD的特性,Spark不適用那種異步細(xì)粒度更新?tīng)顟B(tài)的應(yīng)用,例如web服務(wù)的存儲(chǔ)或者是增量的web爬蟲(chóng)和索引。就是對(duì)于那種增量修改的應(yīng)用模型不適合。總的來(lái)說(shuō)Spa

53、rk的適用面比較廣泛且比較通用。</p><p>  2.1.3 在業(yè)界的使用</p><p>  Spark項(xiàng)目在2009年啟動(dòng),2010年開(kāi)源, 現(xiàn)在使用的有:Berkeley、Princeton、Klout、Foursquare、Conviva、Quantifind、Yahoo!、阿里巴巴、Cloudera、Databricks、IBM、英特爾、淘寶等[3],豆瓣也在使用Spark

54、的python克隆版Dpark。</p><p>  2.1.4 Spark與Hadoop對(duì)比</p><p>  Spark提供的數(shù)據(jù)集操作類型有很多種,不像Hadoop只提供了Map和Reduce兩種操作。比如map,filter,flatMap,sample,groupByKey, union, join, cogroup, reduceByKey, mapValues, sort

55、, partionBy等多種操作類型,Spark把這些操作稱為Transformations。同時(shí)還提供Count, collect, reduce, lookup, save等多種actions操作。</p><p>  這些多種多樣的數(shù)據(jù)集操作類型,給給開(kāi)發(fā)上層應(yīng)用的用戶提供了方便。各個(gè)處理節(jié)點(diǎn)之間的通信模型不再像Hadoop那樣就是唯一的Data Shuffle一種模式。用戶可以命名,物化,控制中間結(jié)果的存

56、儲(chǔ)、分區(qū)等??梢哉f(shuō)編程模型比Hadoop更靈活。</p><p><b>  圖2.1.4</b></p><p>  2.2 RDD框架概述</p><p>  2.2.1 RDD介紹</p><p>  彈性分布數(shù)據(jù)集Resilient Distributed Dataset(RDD)是Spark的最基本抽象,是

57、對(duì)分布式內(nèi)存的抽象使用,實(shí)現(xiàn)了以操作本地集合的方式來(lái)操作分布式數(shù)據(jù)集的抽象實(shí)現(xiàn)。RDD是Spark最核心的東西,也是設(shè)計(jì)精華所在。將它理解為一個(gè)大的集合,將所有數(shù)據(jù)都加載到內(nèi)存中,方便進(jìn)行多次重用。第一,它是分布式的,可以分布在多臺(tái)機(jī)器上,進(jìn)行計(jì)算。第二,它是彈性的,在計(jì)算處理過(guò)程中,機(jī)器的內(nèi)存不夠時(shí),它會(huì)和硬盤進(jìn)行數(shù)據(jù)交換,某種程度上會(huì)減低性能,但是可以確保計(jì)算得以繼續(xù)進(jìn)行。它表示已被分區(qū),不可變的并能夠被并行操作的數(shù)據(jù)集合,不同的數(shù)

58、據(jù)集格式對(duì)應(yīng)不同的RDD實(shí)現(xiàn)。RDD必須是可序列化的。RDD可以cache到內(nèi)存中,每次對(duì)RDD數(shù)據(jù)集的操作之后的結(jié)果,都可以存放到內(nèi)存中,下一個(gè)操作可以直接從內(nèi)存中輸入,省去了MapReduce大量的磁盤IO操作。這對(duì)于迭代運(yùn)算比較常見(jiàn)的機(jī)器學(xué)習(xí)算法, 交互式數(shù)據(jù)挖掘來(lái)說(shuō),效率提升比較大。</p><p>  2.2.2 RDD的主要?jiǎng)?chuàng)建方式</p><p>  1. 從Hadoop文

59、件系統(tǒng)(或與Hadoop兼容的其它存儲(chǔ)系統(tǒng))輸入(例如HDFS)創(chuàng)建。</p><p>  2. 通過(guò)已存在的RDD轉(zhuǎn)換得到新RDD。</p><p>  2.2.3 RDD的特點(diǎn)</p><p>  1. 它是在集群節(jié)點(diǎn)上的不可變的、已分區(qū)的集合對(duì)象。 </p><p>  2. 通過(guò)并行轉(zhuǎn)換的方式來(lái)創(chuàng)建如(map, filter, jo

60、in, etc)。 </p><p>  3. 失敗自動(dòng)重建。 </p><p>  4. 可以控制存儲(chǔ)級(jí)別(內(nèi)存、磁盤等)來(lái)進(jìn)行重用。 </p><p>  5. 必須是可序列化的。 </p><p>  6. 是靜態(tài)類型的。 </p><p>  2.2.4 RDD的好處</p><p>

61、  1. RDD只能從持久存儲(chǔ)或通過(guò)Transformations操作產(chǎn)生,相比于分布式共享內(nèi)存(DSM)可以更高效實(shí)現(xiàn)容錯(cuò),對(duì)于丟失部分?jǐn)?shù)據(jù)分區(qū)只需根據(jù)它的lineage就可重新計(jì)算出來(lái),而不需要做特定的Checkpoint。 </p><p>  2. RDD的不變性,可以實(shí)現(xiàn)類Hadoop MapReduce的推測(cè)式執(zhí)行。 </p><p>  3. RDD的數(shù)據(jù)分區(qū)特性,可以通過(guò)數(shù)

62、據(jù)的本地性來(lái)提高性能,這與Hadoop MapReduce是一樣的。 </p><p>  4. RDD都是可序列化的,在內(nèi)存不足時(shí)可自動(dòng)降級(jí)為磁盤存儲(chǔ),把RDD存儲(chǔ)于磁盤上,這時(shí)性能會(huì)有大的下降但不會(huì)差于現(xiàn)在的MapReduce。 </p><p>  2.2.5 RDD的存儲(chǔ)與分區(qū)</p><p>  1. 用戶可以選擇不同的存儲(chǔ)級(jí)別存儲(chǔ)RDD以便重用。 &l

63、t;/p><p>  2. 當(dāng)前RDD默認(rèn)是存儲(chǔ)于內(nèi)存,但當(dāng)內(nèi)存不足時(shí),RDD會(huì)spill到disk。 </p><p>  3. RDD在需要進(jìn)行分區(qū)把數(shù)據(jù)分布于集群中時(shí)會(huì)根據(jù)每條記錄Key進(jìn)行分區(qū)(如Hash 分區(qū)),以此保證兩個(gè)數(shù)據(jù)集在Join時(shí)能高效。</p><p>  2.2.6 容錯(cuò)性</p><p>  對(duì)于流式計(jì)算來(lái)說(shuō),容錯(cuò)性

64、至關(guān)重要。首先我們要明確一下Spark中RDD的容錯(cuò)機(jī)制。每一個(gè)RDD都是一個(gè)不可變的分布式可重算 的數(shù)據(jù)集,其記錄著確定性的操作繼承關(guān)系(lineage),所以只要輸入數(shù)據(jù)是可容錯(cuò)的,那么任意一個(gè)RDD的分區(qū)(Partition)出錯(cuò)或不可 用,都是可以利用原始輸入數(shù)據(jù)通過(guò)轉(zhuǎn)換操作而重新算出的。 </p><p><b>  2.2.7可用性。</b></p><p&g

65、t;  Spark通過(guò)提供豐富的Scala, Java,Python API及交互式Shell來(lái)提高可用性。</p><p>  2.2.8 RDD的內(nèi)部表示</p><p>  在RDD的內(nèi)部實(shí)現(xiàn)中每個(gè)RDD都可以使用5個(gè)方面的特性來(lái)表示:</p><p>  1. 分區(qū)列表(數(shù)據(jù)塊列表) </p><p>  2. 計(jì)算每個(gè)分片的函數(shù)(

66、根據(jù)父RDD計(jì)算出此RDD) </p><p>  3. 對(duì)父RDD的依賴列表 </p><p>  4. 對(duì)key-value RDD的Partitioner </p><p>  5. 每個(gè)數(shù)據(jù)分片的預(yù)定義地址列表(如HDFS上的數(shù)據(jù)塊的地址)</p><p>  2.3 Local模式和Mesos模式</p><p

67、>  Spark支持Local調(diào)用和Mesos集群兩種模式,在Spark上開(kāi)發(fā)算法程序,可以在本地模式調(diào)試成功后,直接改用Mesos集群運(yùn)行,除了文件的保存位置需要考慮以外,算法理論上不需要做任何修改。</p><p>  Spark的本地模式支持多線程,有一定的單機(jī)并發(fā)處理能力。但是不算很強(qiáng)勁。本地模式可以保存結(jié)果在本地或者分布式文件系統(tǒng),而Mesos模式一定需要保存在分布式或者共享文件系統(tǒng)。</p

68、><p>  2.4 作用于RDD的各種操作</p><p>  作用于RDD的各種操作,有兩種類型的動(dòng)作轉(zhuǎn)換(Transformations)和動(dòng)作(Actions)。</p><p><b>  它們本質(zhì)區(qū)別是:</b></p><p>  Transformation返回值還是一個(gè)RDD。它使用了鏈?zhǔn)秸{(diào)用的設(shè)計(jì)模式,

69、對(duì)一個(gè)RDD進(jìn)行計(jì)算后,變換成另外一個(gè)RDD,然后這個(gè)RDD又可以進(jìn)行另外一次轉(zhuǎn)換。這個(gè)過(guò)程是分布式的。</p><p>  Action返回值不是一個(gè)RDD。它要么是一個(gè)Scala的普通集合,要么是一個(gè)值,要么是空,最終或返回到Driver程序,或把RDD寫(xiě)入到文件系統(tǒng)中。</p><p>  關(guān)于這兩個(gè)動(dòng)作,它們是基于Spark開(kāi)發(fā)的核心。圖2.4闡明兩種動(dòng)作的區(qū)別。</p>

70、;<p><b>  圖2.4</b></p><p>  2.5 Spark的編程模型</p><p>  RDD是只讀的數(shù)據(jù)分區(qū)集合,注意是數(shù)據(jù)集。</p><p>  只有當(dāng)RDD上有action時(shí),該RDD及其父RDD上的所有operation才會(huì)被提交到cluster中真正的被執(zhí)行。</p><p&

71、gt;  從代碼到動(dòng)態(tài)運(yùn)行,涉及到的組件如圖2.5所示。</p><p><b>  圖2.5</b></p><p>  第三章 Spark平臺(tái)搭建</p><p>  3.1 安裝Ubuntu Linux操作系統(tǒng)</p><p>  使用wubi安裝ubuntu,我使用的是當(dāng)前的LTS版本Ubuntu 12.04

72、 LTS。</p><p>  3.2 配置安裝Java JDK</p><p>  3.2.1 下載jdk</p><p>  在這里有jdk 1.7的下載:http://www.oracle.com/technetwork /java/javase/downloads/jdk7-downloads-1880260.html</p><p&

73、gt;  如果CPU是32位,選擇下載Linux x86,如果CPU是64位的,選擇Linux x64。一般來(lái)說(shuō),如果計(jì)算機(jī)是雙核的,肯定支持64位操作系統(tǒng)?;蛘呖梢源蜷_(kāi)命令終端運(yùn)行”uname -a”命令看一下,在筆者的筆記本上運(yùn)行這個(gè)命令結(jié)果如下:</p><p><b>  圖3.2.1</b></p><p>  Linux ubuntu 3.11.0-22-

74、generic #38~precise1-Ubuntu SMP Fri May 16 20:47:57 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux</p><p>  后面的x86_64表明系統(tǒng)是64位的。我所用的版本是jdk-7u60-linux-x64.tar.gz</p><p>  3.2.2 安裝jdk</p><p>

75、;  打開(kāi)命令終端,下文的命令都是在終端里執(zhí)行。</p><p>  $ sudo su -</p><p>  這個(gè)命令會(huì)切換到root用戶,也就是最高權(quán)限的用戶。因?yàn)楹竺嬉獔?zhí)行的jdk安裝操作是在/usr/local目錄下進(jìn)行的,用root用戶更方便。</p><p>  $ cd /usr/local/lib</p><p>  cd就

76、是change directory的縮寫(xiě),切換當(dāng)前目錄。</p><p>  $ tar -zxvf /home/kavin/jdk-7u55-linux-x64.tar.gz</p><p>  tar是linux下的打包和解壓命令行工具,具體細(xì)節(jié)可以參考"man tar"。這個(gè)命令將jdk-7u55-linux-x64.tar.gz壓縮包解壓到當(dāng)前目錄下。解壓縮完畢

77、之后,執(zhí)行"ls",能看到當(dāng)前目錄下有一個(gè)新目錄 叫"jdk1.7.0_55"</p><p>  3.2.3 配置環(huán)境變量</p><p>  $ gedit /etc/profile</p><p>  gedit是linux下類似Windoes的記事本的編輯器,文件/etc/profile是linux下的配置文件。本命

78、令會(huì)打開(kāi)這個(gè)配置文件,以備編輯。</p><p><b>  添加配置:</b></p><p>  在/etc/profile文件末尾加上如下的三行代碼:</p><p>  export JAVA_HOME=/usr/local/lib/jdk1.7.0_55</p><p>  export CLASSPATH=.

79、:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar: $JAVA_HOME/lib/tools.jar</p><p>  export PATH=$PATH:$JAVA_HOME/bin</p><p>  保存文件,然后退出。</p><p>  Linux系統(tǒng),開(kāi)機(jī)后會(huì)自動(dòng)執(zhí)行/etc/profile配置文件。ex

80、port命令設(shè)置或者顯示環(huán)境變量。上述三行代碼,分別設(shè)置了JAVA_HOME, CLASSPATH, PATH這三個(gè)環(huán)境變量。</p><p>  $ source /etc/profile</p><p>  如果更改了/etc/profile配置文件,它只會(huì)在新的終端里生效,現(xiàn)在正在使用的終端是不會(huì)生效的。如果想讓它在正使用的終端也生效,需要用source命令運(yùn)行一下配置文件。這條命令

81、會(huì)讓3.2.3的三個(gè)環(huán)境變量立即生效。</p><p>  3.2.4 檢查是否安裝成功</p><p><b>  圖3.2.4</b></p><p>  $ java -version</p><p>  這條命令檢查jdk安裝是否成功。運(yùn)行這條命令,只要沒(méi)有報(bào)錯(cuò)就表明安裝成功了。 </p><

82、;p>  Java環(huán)境安裝與配置完成,這是我們搭建Hadoop的基礎(chǔ),因?yàn)镠adoop平臺(tái)是基于Java進(jìn)行開(kāi)發(fā)與運(yùn)行的。</p><p>  3.3 搭建Hadoop環(huán)境</p><p>  Hadoop的安裝比較繁瑣,有如下幾個(gè)原因:其一,Hadoop有非常多的版本;其二,官方文檔不盡詳細(xì),有時(shí)候更新脫節(jié),Hadoop發(fā)展的太快了; 其三,網(wǎng)上流傳的各種文檔,或者是根據(jù)某些需求

83、定制,或者加入了不必須要的步驟,或者加入容易令人誤解的步驟。其實(shí)安裝是很重要的步驟,只有安裝好了,才能談及下一步。</p><p>  3.3.1 下載安裝Hadoop</p><p>  在Hadoop的主頁(yè)上提供了多個(gè)下載鏈http://hadoop.apache.org</p><p>  我這個(gè)實(shí)驗(yàn),選擇目前hadoop的stable版:Hadoop1.2

84、.1,所以我選擇下載hadoop-1.2.1.tar.gz</p><p>  將stable版本的Hadoop解壓 </p><p>  $ cd ~/setup/hadoop</p><p>  在命令終端里,”~”表示當(dāng)前登錄用戶的主目錄。比如說(shuō),在開(kāi)機(jī)的時(shí)候,登錄用戶是kavin,那么在命令終端里,”~”就表示目錄”/home/kavin”,如果開(kāi)機(jī)時(shí)候,登

85、錄用戶是john,那么”~”就表示”/home/john”目錄。</p><p>  3.3.2 配置hadoop</p><p>  參考了:http://hadoop.apache.org/docs/stable1/single_node_ setup.pdf</p><p>  按照偽分布式進(jìn)行配置,也就是用一個(gè)機(jī)器同時(shí)運(yùn)行NameNode, Seconda

86、ryNameNode, DataNode, JobTracker, TaskTracker 5個(gè)任務(wù)。</p><p>  配置文件在hadoop主目錄的conf目錄下。</p><p>  將core-site.xml 文件內(nèi)容修改成如下:</p><p>  <configuration></p><p>  <prop

87、erty></p><p>  <name>fs.default.name</name></p><p>  <value>hdfs://localhost:9000</value></p><p>  </property></p><p>  </configurat

88、ion></p><p>  將mapred-site.xml文件內(nèi)容修改如下:</p><p>  <configuration></p><p>  <property></p><p>  <name>mapred.job.tracker</name></p><

89、p>  <value>localhost:9001</value></p><p>  </property></p><p>  </configuration></p><p>  將hdfs-site.xml文件內(nèi)容修改如下:</p><p>  <configuration&

90、gt;</p><p>  <property></p><p>  <name>dfs.replication</name></p><p>  <value>1</value></p><p>  </property></p><p>  &

91、lt;/configuration></p><p>  在hadoop-env.sh文件里添加如下一條語(yǔ)句:</p><p>  export JAVA_HOME=/usr/local/lib/jdk1.7.0_55</p><p>  即將JAVA_HOME定義成你安裝Java JDK的目錄</p><p>  3.3.3 安裝r

92、sync和ssh</p><p>  "sudo apt-get install ssh rsync" </p><p>  這條命令安裝ssh和rsync。ssh是一個(gè)很著名的安全外殼協(xié)議Secure Shell Protocol。Rsync是文件同步命令行工具。</p><p>  3.3.4 配置ssh免登錄</p><

93、;p>  $ ssh-keygen -t dsa -f ~/.ssh/id_dsa</p><p>  執(zhí)行這條命令生成ssh的公鑰/私鑰,執(zhí)行過(guò)程中,會(huì)一些提示讓輸入字符,直接一路回車就可以。</p><p>  $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys</p><p>  ssh進(jìn)行遠(yuǎn)程

94、登錄的時(shí)候需要輸入密碼,如果用公鑰/私鑰方式,就不需要輸入密碼了。上述方式就是設(shè)置公鑰/私鑰登錄。</p><p>  $ ssh localhost"</p><p><b>  圖3.3.4</b></p><p>  第一次執(zhí)行本命令,會(huì)出現(xiàn)一個(gè)提示,輸入”yes”然后回車即可。</p><p>  3.

95、3.5 啟動(dòng)hadoop</p><p>  $ cd ~/usr/hadoop/hadoop-1.2.1</p><p>  $ ./bin/hadoop namenode -format</p><p>  格式化NameNode。</p><p>  $ ./bin/start-all.sh</p><p> 

96、 啟動(dòng)所有節(jié)點(diǎn),包括NameNode, SecondaryNameNode, JobTracker, TaskTracker, DataNode。</p><p><b>  $ jps</b></p><p>  檢查各進(jìn)程是否運(yùn)行,這時(shí),應(yīng)該看到有6個(gè)java虛擬機(jī)的進(jìn)程,分別是Jps, NameNode, SecondaryNameNode, DataNode,

97、 JobTracker, TaskTracker,看到6個(gè)是對(duì)的,表明啟動(dòng)成功。</p><p><b>  圖3.3.5</b></p><p>  至此,在單機(jī)上成功安裝了hadoop。spark需要運(yùn)行在hadoop上。裝了hadoop,再奘spark,因?yàn)閟park需要用hadoop的功能。</p><p>  3.4 安裝Scala

98、</p><p>  Spark使用Scala開(kāi)發(fā)的,在安裝Spark之前,先在各個(gè)節(jié)上將Scala安裝好。而Spark 1.0.0依賴于Scala 2.10.4,安裝這個(gè)版本的scala。</p><p>  下載Scala2.10.4后,打開(kāi)終端。</p><p>  $ tar -zxf scala-2.10.4.tgz</p><p>

99、;  $ sudo mv scala-2.10.4 /usr/local</p><p>  解壓縮后移動(dòng)到/usr/local目錄下</p><p>  $ sudo gedit /etc/profile</p><p>  在/etc/profile添加一行代碼</p><p>  export SCALA_HOME=/usr/local

100、/scala-2.10.4 </p><p>  export PATH=$PATH:$SCALA_HOME/bin</p><p><b>  保存并退出</b></p><p>  $ source /etc/profile</p><p><b>  更新環(huán)境變量</b></p>

101、<p>  $ scala -version</p><p><b>  測(cè)試是否安裝成功</b></p><p><b>  圖3.4</b></p><p>  3.5 部署Spark</p><p>  3.5.1 下載spark-1.0.0源碼</p><

102、;p>  從Spark的官方地址下載源碼包spark-1.0.0.tgz。</p><p>  http://spark.apache.org/downloads.html</p><p>  3.5.2 解壓編譯</p><p>  將spark-1.0.0.tgz解壓編譯:</p><p>  $ tar -zxvf spark-

103、1.0.0.tgz</p><p>  運(yùn)行sbt進(jìn)行編譯:</p><p>  $ cd ~/spark-1.0.0</p><p>  $ sbt assembly</p><p><b>  圖3.5.3</b></p><p>  這個(gè)步驟會(huì)下載很多庫(kù),然后進(jìn)行編譯,編譯時(shí)間大概會(huì)在1個(gè)

104、小時(shí)左右。</p><p>  3.5.3 設(shè)置SPARK_HOME環(huán)境變量</p><p>  并將SPARK_HOME/bin加入PATH</p><p>  $ sudo gedit etc/profile</p><p>  打開(kāi)/etc/profile添加以下代碼</p><p>  export SPAR

105、K_HOME=$HOME/spark-1.0.0</p><p>  export PATH=$PATH:$SPARK_HOME/bin</p><p>  $ source /etc/profile</p><p><b>  使環(huán)境變量生效</b></p><p>  3.5.4 驗(yàn)證spark環(huán)境</p&g

106、t;<p>  開(kāi)啟交互式spark命令環(huán)境,即local模式</p><p>  啟動(dòng)Spark shell:$ ./bin/spark-shell</p><p><b>  圖3.5.5.1</b></p><p>  根據(jù)官方document里的quick-start[4]進(jìn)行一些文件讀取操作,并對(duì)內(nèi)容進(jìn)行處理,做mapr

107、educe之類的事情。在sparkshell中運(yùn)行一下最簡(jiǎn)單的例子wordcount,輸入代碼:</p><p>  scala>sc.textFile("README.md").filter(_.contains("Spark")).count</p><p>  上述代碼統(tǒng)計(jì)在README.md中含有Spark的行數(shù)有多少。</p&g

108、t;<p><b>  Long = 15</b></p><p>  即含有“Spark”的行數(shù)有15行。</p><p>  然后輸入scala> val count = file.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKe

109、y(_+_)</p><p>  scala> count.collect()</p><p>  則得到如圖3.5.5.2所示</p><p><b>  圖3.5.5.2</b></p><p>  在字?jǐn)?shù)統(tǒng)計(jì)的例子里,map一段文本的所有文字,然后通過(guò)單詞reduce它們,最后總結(jié)出單詞的個(gè)數(shù)。RDD能夠從磁

110、盤讀取然后保持在內(nèi)存中,提高了性能,可以看出這和Hadoop大部分基于磁盤的速度要快多。</p><p>  接著使用spark自帶的run腳本運(yùn)行spark程序 $ ./bin/run-example org.apache.spark.examples.SparkPi </p><p>  Pi is roughly 3.14154</p><p>

111、;<b>  計(jì)算得出Pi值</b></p><p><b>  圖3.5.5.3</b></p><p>  第四章 機(jī)器學(xué)習(xí)算法模型</p><p><b>  4.1 聚類分析</b></p><p>  聚類分析[5](Cluster analysis)是數(shù)據(jù)挖掘及

112、機(jī)器學(xué)習(xí)領(lǐng)域內(nèi)的重點(diǎn)問(wèn)題之一,在許多領(lǐng)域受到廣泛應(yīng)用,包括機(jī)器學(xué)習(xí)、數(shù)據(jù)挖掘、模式識(shí)別、決策支持、圖像分析以及生物信息,是最重要的數(shù)據(jù)分析方法之一。聚類是將數(shù)據(jù)對(duì)象的集合分組成為由類似的對(duì)象組成的多個(gè)簇的過(guò)程。由聚類所生成的簇是一組數(shù)據(jù)對(duì)象的集合,這些對(duì)象與同一個(gè)簇中的對(duì)象彼此相似,與其他簇中的對(duì)象彼此相異。聚類算法大體上可分為基于劃分的方法、 基于層次的方法、基于密度的方法、基于網(wǎng)格的方法以及基于模型的方法。</p>&

113、lt;p>  一般把數(shù)據(jù)聚類歸納為一種非監(jiān)督式學(xué)習(xí)問(wèn)題,在這個(gè)問(wèn)題上,我們的目標(biāo)是將一部分實(shí)體根據(jù)某種意義上的相似度和另一部分實(shí)體聚在一起。聚類通常被用于探索性的分析,或者作為層次化監(jiān)督學(xué)習(xí)管道網(wǎng)的一個(gè)組件。</p><p>  4.2 K-means algorithm</p><p>  K-means[6]算法是一種得到最廣泛使用的基于劃分的聚類算法[7],把n個(gè)對(duì)象分為k個(gè)

114、簇,以使簇內(nèi)具有較高的相似度。相似度的計(jì)算根據(jù)一個(gè)簇中對(duì)象的平均值來(lái)進(jìn)行。它與處理混合正態(tài)分布的最大期望算法很相似,因?yàn)樗麄兌荚噲D找到數(shù)據(jù)中自然聚類的中心。</p><p>  算法首先隨機(jī)地選擇k個(gè)對(duì)象,每個(gè)對(duì)象初始地代表了一個(gè)簇的平均值或中心。對(duì)剩余的每個(gè)對(duì)象根據(jù)其與各個(gè)簇中心的距離,將它賦給最近的簇,然后重新計(jì)算每個(gè)簇的平均值。這個(gè)過(guò)程不斷重復(fù),直到準(zhǔn)則函數(shù)收斂。 </p><p>

115、;<b>  圖4.2</b></p><p>  它假設(shè)對(duì)象屬性來(lái)自于空間向量,并且目標(biāo)是使各個(gè)群組內(nèi)部的均方誤差總和最小。假設(shè)有k個(gè)群組Si, i=1,2,...,k。μi是群組Si內(nèi)所有元素xj的重心,或叫中心點(diǎn)。</p><p>  4.2.1 算法描述</p><p><b>  選擇聚類的個(gè)數(shù)k。</b>&l

116、t;/p><p>  任意產(chǎn)生k個(gè)聚類,然后確定聚類中心,或者直接生成k個(gè)中心。 </p><p>  根據(jù)每個(gè)聚類中所有對(duì)象的均值 ( 中心對(duì)象 ) , 計(jì)算樣本集中每個(gè)對(duì)象與這些中心對(duì)象的歐式距離 , 并根據(jù)最小距離重新對(duì)相應(yīng)對(duì)象進(jìn)行劃分。即對(duì)每個(gè)點(diǎn)確定其聚類中心點(diǎn) 再計(jì)算其聚類新中心。 </p><p>  再計(jì)算其聚類新中心,即重新計(jì)算每個(gè)聚類的均值。</

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論