Spark大數(shù)據(jù)技術(shù)與應(yīng)用案例教程01-項目一:Spark入門_第1頁
Spark大數(shù)據(jù)技術(shù)與應(yīng)用案例教程01-項目一:Spark入門_第2頁
Spark大數(shù)據(jù)技術(shù)與應(yīng)用案例教程01-項目一:Spark入門_第3頁
Spark大數(shù)據(jù)技術(shù)與應(yīng)用案例教程01-項目一:Spark入門_第4頁
Spark大數(shù)據(jù)技術(shù)與應(yīng)用案例教程01-項目一:Spark入門_第5頁
已閱讀5頁,還剩151頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Spark大數(shù)據(jù)技術(shù)與應(yīng)用案例教程主講教師:目錄項目一Spark入門項目二SparkRDD——彈性分布式數(shù)據(jù)集項目三SparkSQL——結(jié)構(gòu)化數(shù)據(jù)處理項目四SparkStreaming——實時計算框架目錄項目五SparkMLlib——機器學(xué)習(xí)庫項目六GraphFrames——圖計算框架項目七綜合案例——分析銀行個人信貸

業(yè)務(wù)數(shù)據(jù)項目一Spark入門任務(wù)一搭建Spark單機環(huán)境任務(wù)二搭建Spark集群環(huán)境任務(wù)三開發(fā)并運行應(yīng)用程序第6頁隨著互聯(lián)網(wǎng)和物聯(lián)網(wǎng)技術(shù)的發(fā)展,人們產(chǎn)生和創(chuàng)造的數(shù)據(jù)呈爆炸式增長。傳統(tǒng)的大數(shù)據(jù)處理框架HadoopMapReduce已無法滿足人們對大規(guī)模數(shù)據(jù)的處理需求,因此一個更加高效的、用于處理大規(guī)模數(shù)據(jù)的、開源的分布式計算框架Spark誕生了。本項目將介紹Spark的相關(guān)知識,搭建Spark單機環(huán)境和集群環(huán)境,開發(fā)并運行應(yīng)用程序。第7頁了解Spark的發(fā)展歷程、特點與應(yīng)用場景。熟悉Spark的生態(tài)系統(tǒng)、運行架構(gòu)與運行基本流程。掌握Spark的部署模式、PySpark命令與運行應(yīng)用程序的方法。第8頁了解Spark的發(fā)展歷程、特點與應(yīng)用場景。熟悉Spark的生態(tài)系統(tǒng)、運行架構(gòu)與運行基本流程。掌握Spark的部署模式、PySpark命令與運行應(yīng)用程序的方法。第9頁增強遵守規(guī)則的意識,養(yǎng)成按規(guī)矩行事的習(xí)慣。加強基礎(chǔ)知識的學(xué)習(xí),實現(xiàn)從量變到質(zhì)變的轉(zhuǎn)化,為個人的長遠發(fā)展打下基礎(chǔ)。任務(wù)一搭建Spark單機環(huán)境第11頁不同的運行環(huán)境已搭建完成,接下來就可以開發(fā)并運行應(yīng)用程序了。在此之前,需要選擇合適的編程語言和開發(fā)工具,學(xué)習(xí)常用的PySpark命令,并掌握采用不同的部署模式運行應(yīng)用程序的方法。本任務(wù)結(jié)合身份證戶籍地查詢案例,在PyCharm中開發(fā)Spark應(yīng)用程序,并分別在Spark本地環(huán)境和集群環(huán)境中運行應(yīng)用程序。Spark官方網(wǎng)站對其的定義是“ApacheSpark是專為大規(guī)模數(shù)據(jù)處理而設(shè)計的快速通用的計算引擎”。由于Spark是UCBerkeleyAMPlaboratory(加州大學(xué)伯克利分校的AMP實驗室)開源的類HadoopMapReduce的通用并行框架,是一個基于內(nèi)存計算、支持分布式計算和并行計算的大數(shù)據(jù)處理框架。第12頁一、Spark的發(fā)展歷程第13頁一、Spark的發(fā)展歷程Spark提供了豐富的工具和API,可以用于結(jié)構(gòu)化數(shù)據(jù)處理、流數(shù)據(jù)處理、機器學(xué)習(xí)及圖形處理等多種場景。Spark的發(fā)展歷程如表所示。時間點說明2009年提供一個更快、更靈活、更易用的分布式計算框架,以便更好地進行大規(guī)模數(shù)據(jù)處理和機器學(xué)習(xí)等任務(wù)2010年Spark正式發(fā)布開源代碼2013年Spark成為Apache軟件基金會的孵化器項目,解決了一些bug,增加了新的功能,并改進了可用性問題2014年Spark成為Apache軟件基金會的頂級開源項目之一,并發(fā)布了第一個穩(wěn)定版本Spark1.0.0第14頁一、Spark的發(fā)展歷程2015年Spark1.5.x系列版本發(fā)布,提升了Spark的性能,增加了一些機器學(xué)習(xí)算法和工具等,使得Spark變得更為全面和強大2016年Spark2.0.x系列版本發(fā)布,大幅度改進了API兼容性和查詢優(yōu)化器,支持結(jié)構(gòu)化的流數(shù)據(jù)處理2017年Spark2.2.x系列版本發(fā)布,更新內(nèi)容主要針的是系統(tǒng)的可用性、穩(wěn)定性及代碼潤色2018年Spark2.4.x系列版本發(fā)布,進一步改進了流數(shù)據(jù)處理和機器學(xué)習(xí)功能,并集成了更多的深度學(xué)習(xí)框架時間點說明第15頁一、Spark的發(fā)展歷程時間點說明2020年Spark3.0.0版本發(fā)布,能夠更好地支持Python和R語言,并提供了更強大的分布式SQL查詢引擎。加強了與ApacheArrow、DeltaLake等數(shù)據(jù)處理技術(shù)的集成2021年Spark3.1.1版本發(fā)布,提升了Python的可用性,增強了ANSISQL兼容性,加強了查詢優(yōu)化等2022年Spark3.3.0版本發(fā)布,提升了查詢性能,簡化了從傳統(tǒng)數(shù)據(jù)倉庫的遷移,提升效率2023年Spark3.4.0版本引入Python客戶端,增強結(jié)構(gòu)化數(shù)據(jù)流,增加PandasAPI的覆蓋范圍,提供Numpy輸入支持,通過內(nèi)存分析提高開發(fā)效率和可調(diào)用性等第16頁二、Spark的特點Spark是與HadoopMapReduce類似的通用并行計算框架,它擁有HadoopMapReduce所具有的優(yōu)點,如高可靠、高擴展、高容錯等。同時,Spark還兼容HDFS、Hive等,可以很好地與Hadoop系統(tǒng)融合,從而彌補HadoopMapReduce高延遲的性能缺點。Spark的特點可以歸納為以下幾點:第17頁二、Spark的特點Spark基于內(nèi)存的運算效率快了100倍以上,基于磁盤的運算效率快了10倍以上。Spark充分利用內(nèi)存對數(shù)據(jù)進行計算,減少了對磁盤的讀寫操作,從而提高了Spark的計算效率。(1)速度快第18頁二、Spark的特點Spark支持Python、Scala、Java和R等多種編程語言,并提供了80多種高階算法。此外,研究人員可以通過PySpark或SparkShell進行交互式編程。(2)易用性好第19頁二、Spark的特點Spark提供了多種完善的組件,如交互式查詢(SparkSQL)、實時流處理(SparkStreaming)、機器學(xué)習(xí)庫(SparkMLlib)和圖計算(SparkGraphX)。Spark支持上述組件在同一個應(yīng)用程序中無縫地結(jié)合使用,減少了大數(shù)據(jù)開發(fā)和維護的人力成本和部署平臺的物力成本。(3)通用性強第20頁二、Spark的特點Spark可以運行于獨立的集群模式中,也可以運行于Hadoop中,還可以運行于AmazonEC2(亞馬遜彈性計算云)等云環(huán)境中。對于數(shù)據(jù)源而言,Spark可以從HDFS、HBase、Cassandra、Hive等多種途徑讀取數(shù)據(jù)。(4)運行模式多樣第21頁三、Spark的應(yīng)用場景Spark功能強大,其應(yīng)用場景也十分廣泛。從宏觀角度出發(fā),可以將Spark的應(yīng)用場景歸納為數(shù)據(jù)科學(xué)應(yīng)用和數(shù)據(jù)處理應(yīng)用。第22頁數(shù)據(jù)科學(xué)應(yīng)用三、Spark的應(yīng)用場景Spark可以用來進行數(shù)據(jù)分析和建模。在數(shù)據(jù)分析方面,Spark提供了豐富的API來支持各種數(shù)據(jù)操作,如數(shù)據(jù)清洗、轉(zhuǎn)換、篩選、聚合等。數(shù)據(jù)科學(xué)家對數(shù)據(jù)進行初步分析,并從中發(fā)現(xiàn)有價值的信息。第23頁數(shù)據(jù)科學(xué)應(yīng)用三、Spark的應(yīng)用場景在建模方面,Spark提供了機器學(xué)習(xí)庫MLlib,該庫提供了一系列算法和工具,包括常見的機器學(xué)習(xí)算法、特征化工具等。提供了流式處理庫Streaming和圖處理庫GraphX,這些庫也可以用來解決許多數(shù)據(jù)科學(xué)應(yīng)用中的問題。第24頁數(shù)據(jù)處理應(yīng)用三、Spark的應(yīng)用場景Spark可以實現(xiàn)快速查詢、實時日志采集處理、業(yè)務(wù)推薦、定制廣告、用戶圖計算等功能。主要應(yīng)用在廣告、推薦系統(tǒng)等業(yè)務(wù)中。廣告業(yè)務(wù)需要利用大數(shù)據(jù)進行應(yīng)用分析、效果分析、定向優(yōu)化等;推薦系統(tǒng)則需要利用大數(shù)據(jù)優(yōu)化相關(guān)排名,進行個性化推薦及熱點點擊分析等。典型的企業(yè)應(yīng)用有淘寶、騰訊、優(yōu)酷土豆等。第25頁騰訊三、Spark的應(yīng)用場景騰訊大數(shù)據(jù)使用Spark平臺來支持挖掘分析類計算、交互式查詢計算,以及允許誤差范圍的快速計算。SQL查詢性能普遍比MapReduce高兩倍以上,利用內(nèi)存計算和內(nèi)存表的特性,至少在10倍以上。迭代計算與挖掘分析方面,精準推薦將小時和天級別的模型訓(xùn)練轉(zhuǎn)變?yōu)镾park的分鐘級別的訓(xùn)練。圍繞“數(shù)據(jù)+算法+系統(tǒng)”的技術(shù)方案,實現(xiàn)了數(shù)據(jù)實時采集、算法實時訓(xùn)練、系統(tǒng)實時預(yù)測的全流程實時并行高維算法。第26頁淘寶三、Spark的應(yīng)用場景將Spark應(yīng)用于多次迭代的機器學(xué)習(xí)算法、高計算復(fù)雜度的算法等,從而解決以往系統(tǒng)存在的效率低、代碼維護不易等問題。將圖處理庫應(yīng)用于多種計算場景,包括基于度分布的中樞節(jié)點發(fā)現(xiàn)、基于最大連通圖的社區(qū)發(fā)現(xiàn)、基于三角形計算的關(guān)系衡量、基于隨機游走的用戶屬性傳播等。第27頁優(yōu)酷土豆三、Spark的應(yīng)用場景Spark交互響應(yīng)快,模擬廣告投放計算效率高、延遲小,機器學(xué)習(xí)和圖計算等迭代計算的性能好。優(yōu)酷土豆使用Spark替換了以往使用的Hadoop集群。Spark已經(jīng)廣泛應(yīng)用于優(yōu)酷土豆的視頻推薦、廣告業(yè)務(wù)等場景。第28頁Spark單機環(huán)境對計算機硬件要求較低,搭建方法比較簡單,適合初學(xué)者入門使用。由于Spark沒有提供文件存儲系統(tǒng),因此一般將Spark和Hadoop部署在一起,由Hadoop的HDFS、HBase等組件負責(zé)數(shù)據(jù)的存儲和管理。點擊此處播放微課搭建Spark單機環(huán)境任務(wù)分析第29頁1.下載并安裝Spark步驟1參考本書配套素材“項目一”/“安裝與配置前置環(huán)境”文檔,安裝和配置以下前置環(huán)境。搭建Spark單機環(huán)境時,首先需要下載并安裝Spark,其安裝路徑為“/usr/local/spark”,具體操作如下。VMware虛擬機:VMwareWorkstationPro17.0.0。Linux操作系統(tǒng):RedHatEnterpriseLinux8.7.064位。JDK:JDK11。Hadoop:Hadoop3.3.4。Python:Python3.9.11。第30頁步驟2在Linux操作系統(tǒng)中打開瀏覽器,訪問“/dist/spark/”,在打開的頁面中單擊“spark-3.2.3/”鏈接文字,跳轉(zhuǎn)至下載界面,單擊“spark-3.2.3-bin-without-hadoop.tgz”鏈接文字,下載Spark安裝包,如圖所示。在Linux中,瀏覽器下載的內(nèi)容默認存放在“/home/hadoop/下載”目錄下。其中,“hadoop”為Linux的用戶名。1.下載并安裝Spark第31頁1.下載并安裝Spark第32頁步驟3執(zhí)行以下命令,將“spark-3.2.3-bin-without-hadoop.tgz”文件解壓到“/usr/local/”目錄下。#解壓文件到“/usr/local/”目錄下[hadoop@bogon~]$sudotar-zxf~/下載/spark-3.2.3-bin-without-hadoop.tgz-C/usr/local/1.下載并安裝Spark第33頁步驟4執(zhí)行以下命令,將“spark-3.2.3-bin-without-hadoop”目錄重命名為“spark”,Spark的安裝路徑即可設(shè)置為“/usr/local/spark”。[hadoop@bogon~]$cd/usr/local #將“spark-3.2.3-bin-without-hadoop”目錄重命名為“spark”[hadoop@bogonlocal]$sudomv./spark-3.2.3-bin-without-hadoop./spark1.下載并安裝Spark第34頁步驟5執(zhí)行以下命令,將“spark”子目錄的所有權(quán)限賦予hadoop用戶。[hadoop@bogonlocal]$sudochown-Rhadoop:hadoop./spark1.下載并安裝Spark第35頁步驟1執(zhí)行以下命令,復(fù)制Spark安裝文件中自帶的配置文件,并重命名為“spark-env.sh”。[hadoop@bogonlocal]$cdspark[hadoop@bogonspark]$sudocp./conf/spark-env.sh.template./conf/spark-env.sh2.添加配置信息安裝完Spark后,需要在其配置文件中添加配置信息,配置不同的環(huán)境變量。具體操作如下。第36頁步驟2執(zhí)行以下命令,使用Vim編輯器打開“spark-env.sh”配置文件。[hadoop@bogonspark]$sudovim./conf/spark-env.sh2.添加配置信息第37頁步驟3按“I”鍵進入編輯模式,使用鍵盤的“↑”鍵調(diào)整光標(biāo)位置,在配置文件的首行添加以下配置信息,終端顯示如圖所示。2.添加配置信息第38頁2.添加配置信息#配置信息用于實現(xiàn)Spark與Hadoop之間的交互exportSPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoopclasspath)#配置JDK的安裝路徑exportJAVA_HOME=/usr/lib/jvm/jdk-11#配置Hadoop的安裝路徑exportHADOOP_HOME=/usr/local/hadoop#Hadoop配置文件的路徑exportHADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop第39頁2.添加配置信息步驟4配置完信息后,按“esc”鍵退出編輯模式,然后輸入“:wq”,最后按“Enter”鍵保存并關(guān)閉配置文件。第40頁2.添加配置信息步驟5使用同樣方法,打開“.bashrc”配置文件,添加配置信息。[hadoop@bogonspark]$vim~/.bashrc #配置信息exportJAVA_HOME=/usr/lib/jvm/jdk-11exportJRE_HOME=${JAVA_HOME}/jreexportCLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexportPATH=${JAVA_HOME}/bin:$PATHexportPATH=$PATH:${JAVA_HOME}/bin:/usr/local/hbase/bin第41頁2.添加配置信息步驟5使用同樣方法,打開“.bashrc”配置文件,添加配置信息。exportHADOOP_HOME=/usr/local/hadoopexportSPARK_HOME=/usr/local/sparkexportPYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j--src.zip:$PYTHONPATHexportPYSPARK_PYTHON=python3exportPATH=$HADOOP_HOME/bin:$SPARK_HOME/bin:$PATH第42頁2.添加配置信息步驟6執(zhí)行以下命令,使環(huán)境變量生效。[hadoop@bogonspark]$source~/.bashrc第43頁3.驗證Spark單機環(huán)境是否搭建成功添加好配置信息后就可以直接使用Spark了,不需要像Hadoop那樣運行啟動命令。因此,通過運行Spark自帶的示例可以驗證Spark單機環(huán)境是否搭建成功。執(zhí)行以下命令,運行Spark自帶的示例SparkPi,若能輸出Pi的值即可驗證Spark單機環(huán)境搭建成功。[hadoop@bogonspark]$./bin/run-exampleSparkPi第44頁3.驗證Spark單機環(huán)境是否搭建成功為了能從大量的輸出信息中快速找到我們想要的執(zhí)行結(jié)果,可以使用“grep”命令進行過濾。執(zhí)行以下命令輸出Pi的值,如圖所示。[hadoop@bogonspark]$./bin/run-exampleSparkPi2>&1|grep"Piis"第45頁Spark的發(fā)展歷程Spark的特點Spark的應(yīng)用場景任務(wù)二搭建Spark集群環(huán)境第47頁Spark集群環(huán)境是由一臺或多臺計算機組成的分布式計算環(huán)境,這些計算機通過網(wǎng)絡(luò)連接在一起,用于并行處理大規(guī)模數(shù)據(jù)。Spark集群通常由一個Master節(jié)點和多個Worker節(jié)點組成。其中,Master節(jié)點負責(zé)調(diào)度工作并分配任務(wù)給Worker節(jié)點執(zhí)行;Worker節(jié)點負責(zé)執(zhí)行不同的任務(wù),并將執(zhí)行結(jié)果返回給Master節(jié)點。Worker節(jié)點的數(shù)量可以根據(jù)需求進行動態(tài)調(diào)整,以適應(yīng)大規(guī)模數(shù)據(jù)處理應(yīng)用程序的需求。搭建Spark集群環(huán)境之前,我們先來學(xué)習(xí)一下Spark的生態(tài)系統(tǒng)、運行架構(gòu)、運行基本流程和部署模式。第48頁一、Spark的生態(tài)系統(tǒng)Spark的設(shè)計遵循“一個軟件棧滿足不同應(yīng)用場景”的理念,因此逐漸形成了一套成熟的生態(tài)系統(tǒng)。Spark的生態(tài)系統(tǒng)又稱為伯努利數(shù)據(jù)分析棧(Berkerleydataanalyticsstack,BDAS),它是基于內(nèi)存計算的大數(shù)據(jù)并行計算框架,適用于各種各樣分布式平臺系統(tǒng)。第49頁一、Spark的生態(tài)系統(tǒng)Spark生態(tài)系統(tǒng)以SparkCore為核心,專注于數(shù)據(jù)的處理分析;支持Local、Standalone、YARN和Kubernetes等多種部署模式,可以借助HDFS、MySQL、HBase和AmazonS3等實現(xiàn)數(shù)據(jù)存儲;提供了SparkSQL、SparkStreaming、SparkMLlib和SparkGraphX等多種組件。第50頁一、Spark的生態(tài)系統(tǒng)SparkCore和Spark組件的詳細介紹第51頁一、Spark的生態(tài)系統(tǒng)(1)SparkCore可以實現(xiàn)Spark的基本功能,包括任務(wù)調(diào)度、內(nèi)存管理、存儲管理和故障恢復(fù)等。建立在統(tǒng)一的抽象數(shù)據(jù)集(RDD)之上,提供用于創(chuàng)建分布式數(shù)據(jù)處理應(yīng)用程序的API。旨在提高數(shù)據(jù)處理應(yīng)用程序的執(zhí)行效率,并允許在更廣泛的問題域中執(zhí)行交互式查詢和分析。第52頁一、Spark的生態(tài)系統(tǒng)(2)SparkSQLSparkSQL是用于操作結(jié)構(gòu)化數(shù)據(jù)的組件,將SQL與Spark應(yīng)用程序無縫銜接。可以使用Python、Scala、Java或R語言的API實現(xiàn),具有易整合的特點。提供訪問各種數(shù)據(jù)源的通用方法,以相同的方式連接到MySQL、Hive、HBase等多種數(shù)據(jù)源。第53頁一、Spark的生態(tài)系統(tǒng)(3)SparkStreaming用于實時流處理的組件,它能夠?qū)崟r數(shù)據(jù)流進行流式處理。具有很好的可擴展性、高吞吐量和容錯性。支持從Kafka、Flume、Twitter和TCP套接字等多種數(shù)據(jù)源中提取數(shù)據(jù)。提供多種API來表達復(fù)雜的處理算法。第54頁一、Spark的生態(tài)系統(tǒng)(4)SparkMLlib用于在分布式計算環(huán)境中進行機器學(xué)習(xí)任務(wù)的組件提供了常用的機器學(xué)習(xí)算法,旨在簡化機器學(xué)習(xí)的工程實踐工作。由多種工具組成,包括分類、回歸、聚類、協(xié)同過濾等算法工具,特征提取、轉(zhuǎn)化、降維、選擇等特征化工具,線性代數(shù)、統(tǒng)計、數(shù)據(jù)處理等實用工具、底層的優(yōu)化原語和高層的管道API。第55頁一、Spark的生態(tài)系統(tǒng)(5)SparkGraphXSparkGraphX是用于處理和分析大規(guī)模圖數(shù)據(jù)的組件。能夠通過Spark的分布式計算能力有效解決傳統(tǒng)單機處理大規(guī)模圖數(shù)據(jù)的效率問題。還提供了一系列高級的圖形算法,幫助用戶分析和挖掘圖數(shù)據(jù)中有價值的信息。第56頁二、Spark的運行架構(gòu)一般情況下,Spark的運行架構(gòu)包括每個應(yīng)用的驅(qū)動器、集群資源管理器、運行作業(yè)任務(wù)的工作節(jié)點和每個工作節(jié)點上負責(zé)具體任務(wù)的執(zhí)行器,如圖所示。第57頁二、Spark的運行架構(gòu)應(yīng)用(Application):用戶編寫的Spark應(yīng)用程序,包括實現(xiàn)Driver功能的代碼和在集群多個節(jié)點上運行的程序代碼。驅(qū)動器(Driver):運行應(yīng)用程序的main函數(shù),創(chuàng)建SparkContext對象,其目的是為Spark應(yīng)用程序準備運行環(huán)境。在Spark中,由SparkContext負責(zé)與ClusterManager通信,進行資源申請、任務(wù)的分配和監(jiān)控等。當(dāng)Executor部分運行完畢后,Driver同時負責(zé)將SparkContext關(guān)閉。Spark運行架構(gòu)中涉及的概念及其解釋如下:第58頁二、Spark的運行架構(gòu)集群資源管理器(ClusterManager):負責(zé)資源管理和調(diào)度,根據(jù)應(yīng)用程序的需求來分配集群中的計算節(jié)點和內(nèi)存資源。常見的集群資源管理器類型有Standalone、YARN等。工作節(jié)點(Worker):集群中運行Spark應(yīng)用程序的節(jié)點。Worker就是物理節(jié)點,可以在上面啟動Executor進程。執(zhí)行器(Executor):在每個Worker上為某應(yīng)用程序啟動的一個進程,該進程負責(zé)運行Task,并且負責(zé)將數(shù)據(jù)保存在內(nèi)存或者磁盤上,每個任務(wù)都有各自獨立的Executor。Executor是一個執(zhí)行Task的容器。第59頁二、Spark的運行架構(gòu)彈性分布式數(shù)據(jù)集(resilientdistributeddatasets,RDD):Spark中的基本數(shù)據(jù)結(jié)構(gòu),是一組不可變的分布式對象集合。有向無環(huán)圖(directedacyclicgraph,DAG):當(dāng)用戶提交一個作業(yè)時,Spark會將其轉(zhuǎn)化為一組有向無環(huán)圖的形式,反映RDD之間的依賴關(guān)系。任務(wù)(Task):被送到某個Executor上的工作單元,是運行應(yīng)用的基本單位。第60頁二、Spark的運行架構(gòu)作業(yè)(Job):一個作業(yè)包含多個RDD及作用于相應(yīng)RDD上的各種操作,支持多個任務(wù)的并行計算。一個應(yīng)用中往往會產(chǎn)生多個作業(yè)。階段(Stage):作業(yè)調(diào)度的基本單位,每個階段可分為多個任務(wù),這些任務(wù)相互依賴。第61頁二、Spark的運行架構(gòu)總而言之,在Spark中,一個應(yīng)用由一個驅(qū)動器和若干個作業(yè)組成,一個作業(yè)可以劃分為多個階段,每個階段可以由多個任務(wù)組成,如圖所示。第62頁三、Spark運行的基本流程Spark運行的基本流程如圖所示。下面對Spark運行的原理進行詳細介紹。第63頁三、Spark運行的基本流程啟動Spark應(yīng)用程序,為這個應(yīng)用程序構(gòu)建基本的運行環(huán)境,即根據(jù)Spark應(yīng)用程序提交的參數(shù)在相應(yīng)位置創(chuàng)建Driver進程,由Driver進程根據(jù)參數(shù)信息初始化SparkContext對象。SparkContext對象根據(jù)參數(shù)向ClusterManager注冊并申請資源。(1)注冊并申請資源第64頁三、Spark運行的基本流程ClusterManager接收到應(yīng)用的注冊請求后,使用自己的資源調(diào)度算法,為應(yīng)用程序啟動Spark集群中Worker節(jié)點上的多個Executor進程。(2)分配資源第65頁三、Spark運行的基本流程Executor進程啟動后,會向ClusterManager反饋資源使用情況,便于ClusterManager對Executor進行狀態(tài)監(jiān)控。若監(jiān)控到Executor進程啟動失敗,則會立刻重新啟動。(3)資源反饋第66頁三、Spark運行的基本流程Executor進程向SparkContext注冊并申請任務(wù)(Task)。(4)注冊并申請任務(wù)第67頁三、Spark運行的基本流程SparkContext根據(jù)RDD之間的依賴關(guān)系構(gòu)建DAG;將DAG提交給DAG調(diào)度器進行解析,分解成階段(Stage),形成任務(wù)集(TaskSet);將任務(wù)集提交給任務(wù)調(diào)度器(TaskScheduler),并分配給不同的Executor進程執(zhí)行。(5)發(fā)送任務(wù)第68頁三、Spark運行的基本流程當(dāng)程序執(zhí)行完畢后,SparkContext向ClusterManager申請注銷并釋放申請的資源。(6)注銷并釋放資源第69頁四、Spark的部署模式使用Spark進行大規(guī)模數(shù)據(jù)計算與分析時,需要將開發(fā)好的應(yīng)用程序部署到Spark上運行。Spark的部署模式可以分為兩種類型,一種是本地部署模式,另一種是集群部署模式。第70頁四、Spark的部署模式本地部署模式即Local部署模式,它是指將Spark應(yīng)用程序部署在單個計算機上,所有的Spark組件都在同一個JVM進程中。在Local部署模式下,Spark應(yīng)用程序可以利用單臺計算機上的所有資源并行處理數(shù)據(jù)。1.本地部署模式第71頁四、Spark的部署模式通常情況下,Local部署模式適用于開發(fā)、測試和調(diào)試Spark應(yīng)用程序時的本地開發(fā)環(huán)境,并不適合部署到生產(chǎn)環(huán)境中使用。1.本地部署模式第72頁四、Spark的部署模式集群部署模式是指在一個由多臺計算機組成的集群中運行Spark應(yīng)用程序的模式。在集群部署模式下,Spark的各個組件分布式地運行在多臺計算機上,使Spark可以在多個節(jié)點上并行處理大規(guī)模數(shù)據(jù)。2.集群部署模式第73頁四、Spark的部署模式集群部署模式適用于企業(yè)的實際生產(chǎn)環(huán)境。Spark集群部署模式包括Standalone部署模式、YARN部署模式和Kubernetes部署模式,它們的詳細介紹如下:2.集群部署模式第74頁四、Spark的部署模式Standalone部署模式是指在Spark集群中沒有使用資源管理框架(如YARN)的部署模式。在這種部署模式下,由Spark的Master節(jié)點管理整個集群的計算資源,并將任務(wù)分發(fā)給Worker節(jié)點進行執(zhí)行。Standalone部署模式2.集群部署模式第75頁四、Spark的部署模式Spark應(yīng)用程序通過與Master節(jié)點通信來請求資源,然后Master節(jié)點根據(jù)Worker節(jié)點的負載和可用性將任務(wù)分配給它們。Standalone部署模式的構(gòu)建過程非常簡單,并且比其他部署模式更容易維護。Standalone部署模式2.集群部署模式第76頁四、Spark的部署模式由于它缺乏資源管理框架所提供的一些高級特性,導(dǎo)致它在大規(guī)模集群的管理、資源調(diào)度等方面可能會有一些局限性。Standalone部署模式2.集群部署模式第77頁四、Spark的部署模式Y(jié)ARN部署模式是指將Spark應(yīng)用程序部署到運行著YARN的集群中。在這種部署模式下,由YARN管理集群上的所有資源,并允許Spark應(yīng)用程序向YARN請求資源以完成任務(wù)。YARN部署模式2.集群部署模式第78頁四、Spark的部署模式Spark應(yīng)用程序提交到Y(jié)ARN上后,YARN會根據(jù)應(yīng)用程序的需求自動調(diào)度、分配和管理集群資源,使Spark應(yīng)用程序可以高效率地運行在大規(guī)模計算集群上。YARN部署模式2.集群部署模式第79頁四、Spark的部署模式Y(jié)ARN已經(jīng)廣泛應(yīng)用于大數(shù)據(jù)處理領(lǐng)域,所以YARN部署模式對于需要進行大規(guī)模數(shù)據(jù)處理的場景非常適用。YARN部署模式2.集群部署模式第80頁四、Spark的部署模式Kubernetes部署模式是將Spark應(yīng)用程序部署到運行著Kubernetes的集群中。Kubernetes是一種開源容器編排系統(tǒng),它可以管理分布式應(yīng)用程序在容器化環(huán)境中的部署、擴展和維護。Kubernetes部署模式2.集群部署模式第81頁四、Spark的部署模式在Kubernetes中,Spark應(yīng)用程序可以通過使用操作性資源規(guī)范定義所需的計算和存儲資源,以及工作負載的調(diào)度和啟動策略。具有高可用性、自動擴展、故障恢復(fù)等強大的特性。Kubernetes部署模式2.集群部署模式第82頁四、Spark的部署模式Kubernetes的出現(xiàn)極大地簡化了大數(shù)據(jù)處理和人工智能等領(lǐng)域的應(yīng)用程序的部署和管理,并逐漸成為云原生技術(shù)棧的標(biāo)配。Kubernetes部署模式2.集群部署模式第83頁Spark集群環(huán)境可以分為Spark偽分布式集群環(huán)境和Spark完全分布式集群環(huán)境。Spark偽分布式集群環(huán)境是指在一臺計算機上模擬分布式計算的環(huán)境,其原理是通過在一臺計算機上運行多個進程來模擬集群中的各個節(jié)點,從而并行處理數(shù)據(jù),常用于開發(fā)、測試和調(diào)試應(yīng)用程序。任務(wù)分析第84頁Spark完全分布式集群環(huán)境則是指由多臺計算機組成的分布式計算環(huán)境,每個節(jié)點都有自己的CPU、內(nèi)存和磁盤資源,并且Spark應(yīng)用程序可以跨多個節(jié)點進行并行計算,常用于處理企業(yè)實際生產(chǎn)環(huán)境中的業(yè)務(wù)。任務(wù)分析第85頁1.搭建Spark偽分布式集群環(huán)境步驟1參考任務(wù)一中的任務(wù)實施,搭建Spark單機環(huán)境。參考本書配套素材“項目一”/“搭建Hadoop偽分布式集群”文檔,搭建Hadoop偽分布式集群。Spark偽分布式集群環(huán)境一般與Hadoop偽分布式集群部署在一起,具體的操作方法如下:搭建Spark偽分布式集群環(huán)境點擊此處播放微課第86頁1.搭建Spark偽分布式集群環(huán)境步驟2執(zhí)行以下命令,查詢自己計算機的IP地址,用于設(shè)置配置信息。IP地址的查詢結(jié)果,如圖所示。[hadoop@bogon~]$ifconfig第87頁1.搭建Spark偽分布式集群環(huán)境步驟3執(zhí)行以下命令,打開“spark-env.sh”配置文件,添加以下配置信息。[hadoop@bogon~]$cd/usr/local/spark/conf#打開“spark-env.sh”配置文件[hadoop@bogonconf]$vimspark-env.sh#配置信息,將此處的IP地址修改為步驟2查詢到的IP地址exportSPARK_MASTER_IP=34exportSPARK_LOCAL_IP=34SPARK_MASTER_PORT=7077第88頁1.搭建Spark偽分布式集群環(huán)境步驟4執(zhí)行以下命令,使環(huán)境變量生效。[hadoop@bogonconf]$sourcespark-env.sh步驟5執(zhí)行以下命令,啟動Master節(jié)點。[hadoop@bogonconf]$cd/usr/local/spark[hadoop@bogonspark]$./sbin/start-master.sh步驟6執(zhí)行以下命令,啟動Worker節(jié)點。[hadoop@bogonspark]$./sbin/start-worker.shspark://localhost:7077第89頁1.搭建Spark偽分布式集群環(huán)境步驟7執(zhí)行以下命令,驗證Spark單機偽分布式集群是否啟動成功。若輸出結(jié)果中既出現(xiàn)Master節(jié)點,又出現(xiàn)Worker節(jié)點,則證明Spark偽分布式集群啟動成功,如圖所示。[hadoop@bogonspark]$jps第90頁1.搭建Spark偽分布式集群環(huán)境步驟8執(zhí)行以下命令,驗證Spark偽分布式集群是否可以正常使用,若能輸出Pi值,則證明Spark偽分布式集群可以正常使用,如圖所示。[hadoop@bogonspark]$./bin/run-exampleSparkPi2>&1|grep"Piis"第91頁2.搭建Spark完全分布式集群環(huán)境步驟1參考任務(wù)一中的任務(wù)實施,搭建Spark單機環(huán)境。參考“項目一”/“搭建Hadoop完全分布式集群”文檔,搭建Hadoop完全分布式集群。搭建Spark完全分布式集群環(huán)境點擊此處播放微課第92頁2.搭建Spark完全分布式集群環(huán)境步驟2在Master節(jié)點上執(zhí)行以下命令,打開“.bashrc”配置文件,添加以下配置信[hadoop@Master~]$vim~/.bashrc#配置信息exportSPARK_HOME=/usr/local/sparkexportPATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin第93頁2.搭建Spark完全分布式集群環(huán)境步驟3執(zhí)行以下命令,使環(huán)境變量生效。[hadoop@Master~]$source~/.bashrc第94頁2.搭建Spark完全分布式集群環(huán)境步驟4在Master節(jié)點上執(zhí)行以下命令,復(fù)制“workers.template”配置文件,并命名為“workers”;打開“workers”配置文件,將“l(fā)ocalhost”修改為以下配置信息。[hadoop@Master~]$cd/usr/local/spark#復(fù)制“workers.template”配置文件,并命名為“workers”[hadoop@Masterspark]$sudocp./conf/workers.template./conf/workers[hadoop@Masterspark]$sudovim./conf/workers#配置信息Worker1Worker2第95頁2.搭建Spark完全分布式集群環(huán)境步驟5在Master節(jié)點上執(zhí)行以下命令,復(fù)制“spark-env.sh.template”配置文件,并命名為“spark-env.sh”;打開“spark-env.sh”配置文件,添加以下配置信息。[hadoop@Masterspark]$sudocp./conf/spark-env.sh.template./conf/spark-env.sh[hadoop@Masterspark]$sudovim./conf/spark-env.sh#配置信息exportSPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoopclasspath)exportJAVA_HOME=/usr/lib/jvm/jdk-11exportHADOOP_HOME=/usr/local/hadoopexportHADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoopexportSPARK_MASTER_IP=36exportSPARK_MASTER_PORT=7077exportSPARK_WORKER_MEMORY=512mexportSPARK_WORKER_CORES=1exportSPARK_WORKER_INSTANCES=1exportSPARK_EXECUTOR_MEMORY=512mexportSPARK_EXECUTOR_CORES=1第96頁2.搭建Spark完全分布式集群環(huán)境步驟6在Master節(jié)點上執(zhí)行以下命令,壓縮“/usr/local/spark”目錄。#切換到“/usr/local”目錄[hadoop@Masterspark]$cd/usr/local#壓縮“/usr/local/spark”目錄[hadoop@Masterlocal]$sudotar-zcf~/spark.master.tar.gz./spark第97頁2.搭建Spark完全分布式集群環(huán)境步驟7在Master節(jié)點上執(zhí)行以下命令,將壓縮后的“~/.spark.master.tar.gz”復(fù)制到Worker1和Worker2節(jié)點。#切換到根目錄[hadoop@Masterlocal]$cd~#將“~/.spark.master.tar.gz”復(fù)制到Worker1節(jié)點[hadoop@Master~]$sudoscp./spark.master.tar.gzWorker1:/home/hadoop#將“~/.spark.master.tar.gz”復(fù)制到Worker2節(jié)點[hadoop@Master~]$sudoscp./spark.master.tar.gzWorker2:/home/hadoop第98頁2.搭建Spark完全分布式集群環(huán)境步驟8分別在Worker1和Worker2節(jié)點上執(zhí)行以下命令,解壓從Master節(jié)點上復(fù)制過來的“~/.spark.master.tar.gz”文件,并賦予權(quán)限給hadoop用戶。#刪除已經(jīng)存在的“/usr/local/spark”[hadoop@Worker1~]$sudorm-rf/usr/local/spark#解壓“~/.spark.master.tar.gz”文件[hadoop@Worker1~]$sudotar-zxf~/spark.master.tar.gz-C/usr/local#賦予權(quán)限給hadoop用戶[hadoop@Worker1~]$sudochown-Rhadoop/usr/local/spark第99頁2.搭建Spark完全分布式集群環(huán)境步驟9在Master節(jié)點上執(zhí)行以下命令,啟動Hadoop集群。[hadoop@Master~]$cd/usr/local/hadoop#啟動dfs[hadoop@Masterhadoop]$./sbin/start-dfs.sh#啟動yarn[hadoop@Masterhadoop]$./sbin/start-yarn.sh#啟動historyserver[hadoop@Masterhadoop]$./sbin/mr-jobhistory-daemon.shstarthistoryserver第100頁2.搭建Spark完全分布式集群環(huán)境步驟10在Master節(jié)點上執(zhí)行以下命令,創(chuàng)建“/usr/local/hadoop/spark-logs”目錄,用于存放日志。[hadoop@Masterhadoop]$hdfsdfs-mkdir/spark-logs第101頁2.搭建Spark完全分布式集群環(huán)境步驟11在Master節(jié)點上執(zhí)行“jps”命令查看進程,進程如圖所示。[hadoop@Masterhadoop]$jps第102頁2.搭建Spark完全分布式集群環(huán)境步驟12在Master節(jié)點上執(zhí)行以下命令,啟動Master。[hadoop@Masterhadoop]$cd/usr/local/spark/sbin#啟動Master[hadoop@Mastersbin]$./start-master.sh第103頁2.搭建Spark完全分布式集群環(huán)境步驟13在Master節(jié)點上執(zhí)行以下命令,啟動Worker。[hadoop@Mastersbin]$./start-workers.sh第104頁2.搭建Spark完全分布式集群環(huán)境步驟14在Master節(jié)點上執(zhí)行“jps”命令,Maste節(jié)點的進程如圖所示。[hadoop@Worker1~]$jps第105頁2.搭建Spark完全分布式集群環(huán)境步驟15在Worker1節(jié)點上執(zhí)行“jps”命令,Worker1節(jié)點的進程如圖所示。[hadoop@Worker1~]$jps第106頁2.搭建Spark完全分布式集群環(huán)境步驟16打開瀏覽器,訪問“http://master:8080”,可以進入主節(jié)點(即Master節(jié)點)的監(jiān)控界面,可以看到兩個Worker節(jié)點處于“Alive”狀態(tài),如圖所示。第107頁Spark的生態(tài)系統(tǒng)Spark的運行架構(gòu)Spark運行的基本流程Spark的部署模式任務(wù)三開發(fā)并運行應(yīng)用程序第109頁不同的運行環(huán)境已搭建完成,接下來就可以開發(fā)并運行應(yīng)用程序了。在此之前,需要選擇合適的編程語言和開發(fā)工具,學(xué)習(xí)常用的PySpark命令,并掌握采用不同的部署模式運行應(yīng)用程序的方法。本任務(wù)結(jié)合身份證戶籍地查詢案例,在PyCharm中開發(fā)Spark應(yīng)用程序,并分別在Spark本地環(huán)境和集群環(huán)境中運行應(yīng)用程序。第110頁一、編程語言的選擇Spark支持多種編程語言,包括Python、Scala、Java和R語言等。每種編程語言都有各自的特點和適合的應(yīng)用領(lǐng)域。PythonScalaJavaR語言第111頁一、編程語言的選擇是一種動態(tài)編程語言,擁有清晰的代碼結(jié)構(gòu)和良好的代碼風(fēng)格,易于學(xué)習(xí)和使用。擁有大量的標(biāo)準庫、第三方庫和框架,可以幫助開發(fā)人員快速實現(xiàn)復(fù)雜的功能。常用于數(shù)據(jù)分析、人工智能和Web開發(fā)等多個領(lǐng)域。是一個簡單、高效、跨平臺、應(yīng)用廣泛、社區(qū)支持強大的編程語言。Python(本書采用Python語言開發(fā)Spark應(yīng)用程序)第112頁一、編程語言的選擇一種面向?qū)ο蟮木幊陶Z言。Spark最初就是用Scala語言開發(fā)的,是Spark的原生語言。具有靜態(tài)類型、函數(shù)式編程、擴展性和并發(fā)性等特性,復(fù)雜分布式應(yīng)用程序的常用編程語言。在大規(guī)模分布式計算中,代碼的可讀性尤為重要。Scala的代碼可讀性高,可以幫助開發(fā)人員快速理解代碼的邏輯。Scala第113頁一、編程語言的選擇一種流行的、面向?qū)ο蟮木幊陶Z言,并且在企業(yè)級應(yīng)用中被廣泛使用。具有平臺無關(guān)性、可移植性、安全可靠和可擴展性等特點。提供了Hadoop和Spark等大數(shù)據(jù)處理框架,便于開發(fā)和實現(xiàn)大數(shù)據(jù)處理應(yīng)用程序。Java第114頁一、編程語言的選擇用于數(shù)據(jù)分析和統(tǒng)計建模的編程語言,有著豐富的統(tǒng)計庫和可視化工具。簡單易學(xué),并可以輕松地與其他編程語言(如Python或C++)結(jié)合使用。專注于數(shù)據(jù)處理、探索性數(shù)據(jù)分析、統(tǒng)計建模和數(shù)據(jù)可視化等數(shù)據(jù)科學(xué)領(lǐng)域。R語言第115頁PySpark是ApacheSpark的PythonAPI,它提供了許多用于數(shù)據(jù)操作、SQL查詢、流處理、機器學(xué)習(xí)和圖處理的庫和工具,以便Python開發(fā)人員使用Spark的分布式計算能力來處理大規(guī)模數(shù)據(jù)集和執(zhí)行復(fù)雜的數(shù)據(jù)處理任務(wù)。此外,PySpark還提供了PySparkShell,用于交互式分析大數(shù)據(jù)。二、PySpark命令第116頁用戶可以使用PySpark命令啟動PySparkShell,然后再編寫和運行代碼。PySpark命令格式如下:pyspark[options][options]表示可選擇的參數(shù)選項,執(zhí)行“pyspark--help”命令可以查看完整的參數(shù)選項。二、PySpark命令第117頁Spark的運行模式取決于傳遞給SparkContext的MasterURL的值,可使用參數(shù)“--masterMasterURL”設(shè)置MasterURL的值,命令如下:pyspark--masterMasterURL二、PySpark命令第118頁二、PySpark命令MasterURL的取值MasterURL說明示例local使用單個Worker線程本地化運行Spark(完全不并行)[hadoop@bogon~]$

