Linux系統(tǒng)與大數(shù)據(jù)應(yīng)用 課件 第10章 大數(shù)據(jù)應(yīng)用與案例_第1頁
Linux系統(tǒng)與大數(shù)據(jù)應(yīng)用 課件 第10章 大數(shù)據(jù)應(yīng)用與案例_第2頁
Linux系統(tǒng)與大數(shù)據(jù)應(yīng)用 課件 第10章 大數(shù)據(jù)應(yīng)用與案例_第3頁
Linux系統(tǒng)與大數(shù)據(jù)應(yīng)用 課件 第10章 大數(shù)據(jù)應(yīng)用與案例_第4頁
Linux系統(tǒng)與大數(shù)據(jù)應(yīng)用 課件 第10章 大數(shù)據(jù)應(yīng)用與案例_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Linux系統(tǒng)與大數(shù)據(jù)應(yīng)用10大數(shù)據(jù)應(yīng)用與案例第章本章內(nèi)容10.1Mahout數(shù)據(jù)挖掘10.2Hadoop應(yīng)用案例:Worldcount詞頻統(tǒng)計案例10.3Spark應(yīng)用案例:spark進行電商數(shù)據(jù)檢索10.4本章小結(jié)10.1Mahout數(shù)據(jù)挖掘ApacheMahout是一個開源項目,提供一些可擴展的機器學(xué)習(xí)領(lǐng)域經(jīng)典算法的實現(xiàn),旨在幫助開發(fā)人員更加方便快捷地創(chuàng)建智能應(yīng)用程序。經(jīng)典算法包括聚類、分類、協(xié)同過濾、進化編程等等,并且,在Mahout的最近版本中還加入了對ApacheHadoop的支持,使這些算法可以更高效的運行在云計算環(huán)境中。Mahout是一個很強大的數(shù)據(jù)挖掘工具,是一個分布式機器學(xué)習(xí)算法的集合,包括:被稱為Taste的分布式協(xié)同過濾的實現(xiàn)、分類、聚類等。Mahout最大的優(yōu)點就是基于hadoop實現(xiàn),把很多以前運行于單機上的算法,轉(zhuǎn)化為了MapReduce模式,這樣大大提升了算法可處理的數(shù)據(jù)量和處理性能。一、Mahout安裝1、下載Mahout/dist/mahout/2、解壓(如圖10-1)tar-zxvfmahout-distribution-0.9.tar.gz10.1.1Mahout安裝和配置10.1.1Mahout安裝和配置圖10-1解壓3、配置環(huán)境變量(1)配置Mahout環(huán)境變量(如圖10-2)#setmahoutenvironmentexportMAHOUT_HOME=/user/mahoutexportMAHOUT_CONF_DIR=$MAHOUT_HOME/confexportPATH=$MAHOUT_HOME/conf:$MAHOUT_HOME/bin:$PATH圖10-2Mahout環(huán)境變量10.1.1Mahout安裝和配置(2)配置Mahout所需的Hadoop環(huán)境變量#sethadoopenvironmentexportHADOOP_HOME=/user/hadoopexportHADOOP_CONF_DIR=$HADOOP_HOME/confexportPATH=$PATH:$HADOOP_HOME/binexportHADOOP_HOME_WARN_SUPPRESS=not_null下圖10-3,是在實例中的環(huán)境配置:圖10-3Hadoop環(huán)境變量10.1.1Mahout安裝和配置4、驗證運行mahout,如果出現(xiàn)以下結(jié)果說明配置正確。圖10-4驗證10.1.1Mahout安裝和配置10.1.2KMeans算法和canopy算法一、kMeans算法KMEANS算法是輸入聚類個數(shù)k,以及包含n個數(shù)據(jù)對象的數(shù)據(jù)庫,輸出滿足方差最小標(biāo)準(zhǔn)k個聚類的一種算法。k-means算法接受輸入量k;然后將n個數(shù)據(jù)對象劃分為k個聚類以便使得所獲得的聚類滿足:同一聚類中的對象相似度較高;而不同聚類中的對象相似度較小。1、處理流程(1)從n個數(shù)據(jù)對象任意選擇k個對象作為初始聚類中心;(2)根據(jù)每個聚類對象的均值(中心對象),計算每個對象與這些中心對象的距離;并根據(jù)最小距離重新對相應(yīng)對象進行劃分;(3)重新計算每個(有變化)聚類的均值(中心對象);(4)計算標(biāo)準(zhǔn)測度函數(shù),當(dāng)滿足一定條件,如函數(shù)收斂時,則算法終止;如果條件不滿足則回到步驟(2)。10.1.2KMeans算法和canopy算法1、實現(xiàn)方法k-means算法接受輸入量k;然后將n個數(shù)據(jù)對象劃分為k個聚類以便使得所獲得的聚類滿足:同一聚類中的對象相似度較高;而不同聚類中的對象相似度較小。聚類相似度是利用各聚類中對象的均值所獲得一個“中心對象”(引力中心)來進行計算的。k-means算法的工作過程說明如下:首先從n個數(shù)據(jù)對象任意選擇k個對象作為初始聚類中心;而對于所剩下其它對象,則根據(jù)它們與這些聚類中心的相似度(距離),分別將它們分配給與其最相似的(聚類中心所代表的)聚類;然后再計算每個所獲新聚類的聚類中心(該聚類中所有對象的均值);不斷重復(fù)這一過程直到標(biāo)準(zhǔn)測度函數(shù)開始收斂為止。一般都采用均方差作為標(biāo)準(zhǔn)測度函數(shù).k個聚類具有以下特點:各聚類本身盡可能的緊湊,而各聚類之間盡可能的分開。算法的時間復(fù)雜度上界為O(n*k*t),其中t是迭代次數(shù)。10.1.2KMeans算法和canopy算法k-means算法是一種基于樣本間相似性度量的間接聚類方法,屬于非監(jiān)督學(xué)習(xí)方法。此算法以k為參數(shù),把n個對象分為k個簇,以使簇內(nèi)具有較高的相似度,而且簇間的相似度較低。相似度的計算根據(jù)一個簇中對象的平均值(被看作簇的重心)來進行。此算法首先隨機選擇k個對象,每個對象代表一個聚類的質(zhì)心。對于其余的每一個對象,根據(jù)該對象與各聚類質(zhì)心之間的距離,把它分配到與之最相似的聚類中。然后,計算每個聚類的新質(zhì)心。重復(fù)上述過程,直到準(zhǔn)則函數(shù)收斂。k-means算法是一種較典型的逐點修改迭代的動態(tài)聚類算法,其要點是以誤差平方和為準(zhǔn)則函數(shù)。逐點修改類中心:一個象元樣本按某一原則,歸屬于某一組類后,就要重新計算這個組類的均值,并且以新的均值作為凝聚中心點進行下一次象元素聚類;逐批修改類中心:在全部象元樣本按某一組的類中心分類之后,再計算修改各類的均值,作為下一次分類的凝聚中心點。10.1.2KMeans算法和canopy算法openSUSE項目是由Novell發(fā)起的開源社區(qū)計劃。旨在推進Linux的廣泛使用,提供了自由簡單的方法來獲得世界上最好用的Linux發(fā)行版之一openSUSE。openSUSE項目為Linux開發(fā)者和愛好者提供了開始使用Linux所需要的一切。該項目由SUSE等公司贊助,2011年Attachmate集團收購了Novell,并把Novell和SUSE做為兩個獨立的子公司運營。openSUSE操作系統(tǒng)和相關(guān)的開源程序會被SUSELinuxEnterprise(比如SLES和SLED)使用。openSUSE對個人來說是完全免費的,包括使用和在線更新。外文名稱:openSUSE發(fā)起人

