版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Spark大數(shù)據(jù)分析與實戰(zhàn)第1章Spark大數(shù)據(jù)平臺與環(huán)境搭建第2章SparkRDD離線數(shù)據(jù)計算第3章SparkSQL離線數(shù)據(jù)處理第4章SparkStreaming流數(shù)據(jù)計算第5章Spark編程進階第6章Spark大數(shù)據(jù)分析綜合案例全套可編輯PPT課件
本課件是可編輯的正常PPT課件第1章Spark大數(shù)據(jù)平臺與環(huán)境搭建Spark大數(shù)據(jù)分析與實戰(zhàn)本課件是可編輯的正常PPT課件01Spark大數(shù)據(jù)平臺介紹Spark大數(shù)據(jù)環(huán)境搭建0203Python核心語法概覽目錄CONTENTS本課件是可編輯的正常PPT課件01Spark大數(shù)據(jù)平臺介紹Spark是什么Spark與大數(shù)據(jù)的應(yīng)用場景Spark編程環(huán)境(PySpark)Spark應(yīng)用程序原理本課件是可編輯的正常PPT課件Spark是什么2009年,Spark誕生于伯克利大學(xué)的AMPLab實驗室2010年,伯克利大學(xué)正式開源了Spark項目2013年6月,Spark成為了Apache基金會下的項目2014年2月,Spark以飛快的速度成為了Apache的頂級項目2015年至今,Spark變得愈發(fā)火爆,國內(nèi)大量企業(yè)開始重點部署或者使用Spark平臺2016年Spark2.0發(fā)布2019年Spark3.0發(fā)布ApacheSpark在2009年誕生于的U.C.Berkeley的AMPLab實驗室,在2010
年被開源,2013年被捐贈給Apache軟件基金會(ApacheSoftwareFoundation),目前已發(fā)展到3.x版本本課件是可編輯的正常PPT課件Spark是什么ApacheSpark是一種用于大數(shù)據(jù)分析與處理的分布式系統(tǒng),是一個多語言的開源“數(shù)據(jù)引擎。Spark框架使用Scala語言編寫,借鑒MapReduce思想,保留了分布式并行計算的優(yōu)點,改進了其存在的明顯缺陷,提供了豐富的操作數(shù)據(jù)的API接口,大大提高了開發(fā)效率,并在全球各行各業(yè)得到了廣泛應(yīng)用Spark將中間計算數(shù)據(jù)優(yōu)先緩存在內(nèi)存中,迭代計算時直接從內(nèi)存中讀取,只在必要時才將部分數(shù)據(jù)寫入磁盤中,大幅提高了運算速度,還使用DAG(DirectedAcyclicGraph,有向無環(huán)圖)調(diào)度程序、查詢優(yōu)化器和物理執(zhí)行引擎,在進行離線批量處理數(shù)據(jù)時具有較高的性能,并且在實時流數(shù)據(jù)處理時也具有較高的吞吐量本課件是可編輯的正常PPT課件Spark是什么Spark提供了一個大數(shù)據(jù)分析處理的統(tǒng)一解決方案,可應(yīng)用于批處理、交互式查詢(SparkSQL)、實時流處理(SparkStreaming)、機器學(xué)習(xí)(MLlib)和圖計算(GraphX)等場景,這些不同類型的處理工作可以在同一個應(yīng)用中無縫實現(xiàn),企業(yè)使用一個平臺就可以實現(xiàn)不同的工程操作,減少了人力開發(fā)和平臺部署的成本SparkCore是Spark大數(shù)據(jù)平臺的核心模塊,它實現(xiàn)了Spark的分布式數(shù)據(jù)集、計算任務(wù)調(diào)度、內(nèi)存管理、錯誤恢復(fù)、存儲系統(tǒng)交互等基本功能SparkSQL模塊是強大的用來處理結(jié)構(gòu)化數(shù)據(jù)的程序包,可以方便地編寫SQL語句直接操作數(shù)據(jù)SparkStreaming是Spark提供的針對實時數(shù)據(jù)場合下的流式計算模塊SparkMLlib模塊提供了常見的機器學(xué)習(xí)程序庫,包括分類、回歸、聚類、協(xié)同過濾等功能SparkGraphX模塊則提供了圖計算的API,能在海量數(shù)據(jù)上自如地運行復(fù)雜的圖算法(像導(dǎo)航路徑的選擇就是使用圖計算的例子,并不是日常生活中的圖像處理)本課件是可編輯的正常PPT課件Spark是什么Spark相比Hadoop具有較大優(yōu)勢,但它并不是用來取代Hadoop的(Spark主要用于替換Hadoop的MapReduce計算模型)。Spark不僅支持HDFS等分布式文件系統(tǒng),在集群調(diào)度上還支持YARN、SparkStandalone等集群資源管理系統(tǒng)。Spark從誕生開始就已經(jīng)很好地融入了Hadoop開源大數(shù)據(jù)生態(tài)圈,并成為其中不可或缺的重要一員。不過,Spark對機器的硬件要求相比Hadoop更高,主要是內(nèi)存和CPU方面,只有這樣才能發(fā)揮出它的優(yōu)勢Spark當前主要分為2.x和3.x兩大系列版本,其中,3.x版本引入了一些新特性并在內(nèi)部做了優(yōu)化,考慮到2.x版本的發(fā)展時間較長且最為穩(wěn)定,且3.x和2.x兩者在一般的Spark應(yīng)用程序開發(fā)上并無差別,所以這里將以Spark2.4.8為例進行講解本課件是可編輯的正常PPT課件Spark與大數(shù)據(jù)的應(yīng)用場景Spark與Excel都是功能強大的數(shù)據(jù)處理工具,Excel是一個電子表格軟件,簡單易用,支持對各種數(shù)據(jù)的可視化展示,還支持VBA腳本編程,可以實現(xiàn)對數(shù)據(jù)的各種靈活處理和變換,但只能在單機上運行,處理的數(shù)據(jù)量有限,不適合大數(shù)據(jù)處理場合。Spark可以在數(shù)千臺計算機的集群環(huán)境下運行,具有強大的數(shù)據(jù)處理能力,這一點是Excel這類軟件無法比擬的Excel電子表格軟件Spark大數(shù)據(jù)處理環(huán)境本課件是可編輯的正常PPT課件Spark與大數(shù)據(jù)的應(yīng)用場景Spark是大數(shù)據(jù)領(lǐng)域的分布式計算平臺,國內(nèi)外許多公司都在使用Spark幫助簡化具有挑戰(zhàn)性的密集型計算任務(wù)美團生活服務(wù)電子商務(wù)平臺上的點擊、瀏覽、下單支付行為等都會產(chǎn)生海量的日志,通過匯總、處理、分析、挖掘與學(xué)習(xí),為美團業(yè)務(wù)的各種推薦、搜索系統(tǒng)甚至企業(yè)戰(zhàn)略目標的制定提供客觀的數(shù)據(jù)支撐阿里在搜索和廣告業(yè)務(wù),通過Spark解決了多次迭代的機器學(xué)習(xí)算法和高計算復(fù)雜度的算法等問題,利用GraphX解決了許多生產(chǎn)方面的問題,如基于度分布的中樞節(jié)點發(fā)現(xiàn)、基于最大連通圖的社區(qū)發(fā)現(xiàn)等近年我國政府治理活動中的大數(shù)據(jù)應(yīng)用場景也不斷拓展,“最多跑一次”“掌上辦”等服務(wù)新模式不斷涌現(xiàn),浙江推行的“浙里辦”和“杭州城市數(shù)據(jù)大腦”便捷、高效的民生服務(wù)走在了全國的前列本課件是可編輯的正常PPT課件Spark編程環(huán)境(PySpark)Spark目前提供了包括Java、Scala、Python、R在內(nèi)的4種編程語言的API接口。隨著數(shù)據(jù)科學(xué)、人工智能的日益發(fā)展,特別是人工智能與大數(shù)據(jù)技術(shù)的結(jié)合,
加上Python語言具有像英語一樣的語法學(xué)習(xí)起來簡單易懂,通過PySpark使用Python語言就能進行Spark的編程工作本課件是可編輯的正常PPT課件Spark編程環(huán)境(PySpark)PySpark只是在Spark基礎(chǔ)上做了一層API接口的封裝,支持絕大多數(shù)的Spark框架功能,像SparkCore、SparkSQL、SparkStreaming、MLlib等,因此只要掌握了Python的基本語法,就能夠使用Python代碼來調(diào)用Spark的各種功能,減少了學(xué)習(xí)多編程語言的困擾在實際工作中,經(jīng)常要用到多種數(shù)據(jù)處理工具以滿足不同的業(yè)務(wù)需求,其中使用較多的是SQL、Pandas和Spark這三大工具,PySpark支持這幾種數(shù)據(jù)處理工具之間靈活切換和組合,為Spark的大數(shù)據(jù)處理提供了很好的補充本課件是可編輯的正常PPT課件Spark應(yīng)用程序原理Spark應(yīng)用程序通常運行在集群環(huán)境中,
一般包含ClusterManager集群管理節(jié)點、Master主節(jié)點、Worker工作節(jié)點等幾個部分,運行流程與普通單機應(yīng)用程序相比,差別較大(1)Client客戶端將代碼提交到集群的主節(jié)點,主節(jié)點隨即啟動一個Driver進程負責(zé)接收用戶代碼(2)Driver進程立即創(chuàng)建一個SparkContext對象向集群管理機申請計算資源,確定計算任務(wù)工作節(jié)點(3)SparkContext分析代碼,將代碼和數(shù)據(jù)劃分成若干個獨立片段發(fā)送給工作節(jié)點上的Executor進程(4)Executor進程計算完畢,會把生成的結(jié)果返回Driver進程匯總,輸出或保存到磁盤Spark應(yīng)用程序=
用戶代碼+
Driver+
Executor+Executor+…本課件是可編輯的正常PPT課件02Spark大數(shù)據(jù)環(huán)境搭建Linux系統(tǒng)安裝和配置Hadoop偽分布集群環(huán)境搭建Spark單機運行環(huán)境搭建本課件是可編輯的正常PPT課件Linux系統(tǒng)安裝和配置Linux虛擬機的安裝Ubuntu20.04操作系統(tǒng)基本使用具體步驟參見教材我們的Spark運行環(huán)境是搭建在Linux虛擬機上的,因此這里準備安裝Ubuntu20.04系統(tǒng),選用這一圖形環(huán)境的Linux的目的,是為了后續(xù)方便寫代碼具體步驟參見教材本課件是可編輯的正常PPT課件Linux系統(tǒng)安裝和配置Ubuntu20.04是桌面版,默認是不支持遠程登錄功能,為方便起見,我們將openssh-server安裝進來以支持sshd遠程終端連接服務(wù)為了避免版本沖突,這里需要先卸載Ubuntu內(nèi)置的openssh-client,在安裝openssh-server時會自動安裝正確版本的openssh-client本課件是可編輯的正常PPT課件Linux系統(tǒng)安裝和配置安裝vim軟件包,它是默認的vi編輯器(簡稱vi)的增強版,支持一些更豐富的功能,如不同顏色的高亮代碼顯示等。當vim安裝完畢后,在終端輸入vi或vim命令,實際啟動的就是這個增強版的vim編輯器將Ubuntu20.04自帶的防火墻禁用,以避免在遠程終端連接時出現(xiàn)問題,在運行Hadoop和Spark時也要禁用防火墻Windows自帶的記事本是一個簡單易用的文本編輯器,在Ubuntu20.04操作系統(tǒng)桌面環(huán)境中也有一個類似的TextEditor圖形化文本編輯器,用戶可在應(yīng)用程序列表中找到,也可通過終端命令來啟動本課件是可編輯的正常PPT課件Vi編輯器模式切換(命令/編輯)Vi編輯器常用編輯命令Linux系統(tǒng)安裝和配置vi是絕大多數(shù)Linux/Unix類系統(tǒng)的一個默認編輯器,日常工作中幾乎隨時會用到,掌握它也是Linux學(xué)習(xí)的一個必修內(nèi)容,因為大部分服務(wù)器上安裝的Linux系統(tǒng)沒有附帶桌面環(huán)境,無法直接使用圖形化文本編輯器本課件是可編輯的正常PPT課件Linux系統(tǒng)安裝和配置Windows上常用的遠程連接工具有PuTTY、SecureCRT、XShell等,其實還有一個功能更全面的終端工具MobaXterm,還支持直接上傳文件到遠程服務(wù)器使用首先MobaXterm連接遠程Linux之前,需要在Linux終端窗體中輸入ipaddr命令查看當前虛擬機的IP地址本課件是可編輯的正常PPT課件Linux系統(tǒng)安裝和配置在MobaXterm界面左上角單擊Session圖標,打開連接設(shè)置窗體,在這個窗體中列出了MobaXterm支持的各種遠程連接類型,單擊SSH圖標,輸入虛擬機的IP地址,指定登錄所用的賬戶spark,單擊OK按鈕即可本課件是可編輯的正常PPT課件Linux系統(tǒng)安裝和配置連接遠程Linux時,需要輸入對應(yīng)的賬戶密碼,在彈出的是否要保存密碼的窗體中,勾選Donotshowthismessageagain(不再顯示本確認信息)復(fù)選框,單擊No按鈕不保存登錄密碼本課件是可編輯的正常PPT課件Linux系統(tǒng)安裝和配置MobaXterm成功連接遠程服務(wù)器后,可以像在Linux操作系統(tǒng)本地一樣執(zhí)行命令,還可以將Windows本地文件拖放上傳到遠程服務(wù)器本課件是可編輯的正常PPT課件Linux系統(tǒng)安裝和配置MobaXterm還會將連接使用過的服務(wù)器信息保存在收藏欄中,雙擊保存的連接信息即可自動連接,或單擊鼠標右鍵選擇Editsession(編輯)或Deletesession(刪除)對連接信息進行管理本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建Spark是一個完全獨立的大數(shù)據(jù)處理框架,不依賴于其他大數(shù)據(jù)平臺,但作為Hadoop大數(shù)據(jù)生態(tài)的重要一員,Spark通常還會搭配HDFS和YARN一起使用。這里嘗試搭建一個單機環(huán)境下最小配置的Hadoop偽分布集群環(huán)境(1)JDK的安裝配置以上是將JDK解壓縮到/usr/local目錄下,并創(chuàng)建一個軟鏈接指向JDK的解壓縮目錄(軟鏈接相當于Windows的快捷方式)本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(1)JDK的安裝配置修改/etc/profile配置文件,在其中添加有關(guān)JDK的環(huán)境變量設(shè)置本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(1)JDK的安裝配置回到Linux終端窗體測試一下JDK的配置是否正常。如果出現(xiàn)以下信息,則說明JDK的配置是正確的,JDK的安裝也就完成了JDK安裝完畢最好重新啟動一下虛擬機,這樣設(shè)置的環(huán)境變量就會在Linux系統(tǒng)全局生效。否則即使當前Linux終端執(zhí)行過source命令,在另一個新開Linux終端執(zhí)行java命令很可能就會失敗,需要重新執(zhí)行一次source命令才行本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(2)
Linux免密登錄考慮到遠程登錄服務(wù)sshd已經(jīng)運行,因此可先在本機中通過ssh命令測試一下遠程連接是否正常本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(2)
Linux免密登錄先通過ssh-keygen命令生成免密登錄所需的密鑰信息本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(2)
Linux免密登錄通過ssh-copy-id命令,把本機的公鑰復(fù)制到遠程主機的authorized_keys文件上,以便雙方在連接通信時使用本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(2)
Linux免密登錄在本機通過ssh命令再次進行遠程連接,測試是否免密登錄功能,正常情況下此時不再需要輸入密碼,ssh就能夠連接成功Hadoop、Spark等大數(shù)據(jù)平臺之所以需要進行免密登錄的原因,比如在主節(jié)點上啟動Hadoop集群時,主節(jié)點要自動將其他節(jié)點上的相應(yīng)服務(wù)程序啟動,此時就要借助免密登錄,以便主節(jié)點遠程登錄到其他節(jié)點機器上執(zhí)行啟動服務(wù)程序的命令,相當于“一只手直接伸進對方機器中進行操作”的效果本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(3)
Hadoop的安裝Hadoop的安裝比較簡單,也是先解壓縮hadoop-2.6.5.tar.gz軟件包,然后像JDK一樣建立一個軟鏈接這里創(chuàng)建jdk和hadoop鏈接文件的目的是為了后續(xù)維護上的便利。如果直接將帶版本號的JDK和Hadoop軟件包名稱寫入/etc/profile配置文件,將來在遇到升級或修改軟件版本時,就必須同步修改/etc/profile配置文件,而使用軟鏈接的方式,只需將鏈接文件指向新版本的目錄即可,而不用修改/etc/profile配置文件。此外,有的地方將jdk1.8.0_201或hadoop-2.6.5這種帶版本號的文件夾名名直接改成類似jdk、hadoop這樣的目錄名,此時從文件夾名稱就看不出是什么版本了,這樣也會造成一些不便本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(3)
Hadoop的安裝將解壓縮的hadoop-2.6.5目錄的用戶和組的權(quán)限調(diào)整一下,方便在啟動Hadoop時能夠完全控制這個目錄,避免因為文件的訪問權(quán)限問題導(dǎo)致無法進行操作本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(3)
Hadoop的安裝現(xiàn)在可以測試一下Hadoop是否能夠正常使用本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(4)
HDFS的配置HDFS用來提供分布式存儲功能,所需的相關(guān)配置主要在hdfs-site.xml文件中。不過,由于HDFS是Hadoop三大模塊(HDFS+MapReduce+YARN)的基礎(chǔ)組件,所以還會涉及hadoop-env.sh和core-site.xml這兩個Hadoop核心配置文件的修改本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(4)
HDFS的配置切換到Hadoop的配置文件目錄,修改其中的hadoop-env.sh運行環(huán)境,找到里面的JAVA_HOME環(huán)境變量。由于Hadoop沒有使用Linux操作系統(tǒng)的JAVA_HOME環(huán)境變量,而是重新定義了一個JAVA_HOME環(huán)境變量,所以就要告知Hadoop所依賴的JDK安裝位置本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(4)
HDFS的配置修改Hadoop核心配置文件core-site.xml,在里面增加HDFS地址端口和臨時工作目錄信息本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(4)
HDFS的配置修改HDFS配置文件hdfs-site.xml,在其中指定NameNode和DataNode的數(shù)據(jù)保存位置。其中,NameNode負責(zé)管理文件系統(tǒng),DataNode負責(zé)存儲數(shù)據(jù)本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(4)
HDFS的配置查看slaves配置文件的內(nèi)容,這個文件中保存了運行DateNode進程的節(jié)點信息。由于我們配置的是單節(jié)點環(huán)境,slaves文件中默認是localhost,即本機,所以不用進行任何修改本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(4)
HDFS的配置配置文件修改完畢,首次運行HDFS服務(wù)之前,還要初始化HDFS的文件系統(tǒng),相當于平時的磁盤格式化操作,這個工作只執(zhí)行一次。如果要重新進行初始化,應(yīng)先清除相關(guān)目錄中的內(nèi)容(即NameNode和DataNode對應(yīng)的目錄,這樣HDFS存儲的數(shù)據(jù)也會丟失)本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(4)
HDFS的配置啟動HDFS服務(wù),在執(zhí)行過程中會分別運行NameNode、SecondaryNameNode以及DataNode進程本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(4)
HDFS的配置使用jps命令查看HDFS服務(wù)的進程是否正常運行,如果Java進程列表中有NameNode、SecondaryNameNode、DataNode這3個進程在運行,則說明HDFS啟動是正常的本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(5)YARN的配置YARN是一個通用的Hadoop集群資源調(diào)度平臺,負責(zé)為應(yīng)用程序提供服務(wù)器計算資源(主要是CPU和內(nèi)存),為上層應(yīng)用提供統(tǒng)一的資源管理和調(diào)度。由于Spark支持運行在YARN集群管理服務(wù)之上,因此接下來將配置一下YARN,主要涉及yarn-env.sh和yarn-site.xml兩個文件的修改本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(5)YARN的配置打開yarn-site.xml文件,在其中增加與內(nèi)存檢查相關(guān)的設(shè)置。這是因為虛擬機使用的內(nèi)存和CPU資源比較有限,若要求必須有多少內(nèi)存和CPU核,一些應(yīng)用程序可能就無法正常啟動。當然,在正式的生產(chǎn)環(huán)境中要去掉這兩個參數(shù)設(shè)置本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(5)YARN的配置配置完畢,現(xiàn)在可以啟動YARN服務(wù)相關(guān)的程序,在執(zhí)行過程中會分別運行ResourceManager和NodeManager這兩個進程本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(6)HDFS和YARN的測試經(jīng)過前面的一系列配置,現(xiàn)在的HDFS和YARN服務(wù)都已經(jīng)在正常運行,它們的啟動腳本分別是start-dfs.sh和start-yarn.sh,停止腳本分別是stop-dfs.sh和stop-yarn.sh,這些腳本均位于/usr/local/hadoop路徑下的sbin目錄而不是bin目錄使用vi修改/etc/profile配置文件,在其中添加有關(guān)Hadoop環(huán)境變量的設(shè)置本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(6)HDFS和YARN的測試執(zhí)行source命令使/etc/profile配置文件的內(nèi)容修改生效,測試一下是否能夠正常操作HDFS,比如創(chuàng)建目錄,上傳文件等本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(6)HDFS和YARN的測試在Ubuntu20.04里面啟動瀏覽器,訪問http://localhost:50070即可查看HDFS的WebUI管理頁面本課件是可編輯的正常PPT課件Hadoop偽分布集群環(huán)境搭建(6)HDFS和YARN的測試在Ubuntu20.04瀏覽器中訪問http://localhost:8088,可以查看YARN的WebUI管理頁面本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(1)Spark的安裝配置將Spark安裝軟件包解壓到/usr/local目錄下,并創(chuàng)建一個軟鏈接文件指向Spark目錄,同時修改目錄的所屬用戶和組本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(1)Spark的安裝配置開始配置Spark運行環(huán)境,所有配置文件均位于conf目錄下本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(1)Spark的安裝配置使用vi修改/etc/profile配置文件,在其中添加有關(guān)Spark的環(huán)境變量設(shè)置本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(1)Spark的安裝配置執(zhí)行source命令使/etc/profile配置文件的內(nèi)容修改生效,然后測試配置好的Spark能否正常工作如果一切正常,則終端窗體上會輸出計算得到的pi的近似值,但這個值是不固定的,每次運行輸出的pi值都是會變化的本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(2)SparkShell交互編程環(huán)境Spark安裝目錄的bin文件夾中包含了一些實用的工具命令腳本,包括spark-submit、spark-shell、pyspark等。其中,spark-shell和pyspark都是交互式操作方式的Spark編程環(huán)境,前者支持Scala,后者支持Python,它們都是采用“輸入一條執(zhí)行一條”的工作模式,對于學(xué)習(xí)階段的確是比較方便的本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(2)SparkShell交互編程環(huán)境當SparkShell啟動后默認支持運行Scala代碼。我們先輸入下面兩行簡單的Scala代碼進行測試(不理解也沒關(guān)系)本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(2)SparkShell交互編程環(huán)境新打開一個Linux終端窗體,在里面輸入jps命令查看HDFS服務(wù)是否正在運行,如果沒有運行就要先將HDFS服務(wù)啟動,正如在配置HDFS服務(wù)時所做的那樣本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(2)SparkShell交互編程環(huán)境現(xiàn)在可以驗證Spark能否正常訪問HDFS上的文件。前面在測試HDFS時已經(jīng)上傳過一個文件,HDFS的路徑為/mydata/hello.txt,下面準備在SparkShell中將這個文件的數(shù)據(jù)讀取出來。繼續(xù)回到SparkShell的窗體中輸入下面的代碼通過上述測試,說明Spark的安裝配置是正確的本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(2)SparkShell交互編程環(huán)境要退出SparkShell交互編程環(huán)境,可以按下鍵盤上的Ctrl+D快捷鍵,或輸入:quit(冒號也要輸入)并按回車鍵,這樣就退回到終端的命令行提示符狀態(tài)本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(3)python3.6的安裝Ubuntu20.04默認安裝了python3.8,但是Spark2.4.8最高只能支持到python3.6,從Spark3.x開始才支持python3.8。如果直接使用默認安裝的python3.8,容易造成Spark的兼容性問題,所以這里準備在Ubuntu20.04虛擬機中另外安裝一下python3.6的運行環(huán)境。我們先查看一下Ubuntu20.04安裝的Python相關(guān)程序文件本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(3)python3.6的安裝從輸出的文件列表中可以看出,python3實際是一個鏈接文件,它指向了python3.8命令程序。我們可以分別運行python3和python3.8命令,以確認它們是否為同一個本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(3)python3.6的安裝現(xiàn)在有兩種做法:一種是將系統(tǒng)默認安裝的python3.8卸載,替換成python3.6,不過這種做法存在一定風(fēng)險,因為可能會影響到系統(tǒng)中一些程序的使用;另一種是在系統(tǒng)同時保留多個Python版本,然后根據(jù)實際需要切換使用(也有現(xiàn)成的工具輔助Python的多版本管理),我們準備采取第2種做法由于Ubuntu軟件源不含python3.6的預(yù)編譯版本,為簡單起見,我們這里使用一個第三方的軟件源DeadsnakesPPA本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(3)python3.6的安裝現(xiàn)在可以正式開始安裝python3.6了,安裝完畢后再查看一下python3.6的啟動程序當python3.6成功安裝后,在/usr/bin目錄下會多出兩個可執(zhí)行程序,即python3.6和python3.6m,其中python3.6m在內(nèi)存分配方式上做了優(yōu)化,在實際使用時任選其一即可(這里“m”就是指memory內(nèi)存)本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(3)python3.6的安裝Spark包含一個名為“pyspark”的交互式編程腳本,它需在Python的運行環(huán)境中才能使用。為了使pyspark腳本能夠找到正確的Python運行環(huán)境,可以在運行腳本之前設(shè)置一個名為PYSPARK_PYTHON的環(huán)境變量,我們將其添加到/etc/profile配置文件中(或添加到Spark的spark-env.sh配置文件也可以)本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(4)PySparkShell交互編程環(huán)境當python3.6運行環(huán)境準備就緒后,就可以啟動PySparkShell交互式編程環(huán)境了從PySparkShell啟動輸出的提示信息中可以看出,Spark2.4.8使用的是python3.6,這也再次證明之前的配置是正確的本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(4)PySparkShell交互編程環(huán)境這里測試一下PySparkShell訪問本地和HDFS文件的功能。首先確認HDFS服務(wù)是否正常運行,具體步驟可參考前述內(nèi)容,這里假定HDFS已正常運行測試完畢,直接按Ctrl+D快捷鍵,或者輸入quit()就可以退出PySparkShell交互式編程環(huán)境的界面,回到終端的命令行提示符狀態(tài)本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(5)Pip的安裝配置Pip是一個Python包管理工具,提供了Python軟件庫的查找、下載、安裝和卸載等功能。實際上,Pip本身也是Python標準庫中的一個包,只是這個包比較特殊,它是用來管理Python標準庫中的其他包。Ubuntu20.04默認沒有附帶Pip包管理工具,下面通過apt命令在線安裝進來本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(5)Pip的安裝配置Pip工具安裝完畢,就要考慮如何處理系統(tǒng)中現(xiàn)存的兩個Python版本,即python3.6和python3.8。由于Ubuntu20.04中的python3命令默認指向python3.8,pip和pip3腳本命令也都是用來管理python3.8軟件包的,因此就面臨一個問題,如何分別管理python3.6和python3.8的軟件包呢?當然,使用python3.6-mpip或python3.8-mpip這樣的命令形式進行軟件包安裝是可以的,如果有更直接的辦法,比如使用pip腳本命令管理python3.6的軟件包,使用pip3腳本命令管理python3.8的軟件包,這樣自然就把它們隔離開了前面配置過的PYSPARK_PYTHON環(huán)境變量,它的目的是讓pyspark腳本能夠找到合適的Python運行環(huán)境。假如未設(shè)置過PYSPARK_PYTHON環(huán)境變量,pyspark腳本默認會調(diào)用系統(tǒng)的python命令來啟動后續(xù)過程(相當于配置PYSPARK_PYTHON=python的結(jié)果)?;诖?,可以考慮創(chuàng)建一個名為python的鏈接文件指向python3.6,同時配置pip命令管理python3.6的軟件包。與此對應(yīng)的,保留python3鏈接文件指向python3.8,并維持pip3管理python3.8的軟件包的功能不變。經(jīng)過這樣的安排,python3.6和python3.8就可以使用它們各自的命令和包管理工具,而且相互不存在沖突(這樣的選擇不是必須的,只是提供一種可行的做法)本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(5)Pip的安裝配置先創(chuàng)建一個/usr/bin/python文件鏈接到python3.6程序,然后分別查看一下pip和pip3兩個命令文件中前兩行的內(nèi)容本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(5)Pip的安裝配置先創(chuàng)建一個/usr/bin/python文件鏈接到python3.6程序,然后分別查看一下pip和pip3兩個命令文件中前兩行的內(nèi)容本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(5)Pip的安裝配置分別修改一下/usr/bin/pip文件和/usr/bin/pip3兩個文件本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(5)Pip的安裝配置分別修改一下/usr/bin/pip文件和/usr/bin/pip3兩個文件本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(5)Pip的安裝配置現(xiàn)在可以驗證一下pip和pip3的設(shè)置是否達到了預(yù)期目標本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(5)Pip的安裝配置值得注意的是,假如后期升級了Pip包管理工具的版本,此時在終端窗體中執(zhí)行的pip或pip3命令就變成了/usr/local/bin目錄下的腳本程序,而不是當前/usr/bin目錄下的腳本程序。這種情況下,這兩個目錄中都同時存在pip和pip3的腳本程序,其中,前者目錄存放了舊的pip和pip3腳本程序,后者目錄存放了升級后的pip和pip3腳本程序。當執(zhí)行pip或pip3命令時,Linux操作系統(tǒng)具體會運行哪個目錄中的pip和pip3腳本程序,取決于PATH環(huán)境變量設(shè)置的目錄路徑的先后順序,排在前面的目錄會被優(yōu)先使用。通過執(zhí)行echo$PATH命令查看當前PATH環(huán)境變量的內(nèi)容得知,/usr/local/bin目錄默認是在/usr/bin目錄之前的,因此就會先搜索/usr/local/bin目錄。也就是說,升級后的pip和pip3命令的程序文件實際上都是來自/usr/local/bin目錄,只有清楚了這一點才不至于造成使用上的困惑如果升級了pip和pip3包管理工具,為了使python3.6和python3.8的原有設(shè)置繼續(xù)有效,就要再修改一下/usr/local/bin目錄中的pip和pip3這兩個腳本文件,修改的內(nèi)容都是將第1行設(shè)置為對應(yīng)的Python版本即可本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(5)Pip的安裝配置當pip包管理工具安裝配置好后,考慮到實際使用需要訪問網(wǎng)絡(luò)下載軟件,下面就將Pip包管理工具的軟件源改成國內(nèi)鏡像地址(如阿里云、清華鏡像站點等),以加快下載速度在新建的配置文件中加入下面的內(nèi)容(以清華鏡像站點為例):[global]index-url=/simpletrusted-host=[list]format=columns或者,也可設(shè)置為阿里鏡像站點:[global]index-url=/pypi/simpletrusted-host=[list]format=columns本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(5)Pip的安裝配置當pip鏡像源配置文件修改后,可以通過下面的命令驗證是否生效本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(6)Spark框架的目錄結(jié)構(gòu)當安裝好Spark后,在Spark的系統(tǒng)目錄中包含一系列的文件和子目錄,其中每個子目錄都有其特定的目的和用途本課件是可編輯的正常PPT課件Spark單機運行環(huán)境搭建(6)Spark框架的目錄結(jié)構(gòu)當安裝好Spark后,在Spark的系統(tǒng)目錄中包含一系列的文件和子目錄,其中每個子目錄都有其特定的目的和用途本課件是可編輯的正常PPT課件03Python核心語法概覽Python語言的核心語法要點本課件是可編輯的正常PPT課件Python核心語法概覽參考:/python3/python3-tutorial.html
本課件是可編輯的正常PPT課件單元內(nèi)容思維導(dǎo)圖本課件是可編輯的正常PPT課件第2章SparkRDD離線數(shù)據(jù)計算Spark大數(shù)據(jù)分析與實戰(zhàn)本課件是可編輯的正常PPT課件01RDD基本原理和編程模型0203目錄CONTENTS04Spark文件讀寫SparkRDD數(shù)據(jù)計算實例SparkRDD常用操作本課件是可編輯的正常PPT課件01RDD基本原理和編程模型RDD基本原理RDD編程模型本課件是可編輯的正常PPT課件RDD基本原理Dataset:海量數(shù)據(jù)集合,是一種過程性的數(shù)據(jù)集,用過的數(shù)據(jù)會被丟棄(除非緩存)Distributed:通過分區(qū)機制分散到不同計算節(jié)點Resilient:存儲在內(nèi)存或磁盤,容錯,動態(tài)分區(qū)Readonly:只讀,每次計算會生成新的RDDRDD(ResilientDistributedDataset,彈性分布式數(shù)據(jù)集)是Spark的核心設(shè)計理念,代表一個不可變、可分區(qū)且可在不同節(jié)點(計算機)并行計算的“數(shù)據(jù)集合”,是一種分布式計算模型的極佳數(shù)據(jù)抽象RDD是Spark的一個關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。一方面,RDD是一種可容納海量數(shù)據(jù)的集合;另一方面,RDD的數(shù)據(jù)元素是分布式的,這意味著數(shù)據(jù)可位于不同計算機的內(nèi)存中,但在邏輯上仍屬于一個整體,使用起來也和普通的集合沒太大差異本課件是可編輯的正常PPT課件RDD數(shù)據(jù)集在實現(xiàn)上被劃分成多個分區(qū)(即分組),這些分區(qū)數(shù)據(jù)可單獨分配到不同的計算節(jié)點上,從而實現(xiàn)分布式計算的功能當Spark讀取文件時,每個數(shù)據(jù)塊被轉(zhuǎn)換為RDD的一個分區(qū),這些分區(qū)共同構(gòu)成完整的RDD數(shù)據(jù)集。RDD的每個分區(qū)數(shù)據(jù)之所以能在不同計算節(jié)點上處理。雖然RDD數(shù)據(jù)集在邏輯上是一個整體,但在形態(tài)上是以“分區(qū)”為單位將數(shù)據(jù)塊分散到不同節(jié)點上去計算處理的RDD基本原理本課件是可編輯的正常PPT課件RDD編程模型RDD的編程模型類似一種流水線的操作,流水線上生成的各RDD經(jīng)過反復(fù)迭代計算,會源源不斷產(chǎn)生新的RDD。自RDD的創(chuàng)建開始,中間經(jīng)過若干次的Transformation迭代,直到Action為止,這樣就能得到處理后的結(jié)果數(shù)據(jù),整個計算過程即宣告結(jié)束Spark主要支持兩類與RDD相關(guān)的操作:Transformation(轉(zhuǎn)換)算子和Action(行動)算子轉(zhuǎn)換算子,是指一個在RDD數(shù)據(jù)集上的并行化方法的調(diào)用,它們都是RDD對象上的方法,形式上類似普通Python對象方法,但能夠支持在集群節(jié)點上并行執(zhí)行。當轉(zhuǎn)換算子作用于RDD時,會生成一個新的RDD,比如map、filter、reduceByKey等都是轉(zhuǎn)換算子行動算子是用來真正啟動執(zhí)行RDD轉(zhuǎn)換計算的,并將產(chǎn)生的結(jié)果數(shù)據(jù)返回應(yīng)用程序或保存到磁盤,像collect、saveAsTextFile等都是行動算子本課件是可編輯的正常PPT課件RDD編程模型RDD的轉(zhuǎn)換操作采取了一種稱為“l(fā)azy”的延遲計算工作模式,即延遲執(zhí)行。也就是說,調(diào)用RDD的轉(zhuǎn)換算子,并不會被立即提交到CPU上執(zhí)行,只有在遇到RDD的行動算子時,才會開始啟動整個RDD計算鏈的執(zhí)行,所以行動算子也可以被看成觸發(fā)RDD轉(zhuǎn)換計算執(zhí)行的一個“發(fā)令槍”RDD的轉(zhuǎn)換操作,實際只是一系列的計算步驟,類似于“工作計劃”,只有等到執(zhí)行RDD行動算子時,才會啟動真正的運行。正是這種設(shè)計,Spark在實際執(zhí)行RDD的數(shù)據(jù)元素計算之前,可以先優(yōu)化整個計算鏈本課件是可編輯的正常PPT課件RDD編程模型Spark支持的RDD功能操作,可在pyspark命令啟動的PySparkShell交互式編程環(huán)境中查看在“.”之后連續(xù)按兩次Tab鍵,此時終端會列出所有在RDD數(shù)據(jù)集上支持的Transformation(轉(zhuǎn)換)操作和Action(行動)操作PySparkShell編程環(huán)境支持自動補全內(nèi)容,這意味著用戶只需輸入部分代碼的關(guān)鍵字母,比如rdd.co,然后按Tab鍵,系統(tǒng)會自動補全以co開頭的方法。如果以co開頭的方法不只有一個,PySparkShell就會把它們?nèi)苛谐鰜?,在這種情形下,只需繼續(xù)輸入方法的其他關(guān)鍵字母直到能區(qū)分出來為止,再次按Tab鍵后,完整的方法名字就自動補全了本課件是可編輯的正常PPT課件02SparkRDD常用操作RDD的創(chuàng)建RDD的轉(zhuǎn)換操作(Transformation)RDD的行動操作(Action)本課件是可編輯的正常PPT課件RDD的創(chuàng)建在使用RDD對數(shù)據(jù)進行處理之前,一般要先準備好數(shù)據(jù)源。Spark為用戶設(shè)計了各種方便得到初始RDD的途徑,包括從普通Python集合創(chuàng)建RDD(List列表數(shù)組、Touple元組、Set集合等)、從外部文件創(chuàng)建RDD(本地文件、HDFS系統(tǒng)文件等)(1)從集合元素創(chuàng)建RDD這里創(chuàng)建的RDD返回的是一個ParallelCollectionRDD類型的對象,代表“并行化的集合”,可以跨機器分散到不同節(jié)點上,而Python集合只能是一個整體,且只能在一臺機器上存放本課件是可編輯的正常PPT課件RDD的創(chuàng)建(1)從集合元素創(chuàng)建RDDRDD的并行能力也是通過內(nèi)部的分區(qū)機制來實現(xiàn)的,在使用parallelize()方法創(chuàng)建RDD時,也可以明確指定分區(qū)的數(shù)量,若不指定則會按默認的分區(qū)數(shù)處理本課件是可編輯的正常PPT課件RDD的創(chuàng)建代碼中的parallelize()方法的第2個參數(shù)用于指定該RDD的數(shù)據(jù)元素被組織為多少個分區(qū),這樣每個分區(qū)的數(shù)據(jù)就可以被獨立發(fā)送到不同的計算節(jié)點實現(xiàn)并行處理。當然,如果不提供這個參數(shù),Spark則會使用默認的分區(qū)數(shù)(1)從集合元素創(chuàng)建RDDRDD的分區(qū)可理解為RDD數(shù)據(jù)的子集,只不過它只是Spark的一種內(nèi)部實現(xiàn)機制,就像一個班級學(xué)生中的小組一樣,而且它也不影響外部對RDD數(shù)據(jù)集本身的處理和使用本課件是可編輯的正常PPT課件RDD的創(chuàng)建(2)從文本文件創(chuàng)建RDD使用普通集合元素創(chuàng)建RDD,只適合在對代碼進行功能測試時使用,大部分情況下還是要通過文件來創(chuàng)建RDD的本課件是可編輯的正常PPT課件RDD的創(chuàng)建(2)從文本文件創(chuàng)建RDD將準備好的數(shù)據(jù)文件上傳至HDFS的目錄中這里先使用jps命令查看HDFS服務(wù)相關(guān)進程(NameNode、SecondaryNameNode、DataNode)是否存在,如果不存在則需執(zhí)行HDFS的啟動命令。如果HDFS上已有mydata文件夾,則還需執(zhí)行hdfsdfs-rm-r-f/mydata命令將其刪除,再上傳,否則會遇到錯誤本課件是可編輯的正常PPT課件RDD的創(chuàng)建(2)從文本文件創(chuàng)建RDD將準備好的數(shù)據(jù)文件上傳至HDFS的目錄中這里先使用jps命令查看HDFS服務(wù)相關(guān)進程(NameNode、SecondaryNameNode、DataNode)是否存在,如果不存在則需執(zhí)行HDFS的啟動命令。如果HDFS上已有mydata文件夾,則還需執(zhí)行hdfsdfs-rm-r-f/mydata命令將其刪除,再上傳,否則會遇到錯誤本課件是可編輯的正常PPT課件RDD的創(chuàng)建(2)從文本文件創(chuàng)建RDD數(shù)據(jù)文件準備好以后,可以回到PySparkShell編程環(huán)境通過代碼創(chuàng)建RDD可以在生成的RDD上調(diào)用collect()方法驗證一下數(shù)據(jù)元素的內(nèi)容,以確定文件數(shù)據(jù)是否讀取成功本課件是可編輯的正常PPT課件RDD的創(chuàng)建(2)從文本文件創(chuàng)建RDD通過讀取文本數(shù)據(jù)文件得到的RDD,其中的每個元素對應(yīng)文件的每一行
通過文本文件創(chuàng)建RDD,使用textFile()方法文件的一行,是RDD的一條數(shù)據(jù)元素每個元素是一個字符串本課件是可編輯的正常PPT課件RDD的轉(zhuǎn)換操作(Transformation)RDD的轉(zhuǎn)換操作包括map、flatMap、filter、sortBy、distinct、reduceByKey等,它們是“延遲執(zhí)行”的,在調(diào)用時不會立即產(chǎn)生結(jié)果,因為轉(zhuǎn)換算子只是一個操作步驟或轉(zhuǎn)換計劃,需要通過調(diào)用行動算子才會觸發(fā)這些轉(zhuǎn)換操作的真正執(zhí)行。RDD轉(zhuǎn)換操作返回的總是一個新的RDD,原RDD不會發(fā)生改變,因此通常要用一個新變量來賦值接收它,或在其上繼續(xù)調(diào)用其他方法(鏈式調(diào)用)(1)map轉(zhuǎn)換數(shù)據(jù)一般來說,map操作幾乎在每個數(shù)據(jù)處理的任務(wù)中都會用到。map一詞意為“映射”“變換”,用來對RDD數(shù)據(jù)集的每個元素“應(yīng)用指定的處理函數(shù)”并返回新的元素,從而構(gòu)成一個新的RDD本課件是可編輯的正常PPT課件RDD的轉(zhuǎn)換操作(Transformation)(1)map轉(zhuǎn)換數(shù)據(jù)map算子可以對RDD數(shù)據(jù)集的元素進行任意的處理變換本課件是可編輯的正常PPT課件RDD的轉(zhuǎn)換操作(Transformation)(1)map轉(zhuǎn)換數(shù)據(jù)在使用map算子時,如果只是簡單的處理,傳入一個lambda表達式作為方法的參數(shù)即可,但如果要對RDD數(shù)據(jù)進行較復(fù)雜處理的話,最好還是定義一個普通函數(shù)。比如,上面這個例子的代碼可以改成下面的形式在使用map算子調(diào)用內(nèi)置或自定義的函數(shù)時,可以寫成map(lambdax:trans(x)),或直接簡化為map(trans),前提是trans()函數(shù)只有一個用來代表RDD元素的參數(shù)本課件是可編輯的正常PPT課件RDD的轉(zhuǎn)換操作(Transformation)(1)map轉(zhuǎn)換數(shù)據(jù)在對RDD進行轉(zhuǎn)換時,還可以根據(jù)需要多次調(diào)用map算子,這個過程也會產(chǎn)生一系列新的RDD數(shù)據(jù)集本課件是可編輯的正常PPT課件RDD的轉(zhuǎn)換操作(Transformation)(2)flatMap轉(zhuǎn)換數(shù)據(jù)flapMap算子與map算子具有類似的功能,但會再將生成的RDD數(shù)據(jù)集去掉一層內(nèi)部的嵌套(集合拆解),相當于先map再flat處理,故要求生成的中間元素必須是一個可循環(huán)迭代的集合(List/Set/Touple等),然后在此基礎(chǔ)上對這個集合進行拆解,并將拆解后的元素合并到一起構(gòu)成一個新的RDD數(shù)據(jù)集map與flapMap區(qū)別:flatMap會對生成的元素集合多一次拆分,即展平。所以,要求數(shù)據(jù)轉(zhuǎn)換后得到的元素必須是可拆分的集合本課件是可編輯的正常PPT課件RDD的轉(zhuǎn)換操作(Transformation)(2)flatMap轉(zhuǎn)換數(shù)據(jù)如果flatMap處理后的數(shù)據(jù)不能再拆解,那么執(zhí)行就會報錯由運行結(jié)果可知,map()方法的執(zhí)行是正常的,而flatMap()方法的執(zhí)行卻出現(xiàn)了錯誤,原因是rdd1的數(shù)據(jù)元素經(jīng)過“加1變換”得到的仍是普通的數(shù)字元素,無法進行進一步拆解本課件是可編輯的正常PPT課件RDD的轉(zhuǎn)換操作(Transformation)(3)filter篩選數(shù)據(jù)在面對現(xiàn)實問題中的海量數(shù)據(jù)時,要盡早地對數(shù)據(jù)進行篩選、過濾,以降低數(shù)據(jù)規(guī)模從而提高效率,所以也有“早篩選,勤過濾”的說法本課件是可編輯的正常PPT課件RDD的轉(zhuǎn)換操作(Transformation)(4)sortBy排序數(shù)據(jù)Spark提供了在大數(shù)據(jù)分析中進行排序的功能算子,包括sortBy和sortByKey等,其中sortBy是一個通用排序算子,意為“按…進行排序”,而sortByKey只能針對(K,V)鍵值對類型的元素進行排序,即“按key值進行排序”本課件是可編輯的正常PPT課件RDD的轉(zhuǎn)換操作(Transformation)(4)sortBy排序數(shù)據(jù)Spark提供了在大數(shù)據(jù)分析中進行排序的功能算子,包括sortBy和sortByKey等,其中sortBy是一個通用排序算子,意為“按…進行排序”,而sortByKey只能針對(K,V)鍵值對類型的元素進行排序,即“按key值進行排序”本課件是可編輯的正常PPT課件RDD的轉(zhuǎn)換操作(Transformation)(5)distinct去重數(shù)據(jù)在數(shù)據(jù)清洗工作中,經(jīng)常會出現(xiàn)某些數(shù)據(jù)重復(fù)的情況。如果重復(fù)數(shù)據(jù)沒必要保留,就可以將這些數(shù)據(jù)刪除,以減少后續(xù)處理的工作量本課件是可編輯的正常PPT課件RDD的轉(zhuǎn)換操作(Transformation)(6)
union合并數(shù)據(jù)Spark提供的union算子可以將來源不同的數(shù)據(jù)合并到一起進行處理,不過union算子合并的元素如果有重復(fù)的,則重復(fù)元素會在新數(shù)據(jù)集中同時存在,因此有時也會結(jié)合distinct算子進行去重本課件是可編輯的正常PPT課件RDD的轉(zhuǎn)換操作(Transformation)(7)
intersection數(shù)據(jù)交集對不同的數(shù)據(jù)集來說,如果希望找出它們當中包含的相同元素,可以在代碼中使用intersection算子,它的功能相當于數(shù)學(xué)上兩個集合的“交集”操作。如果兩個數(shù)據(jù)集沒有任何公共元素,就會得到一個空集本課件是可編輯的正常PPT課件RDD的轉(zhuǎn)換操作(Transformation)(8)subtract數(shù)據(jù)差集subtract算子可以用來對兩個數(shù)據(jù)集進行差集(減法)運算,基本原理是將第1個數(shù)據(jù)集的元素減去“兩個數(shù)據(jù)集的交集”,得到新的RDD。如果兩個RDD沒有任何相同的元素,則得到的結(jié)果內(nèi)容與第1個RDD相同本課件是可編輯的正常PPT課件RDD的轉(zhuǎn)換操作(Transformation)(9)groupBy分組數(shù)據(jù)如果在一個數(shù)據(jù)集中,希望對數(shù)據(jù)元素依據(jù)某種規(guī)則進行分類組織,以便做出針對性的處理,groupBy算子就是為此目的而設(shè)計的本課件是可編輯的正常PPT課件RDD的轉(zhuǎn)換操作(Transformation)(10)groupByKey分組數(shù)據(jù)對于元素本身就是(K,V)鍵值對的數(shù)據(jù)集來說,Spark提供了直接處理這種數(shù)據(jù)的groupByKey算子,它按照RDD元素的key進行分組,那些具有相同key元素的value值被拼裝到一個可迭代對象中本課件是可編輯的正常PPT課件RDD的轉(zhuǎn)換操作(Transformation)(11)reduceByKey歸并數(shù)據(jù)Spark提供的reduceByKey算子可以將key相同的元素,通過對這些元素的value執(zhí)行歸并計算“歸并”(歸類+合并計算)變成新的元素,相當于在groupByKey的基礎(chǔ)上,增加了額外的處理功能使用reduceByKey算子對數(shù)據(jù)集進行合并,通常要比groupByKey與sum()等函數(shù)一起使用的性能更好更合理,更為常用本課件是可編輯的正常PPT課件RDD的轉(zhuǎn)換操作(Transformation)(12)sortByKey排序數(shù)據(jù)sortBy它用來對任意類型的RDD元素進行排序,是一個通用的排序算子,對于(K,V)鍵值對形式的RDD數(shù)據(jù)集,還可以使用sortByKey算子進行排序本課件是可編輯的正常PPT課件RDD的轉(zhuǎn)換操作(Transformation)(13)
keys和values操作RDD的keys()和values()方法可以用來分別獲?。↘,V)鍵值對數(shù)據(jù)集的所有元素的key值和value值,返回的也都是RDD數(shù)據(jù)集本課件是可編輯的正常PPT課件RDD的轉(zhuǎn)換操作(Transformation)(14)
mapValues和flatMapValues操作mapValues和flatMapValues算子用來把(K,V)鍵值對元素的value值傳給一個函數(shù)或lambda表達式處理,返回結(jié)果再與原key組合成一個新的元素本課件是可編輯的正常PPT課件RDD的轉(zhuǎn)換操作(Transformation)(14)
mapValues和flatMapValues操作mapValues和flatMapValues算子用來把(K,V)鍵值對元素的value值傳給一個函數(shù)或lambda表達式處理,返回結(jié)果再與原key組合成一個新的元素本課件是可編輯的正常PPT課件RDD的轉(zhuǎn)換操作(Transformation)(15)join連接類操作Spark提供了join、leftOuterJoin、rightOuterJion、fullOuterJoin等連接類的算子,效果與SQL的表連接功能類似。其中join為內(nèi)連接,leftOuterJoin為左外連接,rightOuterJion為右外連接,fullOuterJoin為全外連接,這4個算子都是針對(K,V)鍵值對形式的RDD數(shù)據(jù)集進行操作的。這里對最常用的內(nèi)連接進行簡單介紹,其它作為了解即可本課件是可編輯的正常PPT課件RDD的轉(zhuǎn)換操作(Transformation)(16)zip操作zip算子的作用是將第1個RDD的每個元素作為key,第2個RDD對應(yīng)位置的元素作為value,組合成(K,V)鍵值對形式的新數(shù)據(jù)集,要求參與運算的兩個RDD元素的個數(shù)必須相同本課件是可編輯的正常PPT課件RDD的轉(zhuǎn)換操作(Transformation)(16)zip操作zip算子的作用是將第1個RDD的每個元素作為key,第2個RDD對應(yīng)位置的元素作為value,組合成(K,V)鍵值對形式的新數(shù)據(jù)集,要求參與運算的兩個RDD元素的個數(shù)必須相同本課件是可編輯的正常PPT課件(1)collect操作Spark應(yīng)用程序代碼是被提交給集群中的Driver進程執(zhí)行的,collect會將各節(jié)點的RDD計算結(jié)果通過網(wǎng)絡(luò)“收集匯總”形成一個本地計算機的數(shù)據(jù)集合。開發(fā)階段使用collect觀察RDD的數(shù)據(jù)元素非常便利,但并不適用于正式場合,一般要將計算結(jié)果保存到HDFS或數(shù)據(jù)庫等持久化的存儲中,比如saveAsTextFile等RDD的行動操作(Action)RDD的行動操作是用來啟動RDD數(shù)據(jù)轉(zhuǎn)換的計算過程并返回結(jié)果。
因為RDD的所有轉(zhuǎn)換操作都是“延遲”進行的,轉(zhuǎn)換操作只是一個執(zhí)行計劃,此時Spark相當于記住了整個轉(zhuǎn)換操作形成的計算流程,直至遇到如collect、count等這類行動算子時,才會開始真正的運行,并最終生成所需的結(jié)果本課件是可編輯的正常PPT課件(1)collect操作Spark在對RDD數(shù)據(jù)進行計算時還可以指定分區(qū)數(shù),以便將分區(qū)數(shù)據(jù)分配到不同的CPU核或計算節(jié)點上運行。如果希望查看數(shù)據(jù)在RDD分區(qū)中的分布情況,則可以先調(diào)用glom()方法再使用collect()方法RDD的行動操作(Action)這里的rdd1在創(chuàng)建時指定了分區(qū)數(shù)為3,collect()方法得到的是全部元素,而glom()方法得到的則是每個分區(qū)包含的元素本課件是可編輯的正常PPT課件(2)take操作除了collect算子,還可以使用take獲取RDD的前n條數(shù)據(jù)。take和collect的使用方法類似,都是需要先將RDD的數(shù)據(jù)從集群節(jié)點匯聚到Driver進程的內(nèi)存。所以,take算子也只適用于數(shù)據(jù)量較小的情形,不適用于具有海量數(shù)據(jù)的場合RDD的行動操作(Action)本課件是可編輯的正常PPT課件(3)
first操作如果只是希望觀察RDD數(shù)據(jù)的情況,比如只看一條數(shù)據(jù),此時可以使用first算子來實現(xiàn),其適用于數(shù)據(jù)量大的場合,不像collect、take算子那樣需要先將RDD的數(shù)據(jù)元素全部匯集到一起RDD的行動操作(Action)在這個例子中,直接返回集合中的第1個元素。不過,如果是對一個空的RDD執(zhí)行first()方法,則會報錯誤信息本課件是可編輯的正常PPT課件(4)count/countByValue操作count算子用來獲取RDD的數(shù)據(jù)元素個數(shù),countByValue用來計算RDD數(shù)據(jù)集中每種元素的數(shù)量。對于(K,V)鍵值對形式的RDD來說,用戶還可以使用countByKey算子計算每種key的元素個數(shù)RDD的行動操作(Action)本課件是可編輯的正常PPT課件(5)max/min/sum/mean操作在對數(shù)據(jù)進行分析時,經(jīng)常要統(tǒng)計最大值、最小值,以及計算數(shù)據(jù)元素的累加和、計算數(shù)據(jù)序列的平均值RDD的行動操作(Action)本課件是可編輯的正常PPT課件03SparkRDD數(shù)據(jù)計算實例詞頻統(tǒng)計基本TopN問題用戶消費數(shù)據(jù)處理本課件是可編輯的正常PPT課件詞頻統(tǒng)計1.需求分析詞頻統(tǒng)計的基本原理,是在一系列包含單詞的數(shù)據(jù)集中,統(tǒng)計出每個單詞出現(xiàn)的總次數(shù)。比如上面截圖部分的and總共出現(xiàn)了4次,其它單詞也是同樣的道理使用Spark統(tǒng)計LICENSE-py4j.txt文件中所包含單詞的出現(xiàn)次數(shù)本課件是可編輯的正常PPT課件詞頻統(tǒng)計2.解決思路每次讀取文件一行得到一個RDD元素,每個元素即為文件行的字符串對每一行字符串包含的單詞進行拆分,得到各個一個單詞集合。每一行的單詞集通過flat合并成一個總的集合設(shè)定集合中的每個單詞附帶一個數(shù)字信息1,表明該詞出現(xiàn)了1次將每個相同單詞的數(shù)字1累加,結(jié)果即為該詞出現(xiàn)的總次數(shù)獲取處理完畢的詞匯列表本課件是可編輯的正常PPT課件3.編程實現(xiàn)詞頻統(tǒng)計本課件是可編輯的正常PPT課件3.編程實現(xiàn)詞頻統(tǒng)計的實現(xiàn)代碼還可簡化為下面的鏈式調(diào)用形式,其原理是用變量的賦值部分,替換代碼中的變量名字詞頻統(tǒng)計本課件是可編輯的正常PPT課件基本TopN問題所謂TopN是指在一系列已有的數(shù)據(jù)中得到N個目標的問題,這種需求很常見。如果數(shù)據(jù)量不大,使用類似Excel這樣的辦公軟件就很容易解決,但對于大數(shù)據(jù)的場合這種方式就行不通了,一方面,單臺計算機的內(nèi)存無法同時裝載這么多數(shù)據(jù);另一方面,處理數(shù)據(jù)的時間可能變得難以接受(1)假設(shè)有一小批量的學(xué)生信息,包括學(xué)號、姓名、年齡、分數(shù)字段,現(xiàn)在需要找出前兩名學(xué)生。為簡化起見,若存在學(xué)生分數(shù)相同的情況則任取。本課件是可編輯的正常PPT課件基本TopN問題(2)
通用分治策略假設(shè)數(shù)據(jù)量非常大,雖然sortBy會在每個節(jié)點上對所負責(zé)的分區(qū)數(shù)據(jù)排序,但take算子還要將排好序的所有數(shù)據(jù)匯聚到Driver進程的節(jié)點上,顯然不合適。為了利用Spark分布式計算的優(yōu)勢,考慮采取“分治”策略,先在每個分區(qū)上計算局部的TopN,然后再獲取全局的TopN,即:每個節(jié)點對分區(qū)數(shù)據(jù)進行排序,然后各取前2條數(shù)據(jù)匯總到Driver進程,再獲取最終的前2條數(shù)據(jù),大大減少中間數(shù)據(jù)在節(jié)點之間的傳輸時間和處理壓力本課件是可編輯的正常PPT課件基本TopN問題(2)
通用分治策略代碼實現(xiàn)本課件是可編輯的正常PPT課件用戶消費數(shù)據(jù)處理現(xiàn)在假定有一批商品購買的消費樣本數(shù)據(jù)保存在buying.txt文件中,其中每行代表一個商品訂單,具體包括用戶名、下單日期、消費金額字段(字段之間以逗號分隔)(1)計算每個用戶的總消費金額,并按從大到小的順序排列。(2)統(tǒng)計哪些用戶購買了商品,下單日期都有哪些。(3)統(tǒng)計每個用戶消費的最大一筆訂單金額。本課件是可編輯的正常PPT課件用戶消費數(shù)據(jù)處理(1)首先考慮一下文件數(shù)據(jù),假定這個文件存儲在當前主目錄(/home/spark)中,因為數(shù)據(jù)格式是固定的,內(nèi)容也比較簡單,所以可以先將文件數(shù)據(jù)轉(zhuǎn)換成RDD,然后把RDD的字符串元素(對應(yīng)每行)通過逗號分隔將其中的各個字段值分離出來第1個問題主要關(guān)注兩個方面的字段,即用戶名和消費金額。為了統(tǒng)計每個用戶的總消費金額,應(yīng)把分離出來的消費金額字段從字符串轉(zhuǎn)換成浮點數(shù)才能進行計算本課件是可編輯的正常PPT課件用戶消費數(shù)據(jù)處理(2)第2個問題關(guān)注的是用戶名和下單日期這兩個字段,因此只需將原數(shù)據(jù)行中的用戶名字段和下單日期字段提取出來去重即可本課件是可編輯的正常PPT課件用戶消費數(shù)據(jù)處理(3)第3個問題,為了統(tǒng)計每個用戶消費的最大一筆訂單金額,我們可以先對每個用戶的消費記錄進行分組,然后獲取每個用戶組的最大值即可本課件是可編輯的正常PPT課件04Spark文件的讀/寫文本文件的讀寫SequenceFile文件的讀寫本課件是可編輯的正常PPT課件文本文件的讀寫(1)textFile讀取文本數(shù)據(jù)Spark的textFile算子可以用于讀取來自文件系統(tǒng)的數(shù)據(jù),回顧詞頻統(tǒng)計案例中從文本文件返回的RDD,每個數(shù)據(jù)元素對應(yīng)文本文件的一行“字符串”內(nèi)容。也就是說,數(shù)據(jù)文件有多少行,返回的數(shù)據(jù)集就有多少個”行字符串”元素本課件是可編輯的正常PPT課件文本文件的讀寫(2)saveAsTextFile保存到文本文件當把數(shù)據(jù)處理結(jié)果保存到文件(如本地文件、HDFS等)時,saveAsTextFile以文本文件的形式存儲,它和collect都是行動算子。保存時每個元素將作為單獨一行寫入文本文件中。也就是說,RDD有多少個元素,最終保存的文本文件總共就有多少行上述代碼構(gòu)造了包含9999個整數(shù)元素的rdd1,并按默認分區(qū)數(shù)將其保存至本地目錄file:///home/spark/output1/,然后rdd1重新進行分區(qū)并轉(zhuǎn)換為rdd2,分區(qū)數(shù)被調(diào)整為4,以同樣的方式將其保存至本地目錄file:///home/spark/output2/本課件是可編輯的正常PPT課件文本文件的讀寫(2)saveAsTextFile保存到文本文件保存目錄output1文件夾中的數(shù)據(jù)文件有2個,而output2文件夾中的數(shù)據(jù)文件有4個,數(shù)據(jù)文件個數(shù)與RDD的分區(qū)數(shù)有關(guān),其中
溫馨提示
- 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 扶貧冷庫實施方案
- 工程勘察行業(yè)效益分析報告
- 農(nóng)場動手項目實施方案
- 2個專題實施方案
- 結(jié)對扶優(yōu)工作方案
- 廚房環(huán)境治理工作方案
- 實訓(xùn)室建設(shè)競標方案
- 加強內(nèi)部控制實施方案
- 藥品行業(yè)特征分析報告
- 盛達礦業(yè)行業(yè)分析報告
- 2025福建省安全員C證考試(專職安全員)題庫附答案
- 中國話語體系中的國際傳播話語創(chuàng)新策略分析課題申報書
- 2026中國電氣裝備集團有限公司高層次人才招聘筆試備考試題及答案解析
- 消防知識培訓(xùn)宣傳課件
- 2025-2026學(xué)年通-用版英語 高一上學(xué)期期末試題(含聽力音頻答案)
- 2025年國家基本公共衛(wèi)生服務(wù)考試試題(附答案)
- 25秋蘇教三年級上冊數(shù)學(xué)期末押題卷5套(含答案)
- 局部晚期腫瘤免疫放療新策略
- 食品加工廠乳制品設(shè)備安裝方案
- 高考英語3500詞分類整合記憶手冊(含完整中文釋義)
- 地球物理勘探與軍事勘察技術(shù)研究
評論
0/150
提交評論