pyspark--masterlocallocal[k]使用k個Worker線程本地化運行Spark[hadoop@bogon~]$

pyspark--masterlocal[4]yarn連接到采用YARN作為集群管理器的Spark集群[hadoop@Master~]$

pyspark--masteryarn第119頁二、PySpark命令MasterURL的取值MasterURL說明示例local[*]使用與邏輯CPU個數(shù)相同數(shù)量的Worker線程本地化運行Spark。其中,邏輯CPU個數(shù)=物理CPU個數(shù)×每個物理CPU包含的CPU核數(shù)[hadoop@bogon~]$

pyspark--masterlocal[*]k8s://https://host:port連接到采用Kubernetes作為集群管理器的Spark集群。可以指定KubernetesAPIServer的地址和端口號,使用HTTPS協(xié)議與KubernetesAPIServer進行通信[hadoop@Master~]$

pyspark--masterk8s://:6443第120頁二、PySpark命令MasterURL的取值MasterURL說明示例spark://host:port連接到指定的采用獨立集群管理器(即Standalone)的Spark集群。其中,host是Spark集群Master節(jié)點的名稱或IP地址;port是Spark集群Master節(jié)點的端口號,默認端口號是7077[hadoop@Master~]$

pyspark--master

spark://Master:7070第121頁二、PySpark命令進入交互式執(zhí)行環(huán)境后,終端會出現(xiàn)Python命令提示符“>>>”,直接在提示符后面輸入以下表達式,然后按回車鍵,終端立即顯示結(jié)果,如圖所示。>>>1*33-29>>>exit()執(zhí)行以下命令,退出交互式執(zhí)行環(huán)境。第122頁三、開發(fā)工具的選擇使用開發(fā)工具對于編寫、調(diào)試和維護Spark應(yīng)用程序都是非常重要的,其主要原因如下:開發(fā)工具提供了調(diào)試和測試功能,可以快速定位應(yīng)用程序中出現(xiàn)的問題。開發(fā)工具提供了大量的輔助開發(fā)功能,如代碼自動補全、模板、代碼片段和快捷鍵等。開發(fā)工具提供了語法高亮功能,有助于提高代碼可讀性,也便于開發(fā)人員維護應(yīng)用程序。發(fā)工具提供了共享配置文件、打包應(yīng)用程序和遠程調(diào)試等功能。第123頁三、開發(fā)工具的選擇常用的開發(fā)工具---PyCharm功能強大、穩(wěn)定性好的開發(fā)工具。它支持多種語言,包括Python、JavaScript、HTML/CSS等,并提供了豐富的插件支持自帶代碼分析、調(diào)試、測試等功能,可以幫助開發(fā)者提高工作效率還有代碼自動補全、重構(gòu)、版本控制等功能第124頁三、開發(fā)工具的選擇常用的開發(fā)工具---JupyterNotebook基于Web的交互式計算平臺,支持多種編程語言,瀏覽器中直接編寫和運行代碼,支持編輯、公式渲染、圖像展示等。操作方式靈活方便,廣泛應(yīng)用于數(shù)據(jù)分析、機器學(xué)習(xí)等領(lǐng)域。第125頁三、開發(fā)工具的選擇常用的開發(fā)工具---Spyder使用Python編寫的集成開發(fā)環(huán)境,用于數(shù)據(jù)分析和科學(xué)計算,可以有效提高數(shù)據(jù)處理效率。Spyder具有代碼編輯、調(diào)試、測試、版本控制和數(shù)據(jù)可視化等多種功能,為用戶帶來了極大的便利。第126頁三、開發(fā)工具的選擇常用的開發(fā)工具---PyCharm在Python開發(fā)中應(yīng)用廣泛穩(wěn)定性表現(xiàn)優(yōu)異,能夠滿足各種需求在社區(qū)版和專業(yè)版上都擁有大量的用戶支持。處理大型項目時穩(wěn)定性更好,并且在代碼分析、調(diào)試、自動化測試等方面的功能也更加完備。第127頁四、運行應(yīng)用程序應(yīng)用程序開發(fā)結(jié)束后,可以使用spark-submit命令將其提交至Spark單機環(huán)境或集群環(huán)境中運行,該命令格式如下:spark-submit[options] <appjar|pythonfile|Rfile> [apparguments]第128頁四、運行應(yīng)用程序應(yīng)用程序開發(fā)結(jié)束后,可以使用spark-submit命令將其提交至Spark單機環(huán)境或集群環(huán)境中運行,該命令格式如下:spark-submit[options] <appjar|pythonfile|Rfile> [apparguments]第129頁四、運行應(yīng)用程序[options][options]表示可選擇的參數(shù)選項,執(zhí)行“spark-submit--help”命令可以查看完整的參數(shù)選項。常用的參數(shù)選項有“--masterMasterURL”第130頁四、運行應(yīng)用程序<appjar|pythonfile|Rfile>用于指定要執(zhí)行的應(yīng)用程序代碼的位置。它可以是包含編譯后的Scala或Java代碼的Java存檔文件(JAR)、Python文件或R文件。第131頁四、運行應(yīng)用程序[apparguments]表示傳遞給應(yīng)用程序主類方法的參數(shù)。這些參數(shù)通過Scala或Java的主方法的參數(shù)數(shù)組(args[]),或通過Python或R的sys.argv[]應(yīng)用于應(yīng)用程序。第132頁四、運行應(yīng)用程序【例1-1】執(zhí)行以下命令,在Spark單機環(huán)境中運行Spark自帶的應(yīng)用程序示例pi.py。[hadoop@bogon~]$cd/usr/local/spark[hadoop@bogonspark]$./bin/spark-submit\>/usr/local/spark/examples/src/main/python/pi.py【例1-2】執(zhí)行以下命令,在Spark集群環(huán)境中運行Spark自帶的應(yīng)用程序示例pi.py。[hadoop@Master~]$cd/usr/local/spark[hadoop@Masterspark]$./bin/spark-submit\>--masterspark://Master:7077\>/usr/local/spark/examples/src/main/python/pi.py第133頁任務(wù)分析身份證數(shù)據(jù)存放在“/usr/local/spark/mycode/id_card.csv”文件中。身份證號碼具有唯一性,由18位組成,前6位為行政區(qū)劃代碼,第7—14位為出生日期碼,第15—17位為順序碼,第18位為校驗碼。通過身份證前兩位可以找到持證人的歸屬省份。首先,在PyCharm開發(fā)工具中開發(fā)應(yīng)用程序,然后將該應(yīng)用程序分別在Spark單機環(huán)境和集群環(huán)境中運行。點擊此處播放微課開發(fā)并運行應(yīng)用程序第134頁步驟11.在Spark單機環(huán)境中運行應(yīng)用程序打開PyCharm,然后單擊“CreateNewProject”打開“創(chuàng)建項目”對話框,接著設(shè)置位置和基礎(chǔ)解釋器,并取消勾選“創(chuàng)建main.py歡迎腳本”復(fù)選框,最后單擊“創(chuàng)建”按鈕,完成項目創(chuàng)建,如圖所示。第135頁步驟2右擊“PythonProject”項目,在彈出的快捷菜單中選擇“新建”→“目錄”選項,打開“新建目錄”對話框,在文本框中輸入目錄名稱“spark_demo”并按“Enter”鍵確認,如圖所示。第136頁步驟3右擊“spark_demo”目錄,在彈出的快捷菜單中選擇“新建”→“Python文件”選項,打開“新建Python文件”對話框,在文本框中輸入文件名稱“find_province”并按“Enter”鍵確認,如圖所示。第137頁步驟4打開“find_province.py”文件,編寫應(yīng)用程序frompysparkimportSparkContext,SparkConf#配置Spark應(yīng)用程序conf=SparkConf().setMaster("local").setAppName("Province")#創(chuàng)建SparkContext對象sc=SparkContext(conf=conf)id_card="file:///usr/local/spark/mycode/id_card.csv"第138頁步驟4打開“find_province.py”文件,編寫應(yīng)用程序#讀取身份證號碼數(shù)據(jù)并轉(zhuǎn)換為RDDid_card_rdd=sc.textFile(id_card).map(lambdaline:line.split(','))#定義函數(shù),根據(jù)身份證前兩位查找對應(yīng)歸屬省份deffind_province(id_card_prefix):province_dict={第139頁步驟4打開“find_province.py”文件,編寫應(yīng)用程序

'11':'北京市','12':'天津市','13':'河北省','14':'山西省',‘15’:‘內(nèi)蒙古自治區(qū)’,(……詳見教材)第140頁步驟4打開“find_province.py”文件,編寫應(yīng)用程序}returnprovince_dict.get(id_card_prefix[:4],'省份')#新增一列,根據(jù)身份證前兩位查找對應(yīng)歸屬省份id_card_rdd=id_card_rdd.map(lambdarow:(row[0],row[1],row[2],row[3],find_province(row[1][:2])))第141頁步驟4打開“find_province.py”文件,編寫應(yīng)用程序#展示結(jié)果forrowinid_card_rdd.collect():print(row)sc.stop()第142頁步驟5在PyCharm中運行代碼,輸出持證人歸屬的省份,如圖所示。第143頁步驟12.在Spark集群環(huán)境中運行應(yīng)用程序在Spark集群環(huán)境中運行應(yīng)

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論