:Novell目標(biāo)

:推進Linux的廣泛使用類別

:開源社區(qū)項目openSUSE是一個一般用途的基于Linux內(nèi)核的GNU/Linux操作系統(tǒng),由openSUSE項目社區(qū)開發(fā)維護,該項目由SUSE等公司贊助。在2004年2月Novell收購SUSELinux之后,Novell決定以100%開源產(chǎn)品發(fā)布SUSELinux專業(yè)版,并作為一個開源項目,openSUSE繼承與SUSELinuxProfessional。2011年Attachmate集團收購了Novell,并把Novell和SUSE做為兩個獨立的子公司運營。SUSE提供基于openSUSE的企業(yè)級產(chǎn)品SUSELinuxEnterprise。openSUSE項目除了提供一個發(fā)行版,還包括一個OpenBuildService,openSUSE的目的是提供提供一個穩(wěn)定的基礎(chǔ)并讓用戶通過OpenBuildService得到額外的更多更新的軟件,甚至是一個滾動發(fā)行的版本命為Tumbleweed。系統(tǒng)默認KDE作為圖形環(huán)境,當(dāng)然GNOME也是很不錯的,其他也有Xfce、LXDE等圖形環(huán)境。openSUSE是著名Novell公司旗下的Linux的發(fā)行版,發(fā)行量在歐洲占第一位。它采用的KDE4.3作為默認桌面環(huán)境,同時也提供GNOME桌面版本。它的軟件包管理系統(tǒng)采用自主開發(fā)的YaST,頗受好評。他的用戶界面非常華麗,甚至超越windows7,而且性能良好,最新版本是13.2。10.1.2KMeans算法和canopy算法二、canopy算法CanopyClustering這個算法是2000年提出來的,此后與Hadoop配合,已經(jīng)成為一個比較流行的算法了。確切的說,這個算法獲得的并不是最終結(jié)果,它是為其他算法服務(wù)的,比如k-means算法。它能有效地降低k-means算法中計算點之間距離的復(fù)雜度。Mahout中已經(jīng)實現(xiàn)了這個算法。首先為大家解釋一下canopy算法,下圖很好得展示了Canopy聚類的過程。(圖10-)圖10-5canopy算法聚類過程10.1.2KMeans算法和canopy算法圖中有一個T1,一個T2,我們稱之為距離閥值,顯然T1>T2,這兩個值有什么用呢?我們先確定了一個中心,然后計算其他點到這個中心間的距離,當(dāng)距離大于T1時,小于T1大于T2時,小于T2時,對這個點的處理都是不一樣的。10.1.3貝葉斯算法學(xué)過概率理論的人都知道條件概率的公式:P(AB)=P(A)P(B|A)=P(B)P(A|B);即事件A和事件B同時發(fā)生的概率等于在發(fā)生A的條件下B發(fā)生的概率乘以A的概率。由條件概率公式推導(dǎo)出貝葉斯公式:P(B|A)=P(A|B)P(B)/P(A);即,已知P(A|B),P(A)和P(B)可以計算出P(B|A)。假設(shè)B是由相互獨立的事件組成的概率空間{B1,b2,...bn}。則P(A)可以用全概率公式展開:P(A)=P(A|B1)P(B1)+P(A|B2)P(B2)+..P(A|Bn)P(Bn)。貝葉斯公式表示成:P(Bi|A)=P(A|Bi)P(Bi)/(P(A|B1)P(B1)+P(A|B2)P(B2)+..P(A|Bn)P(Bn));常常把P(Bi|A)稱作后驗概率,而P(A|Bn)P(Bn)為先驗概率。而P(Bi)又叫做基礎(chǔ)概率。貝葉斯公式:圖10-6貝葉斯公式10.1.3貝葉斯算法貝葉斯公式看起來很簡單,但是在自然科學(xué)領(lǐng)域應(yīng)用范圍及其廣泛。同時理論本身蘊含了深刻的思想。一.貝葉斯概率的歷史貝葉斯理論和貝葉斯概率以托馬斯?貝葉斯(1702-1761)命名,他證明了現(xiàn)在稱為貝葉斯定理的一個特例。術(shù)語貝葉斯卻是在1950年左右開始使用,很難說貝葉斯本人是否會支持這個以他命名的概率非常廣義的解釋。拉普拉斯證明了貝葉斯定理的一個更普遍的版本,并將之用于解決天體力學(xué)、醫(yī)學(xué)統(tǒng)計中的問題,在有些情況下,甚至用于法理學(xué)。但是拉普拉斯并不認為該定理對于概率論很重要。他還是堅持使用了概率的經(jīng)典解釋。弗蘭克?普倫普頓?拉姆齊在《數(shù)學(xué)基礎(chǔ)》(1931年)中首次建議將主觀置信度作為概率的一種解釋。Ramsey視這種解釋為概率的頻率解釋的一個補充,而頻率解釋在當(dāng)時更為廣泛接受。統(tǒng)計學(xué)家BrunodeFinetti于1937年采納了Ramsey的觀點,將之作為概率的頻率解釋的一種可能的代替。L.J.Savage在《統(tǒng)計學(xué)基礎(chǔ)》(1954年)中拓展了這個思想。有人試圖將“置信度”的直觀概念進行形式化的定義和應(yīng)用。最普通的應(yīng)用是基于打賭:置信度反映在行為主體愿意在命題上下注的意愿上。當(dāng)信任有程度的時候,概率計算的定理測量信任的理性程度,就像一階邏輯的定理測量信任的理性程度一樣。很多人將置信度視為經(jīng)典的真值(真或假)的一種擴展。HaroldJeffreys,RichardT.Cox,EdwinJaynes和I.J.Good研探了貝葉斯理論。其他著名貝葉斯理論的支持者包括JohnMaynardKeynes和B.O.Koopman。10.1.3貝葉斯算法二貝葉斯法則的原理通常,事件A在事件B(發(fā)生)的條件下的概率,與事件B在事件A的條件下的概率是不一樣的;然而,這兩者是有確定的關(guān)系,貝葉斯法則就是這種關(guān)系的陳述。作為一個規(guī)范的原理,貝葉斯法則對于所有概率的解釋是有效的;然而,頻率主義者和貝葉斯主義者對于在應(yīng)用中概率如何被賦值有著不同的看法:頻率主義者根據(jù)隨機事件發(fā)生的頻率,或者總體樣本里面的個數(shù)來賦值概率;貝葉斯主義者要根據(jù)未知的命題來賦值概率。一個結(jié)果就是,貝葉斯主義者有更多的機會使用貝葉斯法則。貝葉斯法則是關(guān)于隨機事件A和B的條件概率和邊緣概率的。bayes&其中L(A|B)是在B發(fā)生的情況下A發(fā)生的可能性。10.1.3貝葉斯算法在貝葉斯法則中,每個名詞都有約定俗成的名稱:Pr(A)是A的先驗概率或邊緣概率。之所以稱為"先驗"是因為它不考慮任何B方面的因素。Pr(A|B)是已知B發(fā)生后A的條件概率,也由于得自B的取值而被稱作A的后驗概率。Pr(B|A)是已知A發(fā)生后B的條件概率,也由于得自A的取值而被稱作B的后驗概率。Pr(B)是B的先驗概率或邊緣概率,也作標(biāo)準(zhǔn)化常量(normalizedconstant)。按這些術(shù)語,Bayes法則可表述為:后驗概率=(似然度*先驗概率)/標(biāo)準(zhǔn)化常量也就是說,后驗概率與先驗概率和似然度的乘積成正比。10.1.3貝葉斯算法另外,比例Pr(B|A)/Pr(B)也有時被稱作標(biāo)準(zhǔn)似然度(standardisedlikelihood),Bayes法則可表述為:后驗概率=標(biāo)準(zhǔn)似然度*先驗概率要理解貝葉斯推斷,必須先理解貝葉斯定理。后者實際上就是計算"條件概率"的公式。所謂"條件概率"(Conditionalprobability),就是指在事件B發(fā)生的情況下,事件A發(fā)生的概率,用P(A|B)來表示。圖10-7貝葉斯圖解10.1.3貝葉斯算法根據(jù)文氏圖,可以很清楚地看到在事件B發(fā)生的情況下,事件A發(fā)生的概率就是P(A∩B)除以P(B)。即:P(A|B)=P(A∩B)/P(B)同理可得,P(B|A)=P(A∩B)/P(A)所以,

即P(A|B)=(P(B|A)*P(A))/P(B)10.1.3貝葉斯算法三.貝葉斯推斷的含義對條件概率公式進行變形,可以得到如下形式:P(A|B)=P(A)*P(B|A)/P(B)我們把P(A)稱為"先驗概率"(Priorprobability),即在B事件發(fā)生之前,我們對A事件概率的一個判斷。P(A|B)稱為"后驗概率"(Posteriorprobability),即在B事件發(fā)生之后,我們對A事件概率的重新評估。P(B|A)/P(B)稱為"可能性函數(shù)"(Likelyhood),這是一個調(diào)整因子,使得預(yù)估概率更接近真實概率。所以,條件概率可以理解成下面的式子:后驗概率=先驗概率x調(diào)整因子這就是貝葉斯推斷的含義。我們先預(yù)估一個"先驗概率",然后加入實驗結(jié)果,看這個實驗到底是增強還是削弱了"先驗概率",由此得到更接近事實的"后驗概率"。在這里,如果"可能性函數(shù)"P(B|A)/P(B)>1,意味著"先驗概率"被增強,事件A的發(fā)生的可能性變大;如果"可能性函數(shù)"=1,意味著B事件無助于判斷事件A的可能性;如果"可能性函數(shù)"<1,意味著"先驗概率"被削弱,事件A的可能性變小。10.2.1實訓(xùn)目的和要求掌握Hadoop基本使用方法熟悉Ubuntu操作10.2.2運用單詞計數(shù)是最簡單也是最能體現(xiàn)MapReduce思想的程序之一,可以稱為MapReduce版"HelloWorld",該程序的完整代碼可以在Hadoop安裝包的"src/examples"目錄下找到。單詞計數(shù)主要完成功能是:統(tǒng)計一系列文本文件中每個單詞出現(xiàn)的次數(shù),如下圖所示。圖10-8WC圖解10.2.2運用1.創(chuàng)建本地的示例數(shù)據(jù)文件:依次進入【Home】-【hadoop】-【hadoop-1.2.1】創(chuàng)建一個文件夾file用來存儲本地原始數(shù)據(jù)。圖10-9兩個文件10.2.2運用并在這個目錄下創(chuàng)建2個文件分別命名為【myTest1.txt】和【myTest2.txt】或者你想要的任何文件名。分別在這2個文件中輸入下列示例語句:圖10-10文件內(nèi)容圖10-11文件內(nèi)容10.2.2運用2.在HDFS上創(chuàng)建輸入文件夾呼出終端,輸入下面指令:bin/hadoopfs-mkdirhdfsInput執(zhí)行這個命令時可能會提示類似安全的問題,如果提示了,請使用bin/hadoopdfsadmin-safemodeleave來退出安全模式。當(dāng)分布式文件系統(tǒng)處于安全模式的情況下,文件系統(tǒng)中的內(nèi)容不允許修改也不允許刪除,直到安全模式結(jié)束。安全模式主要是為了系統(tǒng)啟動的時候檢查各個DataNode上數(shù)據(jù)塊的有效性,同時根據(jù)策略必要的復(fù)制或者刪除部分數(shù)據(jù)塊。運行期通過命令也可以進入安全模式。意思是在HDFS遠程創(chuàng)建一個輸入目錄,我們以后的文件需要上載到這個目錄里面才能執(zhí)行。10.2.2運用3.上傳本地file中文件到集群的hdfsInput目錄下在終端依次輸入下面指令:cdhadoop-1.2.1bin/hadoopfs-putfile/myTest*.txthdfsInput圖10-12過程10.2.2運用4.運行例子:在終端輸入下面指令:bin/hadoopjarhadoop-examples-1.2.1.jarwordcounthdfsInputhdfsOutputbin/hadoopjarhadoop-examples-*.jarwordcounthdfsInputhdfsOutput應(yīng)該出現(xiàn)下面結(jié)果:(如圖10-13)10.2.2運用Hadoop命令會啟動一個JVM來運行這個MapReduce程序,并自動獲得Hadoop的配置,同時把類的路徑(及其依賴關(guān)系)加入到Hadoop的庫中。以上就是HadoopJob的運行記錄,從這里可以看到,這個Job被賦予了一個ID號:job_201202292213_0002,而且得知輸入文件有兩個(Totalinputpathstoprocess:2),同時還可以了解map的輸入輸出記錄(record數(shù)及字節(jié)數(shù)),以及reduce輸入輸出記錄。查看HDFS上hdfsOutput目錄內(nèi)容:在終端輸入下面指令:bin/hadoopfs-lshdfsOutput在下圖10-14中是得到的結(jié)果:圖10-14生成的文件10.2.2運用從上圖中知道生成了三個文件,我們的結(jié)果在"part-r-00000"中。使用下面指令查看結(jié)果輸出文件內(nèi)容bin/hadoopfs-catoutput/part-r-00000在下圖10-15中為分析結(jié)果圖10-15分析結(jié)果(注意:請忽視截圖指令中的3)輸出目錄日志以及輸入目錄中的文件是永久存在的,如果不刪除的話,如果出現(xiàn)結(jié)果不一致,請參考這個因素。10.3.1實訓(xùn)目的和要求掌握簡單的spark編程熟悉rdd操作熟悉sparkSQl10.3.2運用1任務(wù)描述通過spark將本地的數(shù)據(jù)上傳至spark集群(這里為單節(jié)點)并存儲至數(shù)據(jù)庫中2任務(wù)要求(1)數(shù)據(jù)集來源淘寶雙11數(shù)據(jù)鏈接:/s/1kVl4flH密碼:b0ne圖10-16要讀取數(shù)據(jù)的截圖10.3.2運用(2)建立maven項目配置pom文件(3)程序中的數(shù)據(jù)庫需要改成自己對應(yīng)的數(shù)據(jù)庫(4)在對應(yīng)目錄下建立要讀取的文件3知識點提示(1)首先將讀取的數(shù)據(jù)放在rdd中,然后將rdd轉(zhuǎn)化為datafram,中間用Record類來封裝數(shù)據(jù)(object類不用實例化),最后通過datafram存入數(shù)據(jù)庫4操作步驟提示這里主要通過idea來實現(xiàn)一下為操作步驟:(1)首先確保已經(jīng)安裝好scala和idea(2)配置好數(shù)據(jù)庫具體的字段參考程序中的類Record(3)建立maven項目,配置好pom依賴(4)建立Example類編譯運行程序10.3.2運用5實現(xiàn)的代碼importorg.apache.spark.sql.{SQLContext,SaveMode}importorg.apache.spark.{SparkConf,SparkContext}objectExample{defmain(args:Array[String]){valconf=newSparkConf().setAppName("sparksq").setMaster("local[2]")valsc=newSparkContext(conf)valsqlContext=newSQLContext(sc)valrdd=sc.textFile("/usr/sample")//將讀取的數(shù)據(jù)安空格鍵切分valresult=rdd.map(x=>{//根據(jù)逗號分隔符來切分valp=x.split(",")//將切分好的每個字段桶過樣例類來封裝Record(p(0),p(1),p(2),p(3),p(4),p(5),p(6),p(7),p(8),p(9),p(10))})10.3.2運用importsqlContext.implicits._//dataframe的隱式轉(zhuǎn)換將rdd轉(zhuǎn)化為dataframevaldataframe=result.toDF()//建立sparksql表adataframe.registerTempTable("a")//打印表結(jié)構(gòu)dataframe.show()//查詢語句valsqlcommand="select*froma"valprop=newjava.util.Properties//設(shè)置數(shù)據(jù)庫用戶名及密碼prop.setProperty("user","root")prop.setProperty("password","Qwe123123")10.3.2運用//執(zhí)行查詢語句并將結(jié)果寫入數(shù)據(jù)庫中sqlContext.sql(sqlcommand).write.mode(SaveMode.Append).jdbc("jdbc:mysql://localhost:3306/mysql","log3",prop)}}//創(chuàng)建樣例類caseclassRecord(user_id:String,item_id:String,cat_id:String,merchant_id:String,brand_id:String,month:String,day:String,action:String,age_range:String,gender:String,province:String)下雨10-17中是程序的運行結(jié)果:圖10-17程序運行結(jié)果10.3.2運用6相關(guān)知識1、RDD是什么RDD:Spark的核心概念是RDD,指的是一個只讀的,可分區(qū)的分布式數(shù)據(jù)集,這個數(shù)據(jù)集的全部或部分可以緩存在內(nèi)存中,在多次計算間重用。為什么會產(chǎn)生RDD?(1)傳統(tǒng)的MapReduce雖然具有自動容錯、平衡負載和可拓展性的優(yōu)點,但是其最大缺點是采用非循環(huán)式的數(shù)據(jù)流模型,使得在迭代計算式要進行大量的磁盤IO操作。RDD正是解決這一缺點的抽象方法。(2)RDD的具體描述RDD(彈性數(shù)據(jù)集)是Spark提供的最重要的抽象的概念,它是一種有容錯機制的特殊集合,可以分布在集群的節(jié)點上,以函數(shù)式編操作集合的方式,進行各種并行操作??梢詫DD理解為一個具有容錯機制的特殊集合,它提供了一種只讀、只能有已存在的RDD變換而來的共享內(nèi)存,然后將所有數(shù)據(jù)都加載到內(nèi)存中,方便進行多次重用。a.他是分布式的,可以分布在多臺機器上,進行計算。b.他是彈性的,計算過程中內(nèi)錯不夠時它會和磁盤進行數(shù)據(jù)交換。10.3.2運用c.這些限制可以極大的降低自動容錯開銷d.實質(zhì)是一種更為通用的迭代并行計算框架,用戶可以顯示的控制計算的中間結(jié)果,然后將其自由運用于之后的計算。(3)RDD的容錯機制實現(xiàn)分布式數(shù)據(jù)集容錯方法有兩種:數(shù)據(jù)檢查點和記錄更新RDD采用記錄更新的方式:記錄所有更新點的成本很高。所以,RDD只支持粗顆粒變換,即只記錄單個塊上執(zhí)行的單個操作,然后創(chuàng)建某個RDD的變換序列(血統(tǒng))存儲下來;變換序列指,每個RDD都包含了他是如何由其他RDD變換過來的以及如何重建某一塊數(shù)據(jù)的信息。因此RDD的容錯機制又稱“血統(tǒng)”容錯。要實現(xiàn)這種“血統(tǒng)”容錯機制,最大的難題就是如何表達父RDD和子RDD之間的依賴關(guān)系。實際上依賴關(guān)系可以分兩種,窄依賴和寬依賴:窄依賴:子RDD中的每個數(shù)據(jù)塊只依賴于父RDD中對應(yīng)的有限個固定的數(shù)據(jù)塊;寬依賴:子RDD中的一個數(shù)據(jù)塊可以依賴于父RDD中的所有數(shù)據(jù)塊。10.3.2運用例如:map變換,子RDD中的數(shù)據(jù)塊只依賴于父RDD中對應(yīng)的一個數(shù)據(jù)塊;groupByKey變換,子RDD中的數(shù)據(jù)塊會依賴于多有父RDD中的數(shù)據(jù)塊,因為一個key可能錯在于父RDD的任何一個數(shù)據(jù)塊中將依賴關(guān)系分類的兩個特性:第一,窄依賴可以在某個計算節(jié)點上直接通過計算父RDD的某塊數(shù)據(jù)計算得到子RDD對應(yīng)的某塊數(shù)據(jù);寬依賴則要等到父RDD所有數(shù)據(jù)都計算完成之后,并且父RDD的計算結(jié)果進行hash并傳到對應(yīng)節(jié)點上之后才能計算子RDD。第二,數(shù)據(jù)丟失時,對于窄依賴只需要重新計算丟失的那一塊數(shù)據(jù)來恢復(fù);對于寬依賴則要將祖先RDD中的所有數(shù)據(jù)塊全部重新計算來恢復(fù)。所以在長“血統(tǒng)”鏈特別是有寬依賴的時候,需要在適當(dāng)?shù)臅r機設(shè)置數(shù)據(jù)檢查點。也是這兩個特性要求對于不同依賴關(guān)系要采取不同的任務(wù)調(diào)度機制和容錯恢復(fù)機制。10.3.2運用2、RDD在Spark中的地位及作用(1)為什么會有Spark?因為傳統(tǒng)的并行計算模型無法有效的解決迭代計算(iterative)和交互式計算(interactive);而Spark的使命便是解決這兩個問題,這也是他存在的價值和理由。(2)Spark如何解決迭代計算?其主要實現(xiàn)思想就是RDD,把所有計算的數(shù)據(jù)保存在分布式的內(nèi)存中。迭代計算通常情況下都是對同一個數(shù)據(jù)集做反復(fù)的迭代計算,數(shù)據(jù)在內(nèi)存中將大大提升IO操作。這也是Spark涉及的核心:內(nèi)存計算。(3)Spark如何實現(xiàn)交互式計算?因為Spark是用scala語言實現(xiàn)的,Spark和scala能夠緊密的集成,所以Spark可以完美的運用scala的解釋器,使得其中的scala可以向操作本地集合對象一樣輕松操作分布式數(shù)據(jù)集。(4)Spark和RDD的關(guān)系?可以理解為:RDD是一種具有容錯性基于內(nèi)存的集群計算抽象方法,Spark則是這個抽象方法的實現(xiàn)。10.3.2運用3、如何操作RDD?(1)如何獲取RDDa.從共享的文件系統(tǒng)獲取,(如:HDFS)b.通過已存在的RDD轉(zhuǎn)換c.將已存在scala集合(只要是Seq對象)并行化,通過調(diào)用SparkContext的parallelize方法實現(xiàn)d.改變現(xiàn)有RDD的之久性;RDD是懶散,短暫的。(RDD的固化:cache緩存至內(nèi)錯;save保存到分布式文件系統(tǒng))(2)操作RDD的兩個動作a.Actions:對數(shù)據(jù)集計算后返回一個數(shù)值value給驅(qū)動程序;例如:Reduce將數(shù)據(jù)集的所有元素用某個函數(shù)聚合后,將最終結(jié)果返回給程序。b.Transformation:根據(jù)數(shù)據(jù)集創(chuàng)建一個新的數(shù)據(jù)集,計算后返回一個新RDD;例如:Map將數(shù)據(jù)的每個元素經(jīng)過某個函數(shù)計算后,返回一個姓的分布式數(shù)據(jù)集。10.3.2運用4、RDD的創(chuàng)建方式集合并行化valarr=Array(1,2,3,4,5,6,7,8)valrdd1=sc.parallelize(arr,2)//2代表分區(qū)數(shù)量從外部文件系統(tǒng),分布式文件系統(tǒng):如hdfs文件系統(tǒng),S3valrdd2=sc.textFile("hdfs://node1:9000/words.txt")10.3.2運用4、什么是sparksql?SparkSQL是用于結(jié)構(gòu)化數(shù)據(jù)處理的Spark模塊。與基本的SparkRDDAPI不同,SparkSQL提供的接口為Spark提供了關(guān)于數(shù)據(jù)結(jié)構(gòu)和正在執(zhí)行的計算的更多信息。在內(nèi)部,SparkSQL使用這些額外的信息來執(zhí)行額外的優(yōu)化。有幾種與SparkSQL進行交互的方式,包括SQL和DatasetAPI。在計算結(jié)果時,使用相同的執(zhí)行引擎,而不管使用哪種API/語言表示計算。這種統(tǒng)一意味著開發(fā)人員可以輕松地在不同的API之間來回切換,基于這些API提供了表達給定轉(zhuǎn)換的最自然的方式。SparkSQL的一個用途是執(zhí)行SQL查詢。SparkSQL也可以用來從現(xiàn)有的Hive安裝中讀取數(shù)據(jù)。用另一種編程語言中運行SQL時,結(jié)果將作為數(shù)據(jù)集/數(shù)據(jù)框返回。您還可以使用命令行或通過JDBC/ODBC與SQL接口進行交互。10.3.2運用4、sparksql的一些操作//讀取數(shù)據(jù),將每一行的數(shù)據(jù)使用列分隔符分割vallineRDD=sc.textFile("hdfs://localhost:9000/person.txt").map(_.split(""))//定義caseclass(相當(dāng)于表的schema)caseclassPerson(name:String,age:Int)//將lineRDD轉(zhuǎn)換成personRDDvalpersonRDD=lineRDD.map(x=>Person(x(0),x(1).toInt))//將personRDD轉(zhuǎn)換成DataFramevalpersonDF=personRDD.toDF//對personDF進行處理personDF.showpersonDF.select(personDF.col("name")).showpersonDF.select(col("name")).showpersonDF.select("name").showpersonDF.printSchema10.3.2運用//#(SQL風(fēng)格語法)將DF注冊成表personDF.registerTempTable("t_person")//查詢:sqlContext.sql("select*fromt_personorderbyagedesclimit2").showsqlContext.sql("desct_person").showvalresult=sqlContext.sql("select*fromt_personorderbyagedesc")//保存結(jié)果result.save("hdfs://localhost:9000/sql/res1")10.3.2運用6、dataFrame的介紹DataFrame:與RDD類似,DataFrame也是一個分布式數(shù)據(jù)容器。然而DataFrame更像傳統(tǒng)數(shù)據(jù)庫的二維表格,除了數(shù)據(jù)以外,還記錄數(shù)據(jù)的結(jié)構(gòu)信息,即schema。同時,與Hive類似,DataFrame也支持嵌套數(shù)據(jù)類型(struct、array和map)。從API易用性的角度上看,DataFrameAPI提供的是一套高層的關(guān)系操作,比函數(shù)式的RDDAPI要更加友好,門檻更低。由于與R和Pandas的DataFrame類似,SparkDataFrame很好地繼承了傳統(tǒng)單機數(shù)據(jù)分析的開發(fā)體驗。DataFrame與RDD的主要區(qū)別在于,前者帶有schema元信息,即DataFrame所表示的二維表數(shù)據(jù)集的每一列都帶有名稱和類型。這使得SparkSQL得以洞察更多的結(jié)構(gòu)信息,從而對藏于DataFrame背后的數(shù)據(jù)源以及作用于DataFrame之上的變換進行了針對性的優(yōu)化,最終達到大幅提升運行時效率的目標(biāo)。反觀RDD,由于無從得知所存數(shù)據(jù)元素的具體內(nèi)部結(jié)構(gòu),SparkCore只能在stage層面進行簡單、通用的流水線優(yōu)化。10.3.2運用7、dataFrame的一些操作使用SparkSession,應(yīng)用程序可以從現(xiàn)有的RDD,Hive表或Spark數(shù)據(jù)源創(chuàng)建DataFrame。舉個例子,下面根據(jù)J

溫馨提示

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

最新文檔

評論

0/150

提交評論