




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Spark大數(shù)據(jù)技術(shù)與應(yīng)用案例教程主講教師:全套可編輯PPT課件目錄項(xiàng)目一Spark入門項(xiàng)目二SparkRDD——彈性分布式數(shù)據(jù)集項(xiàng)目三SparkSQL——結(jié)構(gòu)化數(shù)據(jù)處理項(xiàng)目四SparkStreaming——實(shí)時(shí)計(jì)算框架目錄項(xiàng)目五SparkMLlib——機(jī)器學(xué)習(xí)庫(kù)項(xiàng)目六GraphFrames——圖計(jì)算框架項(xiàng)目七綜合案例——分析銀行個(gè)人信貸
業(yè)務(wù)數(shù)據(jù)項(xiàng)目一Spark入門全套可編輯PPT課件任務(wù)一搭建Spark單機(jī)環(huán)境任務(wù)二搭建Spark集群環(huán)境任務(wù)三開(kāi)發(fā)并運(yùn)行應(yīng)用程序第6頁(yè)隨著互聯(lián)網(wǎng)和物聯(lián)網(wǎng)技術(shù)的發(fā)展,人們產(chǎn)生和創(chuàng)造的數(shù)據(jù)呈爆炸式增長(zhǎng)。傳統(tǒng)的大數(shù)據(jù)處理框架HadoopMapReduce已無(wú)法滿足人們對(duì)大規(guī)模數(shù)據(jù)的處理需求,因此一個(gè)更加高效的、用于處理大規(guī)模數(shù)據(jù)的、開(kāi)源的分布式計(jì)算框架Spark誕生了。本項(xiàng)目將介紹Spark的相關(guān)知識(shí),搭建Spark單機(jī)環(huán)境和集群環(huán)境,開(kāi)發(fā)并運(yùn)行應(yīng)用程序。第7頁(yè)了解Spark的發(fā)展歷程、特點(diǎn)與應(yīng)用場(chǎng)景。熟悉Spark的生態(tài)系統(tǒng)、運(yùn)行架構(gòu)與運(yùn)行基本流程。掌握Spark的部署模式、PySpark命令與運(yùn)行應(yīng)用程序的方法。第8頁(yè)了解Spark的發(fā)展歷程、特點(diǎn)與應(yīng)用場(chǎng)景。熟悉Spark的生態(tài)系統(tǒng)、運(yùn)行架構(gòu)與運(yùn)行基本流程。掌握Spark的部署模式、PySpark命令與運(yùn)行應(yīng)用程序的方法。第9頁(yè)增強(qiáng)遵守規(guī)則的意識(shí),養(yǎng)成按規(guī)矩行事的習(xí)慣。加強(qiáng)基礎(chǔ)知識(shí)的學(xué)習(xí),實(shí)現(xiàn)從量變到質(zhì)變的轉(zhuǎn)化,為個(gè)人的長(zhǎng)遠(yuǎn)發(fā)展打下基礎(chǔ)。任務(wù)一搭建Spark單機(jī)環(huán)境第11頁(yè)不同的運(yùn)行環(huán)境已搭建完成,接下來(lái)就可以開(kāi)發(fā)并運(yùn)行應(yīng)用程序了。在此之前,需要選擇合適的編程語(yǔ)言和開(kāi)發(fā)工具,學(xué)習(xí)常用的PySpark命令,并掌握采用不同的部署模式運(yùn)行應(yīng)用程序的方法。本任務(wù)結(jié)合身份證戶籍地查詢案例,在PyCharm中開(kāi)發(fā)Spark應(yīng)用程序,并分別在Spark本地環(huán)境和集群環(huán)境中運(yùn)行應(yīng)用程序。Spark官方網(wǎng)站對(duì)其的定義是“ApacheSpark是專為大規(guī)模數(shù)據(jù)處理而設(shè)計(jì)的快速通用的計(jì)算引擎”。由于Spark是UCBerkeleyAMPlaboratory(加州大學(xué)伯克利分校的AMP實(shí)驗(yàn)室)開(kāi)源的類HadoopMapReduce的通用并行框架,是一個(gè)基于內(nèi)存計(jì)算、支持分布式計(jì)算和并行計(jì)算的大數(shù)據(jù)處理框架。第12頁(yè)一、Spark的發(fā)展歷程第13頁(yè)一、Spark的發(fā)展歷程Spark提供了豐富的工具和API,可以用于結(jié)構(gòu)化數(shù)據(jù)處理、流數(shù)據(jù)處理、機(jī)器學(xué)習(xí)及圖形處理等多種場(chǎng)景。Spark的發(fā)展歷程如表所示。時(shí)間點(diǎn)說(shuō)明2009年提供一個(gè)更快、更靈活、更易用的分布式計(jì)算框架,以便更好地進(jìn)行大規(guī)模數(shù)據(jù)處理和機(jī)器學(xué)習(xí)等任務(wù)2010年Spark正式發(fā)布開(kāi)源代碼2013年Spark成為Apache軟件基金會(huì)的孵化器項(xiàng)目,解決了一些bug,增加了新的功能,并改進(jìn)了可用性問(wèn)題2014年Spark成為Apache軟件基金會(huì)的頂級(jí)開(kāi)源項(xiàng)目之一,并發(fā)布了第一個(gè)穩(wěn)定版本Spark1.0.0第14頁(yè)一、Spark的發(fā)展歷程2015年Spark1.5.x系列版本發(fā)布,提升了Spark的性能,增加了一些機(jī)器學(xué)習(xí)算法和工具等,使得Spark變得更為全面和強(qiáng)大2016年Spark2.0.x系列版本發(fā)布,大幅度改進(jìn)了API兼容性和查詢優(yōu)化器,支持結(jié)構(gòu)化的流數(shù)據(jù)處理2017年Spark2.2.x系列版本發(fā)布,更新內(nèi)容主要針的是系統(tǒng)的可用性、穩(wěn)定性及代碼潤(rùn)色2018年Spark2.4.x系列版本發(fā)布,進(jìn)一步改進(jìn)了流數(shù)據(jù)處理和機(jī)器學(xué)習(xí)功能,并集成了更多的深度學(xué)習(xí)框架時(shí)間點(diǎn)說(shuō)明第15頁(yè)一、Spark的發(fā)展歷程時(shí)間點(diǎn)說(shuō)明2020年Spark3.0.0版本發(fā)布,能夠更好地支持Python和R語(yǔ)言,并提供了更強(qiáng)大的分布式SQL查詢引擎。加強(qiáng)了與ApacheArrow、DeltaLake等數(shù)據(jù)處理技術(shù)的集成2021年Spark3.1.1版本發(fā)布,提升了Python的可用性,增強(qiáng)了ANSISQL兼容性,加強(qiáng)了查詢優(yōu)化等2022年Spark3.3.0版本發(fā)布,提升了查詢性能,簡(jiǎn)化了從傳統(tǒng)數(shù)據(jù)倉(cāng)庫(kù)的遷移,提升效率2023年Spark3.4.0版本引入Python客戶端,增強(qiáng)結(jié)構(gòu)化數(shù)據(jù)流,增加PandasAPI的覆蓋范圍,提供Numpy輸入支持,通過(guò)內(nèi)存分析提高開(kāi)發(fā)效率和可調(diào)用性等第16頁(yè)二、Spark的特點(diǎn)Spark是與HadoopMapReduce類似的通用并行計(jì)算框架,它擁有HadoopMapReduce所具有的優(yōu)點(diǎn),如高可靠、高擴(kuò)展、高容錯(cuò)等。同時(shí),Spark還兼容HDFS、Hive等,可以很好地與Hadoop系統(tǒng)融合,從而彌補(bǔ)HadoopMapReduce高延遲的性能缺點(diǎn)。Spark的特點(diǎn)可以歸納為以下幾點(diǎn):第17頁(yè)二、Spark的特點(diǎn)Spark基于內(nèi)存的運(yùn)算效率快了100倍以上,基于磁盤的運(yùn)算效率快了10倍以上。Spark充分利用內(nèi)存對(duì)數(shù)據(jù)進(jìn)行計(jì)算,減少了對(duì)磁盤的讀寫操作,從而提高了Spark的計(jì)算效率。(1)速度快第18頁(yè)二、Spark的特點(diǎn)Spark支持Python、Scala、Java和R等多種編程語(yǔ)言,并提供了80多種高階算法。此外,研究人員可以通過(guò)PySpark或SparkShell進(jìn)行交互式編程。(2)易用性好第19頁(yè)二、Spark的特點(diǎn)Spark提供了多種完善的組件,如交互式查詢(SparkSQL)、實(shí)時(shí)流處理(SparkStreaming)、機(jī)器學(xué)習(xí)庫(kù)(SparkMLlib)和圖計(jì)算(SparkGraphX)。Spark支持上述組件在同一個(gè)應(yīng)用程序中無(wú)縫地結(jié)合使用,減少了大數(shù)據(jù)開(kāi)發(fā)和維護(hù)的人力成本和部署平臺(tái)的物力成本。(3)通用性強(qiáng)第20頁(yè)二、Spark的特點(diǎn)Spark可以運(yùn)行于獨(dú)立的集群模式中,也可以運(yùn)行于Hadoop中,還可以運(yùn)行于AmazonEC2(亞馬遜彈性計(jì)算云)等云環(huán)境中。對(duì)于數(shù)據(jù)源而言,Spark可以從HDFS、HBase、Cassandra、Hive等多種途徑讀取數(shù)據(jù)。(4)運(yùn)行模式多樣第21頁(yè)三、Spark的應(yīng)用場(chǎng)景Spark功能強(qiáng)大,其應(yīng)用場(chǎng)景也十分廣泛。從宏觀角度出發(fā),可以將Spark的應(yīng)用場(chǎng)景歸納為數(shù)據(jù)科學(xué)應(yīng)用和數(shù)據(jù)處理應(yīng)用。第22頁(yè)數(shù)據(jù)科學(xué)應(yīng)用三、Spark的應(yīng)用場(chǎng)景Spark可以用來(lái)進(jìn)行數(shù)據(jù)分析和建模。在數(shù)據(jù)分析方面,Spark提供了豐富的API來(lái)支持各種數(shù)據(jù)操作,如數(shù)據(jù)清洗、轉(zhuǎn)換、篩選、聚合等。數(shù)據(jù)科學(xué)家對(duì)數(shù)據(jù)進(jìn)行初步分析,并從中發(fā)現(xiàn)有價(jià)值的信息。第23頁(yè)數(shù)據(jù)科學(xué)應(yīng)用三、Spark的應(yīng)用場(chǎng)景在建模方面,Spark提供了機(jī)器學(xué)習(xí)庫(kù)MLlib,該庫(kù)提供了一系列算法和工具,包括常見(jiàn)的機(jī)器學(xué)習(xí)算法、特征化工具等。提供了流式處理庫(kù)Streaming和圖處理庫(kù)GraphX,這些庫(kù)也可以用來(lái)解決許多數(shù)據(jù)科學(xué)應(yīng)用中的問(wèn)題。第24頁(yè)數(shù)據(jù)處理應(yīng)用三、Spark的應(yīng)用場(chǎng)景Spark可以實(shí)現(xiàn)快速查詢、實(shí)時(shí)日志采集處理、業(yè)務(wù)推薦、定制廣告、用戶圖計(jì)算等功能。主要應(yīng)用在廣告、推薦系統(tǒng)等業(yè)務(wù)中。廣告業(yè)務(wù)需要利用大數(shù)據(jù)進(jìn)行應(yīng)用分析、效果分析、定向優(yōu)化等;推薦系統(tǒng)則需要利用大數(shù)據(jù)優(yōu)化相關(guān)排名,進(jìn)行個(gè)性化推薦及熱點(diǎn)點(diǎn)擊分析等。典型的企業(yè)應(yīng)用有淘寶、騰訊、優(yōu)酷土豆等。第25頁(yè)騰訊三、Spark的應(yīng)用場(chǎng)景騰訊大數(shù)據(jù)使用Spark平臺(tái)來(lái)支持挖掘分析類計(jì)算、交互式查詢計(jì)算,以及允許誤差范圍的快速計(jì)算。SQL查詢性能普遍比MapReduce高兩倍以上,利用內(nèi)存計(jì)算和內(nèi)存表的特性,至少在10倍以上。迭代計(jì)算與挖掘分析方面,精準(zhǔn)推薦將小時(shí)和天級(jí)別的模型訓(xùn)練轉(zhuǎn)變?yōu)镾park的分鐘級(jí)別的訓(xùn)練。圍繞“數(shù)據(jù)+算法+系統(tǒng)”的技術(shù)方案,實(shí)現(xiàn)了數(shù)據(jù)實(shí)時(shí)采集、算法實(shí)時(shí)訓(xùn)練、系統(tǒng)實(shí)時(shí)預(yù)測(cè)的全流程實(shí)時(shí)并行高維算法。第26頁(yè)淘寶三、Spark的應(yīng)用場(chǎng)景將Spark應(yīng)用于多次迭代的機(jī)器學(xué)習(xí)算法、高計(jì)算復(fù)雜度的算法等,從而解決以往系統(tǒng)存在的效率低、代碼維護(hù)不易等問(wèn)題。將圖處理庫(kù)應(yīng)用于多種計(jì)算場(chǎng)景,包括基于度分布的中樞節(jié)點(diǎn)發(fā)現(xiàn)、基于最大連通圖的社區(qū)發(fā)現(xiàn)、基于三角形計(jì)算的關(guān)系衡量、基于隨機(jī)游走的用戶屬性傳播等。第27頁(yè)優(yōu)酷土豆三、Spark的應(yīng)用場(chǎng)景Spark交互響應(yīng)快,模擬廣告投放計(jì)算效率高、延遲小,機(jī)器學(xué)習(xí)和圖計(jì)算等迭代計(jì)算的性能好。優(yōu)酷土豆使用Spark替換了以往使用的Hadoop集群。Spark已經(jīng)廣泛應(yīng)用于優(yōu)酷土豆的視頻推薦、廣告業(yè)務(wù)等場(chǎng)景。第28頁(yè)Spark單機(jī)環(huán)境對(duì)計(jì)算機(jī)硬件要求較低,搭建方法比較簡(jiǎn)單,適合初學(xué)者入門使用。由于Spark沒(méi)有提供文件存儲(chǔ)系統(tǒng),因此一般將Spark和Hadoop部署在一起,由Hadoop的HDFS、HBase等組件負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)和管理。任務(wù)分析第29頁(yè)1.下載并安裝Spark步驟1參考本書配套素材“項(xiàng)目一”/“安裝與配置前置環(huán)境”文檔,安裝和配置以下前置環(huán)境。搭建Spark單機(jī)環(huán)境時(shí),首先需要下載并安裝Spark,其安裝路徑為“/usr/local/spark”,具體操作如下。VMware虛擬機(jī):VMwareWorkstationPro17.0.0。Linux操作系統(tǒng):RedHatEnterpriseLinux8.7.064位。JDK:JDK11。Hadoop:Hadoop3.3.4。Python:Python3.9.11。第30頁(yè)步驟2在Linux操作系統(tǒng)中打開(kāi)瀏覽器,訪問(wèn)“/dist/spark/”,在打開(kāi)的頁(yè)面中單擊“spark-3.2.3/”鏈接文字,跳轉(zhuǎn)至下載界面,單擊“spark-3.2.3-bin-without-hadoop.tgz”鏈接文字,下載Spark安裝包,如圖所示。在Linux中,瀏覽器下載的內(nèi)容默認(rèn)存放在“/home/hadoop/下載”目錄下。其中,“hadoop”為L(zhǎng)inux的用戶名。1.下載并安裝Spark第31頁(yè)1.下載并安裝Spark第32頁(yè)步驟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頁(yè)步驟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頁(yè)步驟5執(zhí)行以下命令,將“spark”子目錄的所有權(quán)限賦予hadoop用戶。[hadoop@bogonlocal]$sudochown-Rhadoop:hadoop./spark1.下載并安裝Spark第35頁(yè)步驟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頁(yè)步驟2執(zhí)行以下命令,使用Vim編輯器打開(kāi)“spark-env.sh”配置文件。[hadoop@bogonspark]$sudovim./conf/spark-env.sh2.添加配置信息第37頁(yè)步驟3按“I”鍵進(jìn)入編輯模式,使用鍵盤的“↑”鍵調(diào)整光標(biāo)位置,在配置文件的首行添加以下配置信息,終端顯示如圖所示。2.添加配置信息第38頁(yè)2.添加配置信息#配置信息用于實(shí)現(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頁(yè)2.添加配置信息步驟4配置完信息后,按“esc”鍵退出編輯模式,然后輸入“:wq”,最后按“Enter”鍵保存并關(guān)閉配置文件。第40頁(yè)2.添加配置信息步驟5使用同樣方法,打開(kāi)“.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頁(yè)2.添加配置信息步驟5使用同樣方法,打開(kāi)“.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頁(yè)2.添加配置信息步驟6執(zhí)行以下命令,使環(huán)境變量生效。[hadoop@bogonspark]$source~/.bashrc第43頁(yè)3.驗(yàn)證Spark單機(jī)環(huán)境是否搭建成功添加好配置信息后就可以直接使用Spark了,不需要像Hadoop那樣運(yùn)行啟動(dòng)命令。因此,通過(guò)運(yùn)行Spark自帶的示例可以驗(yàn)證Spark單機(jī)環(huán)境是否搭建成功。執(zhí)行以下命令,運(yùn)行Spark自帶的示例SparkPi,若能輸出Pi的值即可驗(yàn)證Spark單機(jī)環(huán)境搭建成功。[hadoop@bogonspark]$./bin/run-exampleSparkPi第44頁(yè)3.驗(yàn)證Spark單機(jī)環(huán)境是否搭建成功為了能從大量的輸出信息中快速找到我們想要的執(zhí)行結(jié)果,可以使用“grep”命令進(jìn)行過(guò)濾。執(zhí)行以下命令輸出Pi的值,如圖所示。[hadoop@bogonspark]$./bin/run-exampleSparkPi2>&1|grep"Piis"第45頁(yè)Spark的發(fā)展歷程Spark的特點(diǎn)Spark的應(yīng)用場(chǎng)景任務(wù)二搭建Spark集群環(huán)境第47頁(yè)Spark集群環(huán)境是由一臺(tái)或多臺(tái)計(jì)算機(jī)組成的分布式計(jì)算環(huán)境,這些計(jì)算機(jī)通過(guò)網(wǎng)絡(luò)連接在一起,用于并行處理大規(guī)模數(shù)據(jù)。Spark集群通常由一個(gè)Master節(jié)點(diǎn)和多個(gè)Worker節(jié)點(diǎn)組成。其中,Master節(jié)點(diǎn)負(fù)責(zé)調(diào)度工作并分配任務(wù)給Worker節(jié)點(diǎn)執(zhí)行;Worker節(jié)點(diǎn)負(fù)責(zé)執(zhí)行不同的任務(wù),并將執(zhí)行結(jié)果返回給Master節(jié)點(diǎn)。Worker節(jié)點(diǎn)的數(shù)量可以根據(jù)需求進(jìn)行動(dòng)態(tài)調(diào)整,以適應(yīng)大規(guī)模數(shù)據(jù)處理應(yīng)用程序的需求。搭建Spark集群環(huán)境之前,我們先來(lái)學(xué)習(xí)一下Spark的生態(tài)系統(tǒng)、運(yùn)行架構(gòu)、運(yùn)行基本流程和部署模式。第48頁(yè)一、Spark的生態(tài)系統(tǒng)Spark的設(shè)計(jì)遵循“一個(gè)軟件棧滿足不同應(yīng)用場(chǎng)景”的理念,因此逐漸形成了一套成熟的生態(tài)系統(tǒng)。Spark的生態(tài)系統(tǒng)又稱為伯努利數(shù)據(jù)分析棧(Berkerleydataanalyticsstack,BDAS),它是基于內(nèi)存計(jì)算的大數(shù)據(jù)并行計(jì)算框架,適用于各種各樣分布式平臺(tái)系統(tǒng)。第49頁(yè)一、Spark的生態(tài)系統(tǒng)Spark生態(tài)系統(tǒng)以SparkCore為核心,專注于數(shù)據(jù)的處理分析;支持Local、Standalone、YARN和Kubernetes等多種部署模式,可以借助HDFS、MySQL、HBase和AmazonS3等實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ);提供了SparkSQL、SparkStreaming、SparkMLlib和SparkGraphX等多種組件。第50頁(yè)一、Spark的生態(tài)系統(tǒng)SparkCore和Spark組件的詳細(xì)介紹第51頁(yè)一、Spark的生態(tài)系統(tǒng)(1)SparkCore可以實(shí)現(xiàn)Spark的基本功能,包括任務(wù)調(diào)度、內(nèi)存管理、存儲(chǔ)管理和故障恢復(fù)等。建立在統(tǒng)一的抽象數(shù)據(jù)集(RDD)之上,提供用于創(chuàng)建分布式數(shù)據(jù)處理應(yīng)用程序的API。旨在提高數(shù)據(jù)處理應(yīng)用程序的執(zhí)行效率,并允許在更廣泛的問(wèn)題域中執(zhí)行交互式查詢和分析。第52頁(yè)一、Spark的生態(tài)系統(tǒng)(2)SparkSQLSparkSQL是用于操作結(jié)構(gòu)化數(shù)據(jù)的組件,將SQL與Spark應(yīng)用程序無(wú)縫銜接。可以使用Python、Scala、Java或R語(yǔ)言的API實(shí)現(xiàn),具有易整合的特點(diǎn)。提供訪問(wèn)各種數(shù)據(jù)源的通用方法,以相同的方式連接到MySQL、Hive、HBase等多種數(shù)據(jù)源。第53頁(yè)一、Spark的生態(tài)系統(tǒng)(3)SparkStreaming用于實(shí)時(shí)流處理的組件,它能夠?qū)?shí)時(shí)數(shù)據(jù)流進(jìn)行流式處理。具有很好的可擴(kuò)展性、高吞吐量和容錯(cuò)性。支持從Kafka、Flume、Twitter和TCP套接字等多種數(shù)據(jù)源中提取數(shù)據(jù)。提供多種API來(lái)表達(dá)復(fù)雜的處理算法。第54頁(yè)一、Spark的生態(tài)系統(tǒng)(4)SparkMLlib用于在分布式計(jì)算環(huán)境中進(jìn)行機(jī)器學(xué)習(xí)任務(wù)的組件提供了常用的機(jī)器學(xué)習(xí)算法,旨在簡(jiǎn)化機(jī)器學(xué)習(xí)的工程實(shí)踐工作。由多種工具組成,包括分類、回歸、聚類、協(xié)同過(guò)濾等算法工具,特征提取、轉(zhuǎn)化、降維、選擇等特征化工具,線性代數(shù)、統(tǒng)計(jì)、數(shù)據(jù)處理等實(shí)用工具、底層的優(yōu)化原語(yǔ)和高層的管道API。第55頁(yè)一、Spark的生態(tài)系統(tǒng)(5)SparkGraphXSparkGraphX是用于處理和分析大規(guī)模圖數(shù)據(jù)的組件。能夠通過(guò)Spark的分布式計(jì)算能力有效解決傳統(tǒng)單機(jī)處理大規(guī)模圖數(shù)據(jù)的效率問(wèn)題。還提供了一系列高級(jí)的圖形算法,幫助用戶分析和挖掘圖數(shù)據(jù)中有價(jià)值的信息。第56頁(yè)二、Spark的運(yùn)行架構(gòu)一般情況下,Spark的運(yùn)行架構(gòu)包括每個(gè)應(yīng)用的驅(qū)動(dòng)器、集群資源管理器、運(yùn)行作業(yè)任務(wù)的工作節(jié)點(diǎn)和每個(gè)工作節(jié)點(diǎn)上負(fù)責(zé)具體任務(wù)的執(zhí)行器,如圖所示。第57頁(yè)二、Spark的運(yùn)行架構(gòu)應(yīng)用(Application):用戶編寫的Spark應(yīng)用程序,包括實(shí)現(xiàn)Driver功能的代碼和在集群多個(gè)節(jié)點(diǎn)上運(yùn)行的程序代碼。驅(qū)動(dòng)器(Driver):運(yùn)行應(yīng)用程序的main函數(shù),創(chuàng)建SparkContext對(duì)象,其目的是為Spark應(yīng)用程序準(zhǔn)備運(yùn)行環(huán)境。在Spark中,由SparkContext負(fù)責(zé)與ClusterManager通信,進(jìn)行資源申請(qǐng)、任務(wù)的分配和監(jiān)控等。當(dāng)Executor部分運(yùn)行完畢后,Driver同時(shí)負(fù)責(zé)將SparkContext關(guān)閉。Spark運(yùn)行架構(gòu)中涉及的概念及其解釋如下:第58頁(yè)二、Spark的運(yùn)行架構(gòu)集群資源管理器(ClusterManager):負(fù)責(zé)資源管理和調(diào)度,根據(jù)應(yīng)用程序的需求來(lái)分配集群中的計(jì)算節(jié)點(diǎn)和內(nèi)存資源。常見(jiàn)的集群資源管理器類型有Standalone、YARN等。工作節(jié)點(diǎn)(Worker):集群中運(yùn)行Spark應(yīng)用程序的節(jié)點(diǎn)。Worker就是物理節(jié)點(diǎn),可以在上面啟動(dòng)Executor進(jìn)程。執(zhí)行器(Executor):在每個(gè)Worker上為某應(yīng)用程序啟動(dòng)的一個(gè)進(jìn)程,該進(jìn)程負(fù)責(zé)運(yùn)行Task,并且負(fù)責(zé)將數(shù)據(jù)保存在內(nèi)存或者磁盤上,每個(gè)任務(wù)都有各自獨(dú)立的Executor。Executor是一個(gè)執(zhí)行Task的容器。第59頁(yè)二、Spark的運(yùn)行架構(gòu)彈性分布式數(shù)據(jù)集(resilientdistributeddatasets,RDD):Spark中的基本數(shù)據(jù)結(jié)構(gòu),是一組不可變的分布式對(duì)象集合。有向無(wú)環(huán)圖(directedacyclicgraph,DAG):當(dāng)用戶提交一個(gè)作業(yè)時(shí),Spark會(huì)將其轉(zhuǎn)化為一組有向無(wú)環(huán)圖的形式,反映RDD之間的依賴關(guān)系。任務(wù)(Task):被送到某個(gè)Executor上的工作單元,是運(yùn)行應(yīng)用的基本單位。第60頁(yè)二、Spark的運(yùn)行架構(gòu)作業(yè)(Job):一個(gè)作業(yè)包含多個(gè)RDD及作用于相應(yīng)RDD上的各種操作,支持多個(gè)任務(wù)的并行計(jì)算。一個(gè)應(yīng)用中往往會(huì)產(chǎn)生多個(gè)作業(yè)。階段(Stage):作業(yè)調(diào)度的基本單位,每個(gè)階段可分為多個(gè)任務(wù),這些任務(wù)相互依賴。第61頁(yè)二、Spark的運(yùn)行架構(gòu)總而言之,在Spark中,一個(gè)應(yīng)用由一個(gè)驅(qū)動(dòng)器和若干個(gè)作業(yè)組成,一個(gè)作業(yè)可以劃分為多個(gè)階段,每個(gè)階段可以由多個(gè)任務(wù)組成,如圖所示。第62頁(yè)三、Spark運(yùn)行的基本流程Spark運(yùn)行的基本流程如圖所示。下面對(duì)Spark運(yùn)行的原理進(jìn)行詳細(xì)介紹。第63頁(yè)三、Spark運(yùn)行的基本流程啟動(dòng)Spark應(yīng)用程序,為這個(gè)應(yīng)用程序構(gòu)建基本的運(yùn)行環(huán)境,即根據(jù)Spark應(yīng)用程序提交的參數(shù)在相應(yīng)位置創(chuàng)建Driver進(jìn)程,由Driver進(jìn)程根據(jù)參數(shù)信息初始化SparkContext對(duì)象。SparkContext對(duì)象根據(jù)參數(shù)向ClusterManager注冊(cè)并申請(qǐng)資源。(1)注冊(cè)并申請(qǐng)資源第64頁(yè)三、Spark運(yùn)行的基本流程ClusterManager接收到應(yīng)用的注冊(cè)請(qǐng)求后,使用自己的資源調(diào)度算法,為應(yīng)用程序啟動(dòng)Spark集群中Worker節(jié)點(diǎn)上的多個(gè)Executor進(jìn)程。(2)分配資源第65頁(yè)三、Spark運(yùn)行的基本流程Executor進(jìn)程啟動(dòng)后,會(huì)向ClusterManager反饋資源使用情況,便于ClusterManager對(duì)Executor進(jìn)行狀態(tài)監(jiān)控。若監(jiān)控到Executor進(jìn)程啟動(dòng)失敗,則會(huì)立刻重新啟動(dòng)。(3)資源反饋第66頁(yè)三、Spark運(yùn)行的基本流程Executor進(jìn)程向SparkContext注冊(cè)并申請(qǐng)任務(wù)(Task)。(4)注冊(cè)并申請(qǐng)任務(wù)第67頁(yè)三、Spark運(yùn)行的基本流程SparkContext根據(jù)RDD之間的依賴關(guān)系構(gòu)建DAG;將DAG提交給DAG調(diào)度器進(jìn)行解析,分解成階段(Stage),形成任務(wù)集(TaskSet);將任務(wù)集提交給任務(wù)調(diào)度器(TaskScheduler),并分配給不同的Executor進(jìn)程執(zhí)行。(5)發(fā)送任務(wù)第68頁(yè)三、Spark運(yùn)行的基本流程當(dāng)程序執(zhí)行完畢后,SparkContext向ClusterManager申請(qǐng)注銷并釋放申請(qǐng)的資源。(6)注銷并釋放資源第69頁(yè)四、Spark的部署模式使用Spark進(jìn)行大規(guī)模數(shù)據(jù)計(jì)算與分析時(shí),需要將開(kāi)發(fā)好的應(yīng)用程序部署到Spark上運(yùn)行。Spark的部署模式可以分為兩種類型,一種是本地部署模式,另一種是集群部署模式。第70頁(yè)四、Spark的部署模式本地部署模式即Local部署模式,它是指將Spark應(yīng)用程序部署在單個(gè)計(jì)算機(jī)上,所有的Spark組件都在同一個(gè)JVM進(jìn)程中。在Local部署模式下,Spark應(yīng)用程序可以利用單臺(tái)計(jì)算機(jī)上的所有資源并行處理數(shù)據(jù)。1.本地部署模式第71頁(yè)四、Spark的部署模式通常情況下,Local部署模式適用于開(kāi)發(fā)、測(cè)試和調(diào)試Spark應(yīng)用程序時(shí)的本地開(kāi)發(fā)環(huán)境,并不適合部署到生產(chǎn)環(huán)境中使用。1.本地部署模式第72頁(yè)四、Spark的部署模式集群部署模式是指在一個(gè)由多臺(tái)計(jì)算機(jī)組成的集群中運(yùn)行Spark應(yīng)用程序的模式。在集群部署模式下,Spark的各個(gè)組件分布式地運(yùn)行在多臺(tái)計(jì)算機(jī)上,使Spark可以在多個(gè)節(jié)點(diǎn)上并行處理大規(guī)模數(shù)據(jù)。2.集群部署模式第73頁(yè)四、Spark的部署模式集群部署模式適用于企業(yè)的實(shí)際生產(chǎn)環(huán)境。Spark集群部署模式包括Standalone部署模式、YARN部署模式和Kubernetes部署模式,它們的詳細(xì)介紹如下:2.集群部署模式第74頁(yè)四、Spark的部署模式Standalone部署模式是指在Spark集群中沒(méi)有使用資源管理框架(如YARN)的部署模式。在這種部署模式下,由Spark的Master節(jié)點(diǎn)管理整個(gè)集群的計(jì)算資源,并將任務(wù)分發(fā)給Worker節(jié)點(diǎn)進(jìn)行執(zhí)行。Standalone部署模式2.集群部署模式第75頁(yè)四、Spark的部署模式Spark應(yīng)用程序通過(guò)與Master節(jié)點(diǎn)通信來(lái)請(qǐng)求資源,然后Master節(jié)點(diǎn)根據(jù)Worker節(jié)點(diǎn)的負(fù)載和可用性將任務(wù)分配給它們。Standalone部署模式的構(gòu)建過(guò)程非常簡(jiǎn)單,并且比其他部署模式更容易維護(hù)。Standalone部署模式2.集群部署模式第76頁(yè)四、Spark的部署模式由于它缺乏資源管理框架所提供的一些高級(jí)特性,導(dǎo)致它在大規(guī)模集群的管理、資源調(diào)度等方面可能會(huì)有一些局限性。Standalone部署模式2.集群部署模式第77頁(yè)四、Spark的部署模式Y(jié)ARN部署模式是指將Spark應(yīng)用程序部署到運(yùn)行著YARN的集群中。在這種部署模式下,由YARN管理集群上的所有資源,并允許Spark應(yīng)用程序向YARN請(qǐng)求資源以完成任務(wù)。YARN部署模式2.集群部署模式第78頁(yè)四、Spark的部署模式Spark應(yīng)用程序提交到Y(jié)ARN上后,YARN會(huì)根據(jù)應(yīng)用程序的需求自動(dòng)調(diào)度、分配和管理集群資源,使Spark應(yīng)用程序可以高效率地運(yùn)行在大規(guī)模計(jì)算集群上。YARN部署模式2.集群部署模式第79頁(yè)四、Spark的部署模式Y(jié)ARN已經(jīng)廣泛應(yīng)用于大數(shù)據(jù)處理領(lǐng)域,所以YARN部署模式對(duì)于需要進(jìn)行大規(guī)模數(shù)據(jù)處理的場(chǎng)景非常適用。YARN部署模式2.集群部署模式第80頁(yè)四、Spark的部署模式Kubernetes部署模式是將Spark應(yīng)用程序部署到運(yùn)行著Kubernetes的集群中。Kubernetes是一種開(kāi)源容器編排系統(tǒng),它可以管理分布式應(yīng)用程序在容器化環(huán)境中的部署、擴(kuò)展和維護(hù)。Kubernetes部署模式2.集群部署模式第81頁(yè)四、Spark的部署模式在Kubernetes中,Spark應(yīng)用程序可以通過(guò)使用操作性資源規(guī)范定義所需的計(jì)算和存儲(chǔ)資源,以及工作負(fù)載的調(diào)度和啟動(dòng)策略。具有高可用性、自動(dòng)擴(kuò)展、故障恢復(fù)等強(qiáng)大的特性。Kubernetes部署模式2.集群部署模式第82頁(yè)四、Spark的部署模式Kubernetes的出現(xiàn)極大地簡(jiǎn)化了大數(shù)據(jù)處理和人工智能等領(lǐng)域的應(yīng)用程序的部署和管理,并逐漸成為云原生技術(shù)棧的標(biāo)配。Kubernetes部署模式2.集群部署模式第83頁(yè)Spark集群環(huán)境可以分為Spark偽分布式集群環(huán)境和Spark完全分布式集群環(huán)境。Spark偽分布式集群環(huán)境是指在一臺(tái)計(jì)算機(jī)上模擬分布式計(jì)算的環(huán)境,其原理是通過(guò)在一臺(tái)計(jì)算機(jī)上運(yùn)行多個(gè)進(jìn)程來(lái)模擬集群中的各個(gè)節(jié)點(diǎn),從而并行處理數(shù)據(jù),常用于開(kāi)發(fā)、測(cè)試和調(diào)試應(yīng)用程序。任務(wù)分析第84頁(yè)Spark完全分布式集群環(huán)境則是指由多臺(tái)計(jì)算機(jī)組成的分布式計(jì)算環(huán)境,每個(gè)節(jié)點(diǎn)都有自己的CPU、內(nèi)存和磁盤資源,并且Spark應(yīng)用程序可以跨多個(gè)節(jié)點(diǎn)進(jìn)行并行計(jì)算,常用于處理企業(yè)實(shí)際生產(chǎn)環(huán)境中的業(yè)務(wù)。任務(wù)分析第85頁(yè)1.搭建Spark偽分布式集群環(huán)境步驟1參考任務(wù)一中的任務(wù)實(shí)施,搭建Spark單機(jī)環(huán)境。參考本書配套素材“項(xiàng)目一”/“搭建Hadoop偽分布式集群”文檔,搭建Hadoop偽分布式集群。Spark偽分布式集群環(huán)境一般與Hadoop偽分布式集群部署在一起,具體的操作方法如下:搭建Spark偽分布式集群環(huán)境第86頁(yè)1.搭建Spark偽分布式集群環(huán)境步驟2執(zhí)行以下命令,查詢自己計(jì)算機(jī)的IP地址,用于設(shè)置配置信息。IP地址的查詢結(jié)果,如圖所示。[hadoop@bogon~]$ifconfig第87頁(yè)1.搭建Spark偽分布式集群環(huán)境步驟3執(zhí)行以下命令,打開(kāi)“spark-env.sh”配置文件,添加以下配置信息。[hadoop@bogon~]$cd/usr/local/spark/conf#打開(kāi)“spark-env.sh”配置文件[hadoop@bogonconf]$vimspark-env.sh#配置信息,將此處的IP地址修改為步驟2查詢到的IP地址exportSPARK_MASTER_IP=34exportSPARK_LOCAL_IP=34SPARK_MASTER_PORT=7077第88頁(yè)1.搭建Spark偽分布式集群環(huán)境步驟4執(zhí)行以下命令,使環(huán)境變量生效。[hadoop@bogonconf]$sourcespark-env.sh步驟5執(zhí)行以下命令,啟動(dòng)Master節(jié)點(diǎn)。[hadoop@bogonconf]$cd/usr/local/spark[hadoop@bogonspark]$./sbin/start-master.sh步驟6執(zhí)行以下命令,啟動(dòng)Worker節(jié)點(diǎn)。[hadoop@bogonspark]$./sbin/start-worker.shspark://localhost:7077第89頁(yè)1.搭建Spark偽分布式集群環(huán)境步驟7執(zhí)行以下命令,驗(yàn)證Spark單機(jī)偽分布式集群是否啟動(dòng)成功。若輸出結(jié)果中既出現(xiàn)Master節(jié)點(diǎn),又出現(xiàn)Worker節(jié)點(diǎn),則證明Spark偽分布式集群?jiǎn)?dòng)成功,如圖所示。[hadoop@bogonspark]$jps第90頁(yè)1.搭建Spark偽分布式集群環(huán)境步驟8執(zhí)行以下命令,驗(yàn)證Spark偽分布式集群是否可以正常使用,若能輸出Pi值,則證明Spark偽分布式集群可以正常使用,如圖所示。[hadoop@bogonspark]$./bin/run-exampleSparkPi2>&1|grep"Piis"第91頁(yè)2.搭建Spark完全分布式集群環(huán)境步驟1參考任務(wù)一中的任務(wù)實(shí)施,搭建Spark單機(jī)環(huán)境。參考“項(xiàng)目一”/“搭建Hadoop完全分布式集群”文檔,搭建Hadoop完全分布式集群。搭建Spark完全分布式集群環(huán)境第92頁(yè)2.搭建Spark完全分布式集群環(huán)境步驟2在Master節(jié)點(diǎn)上執(zhí)行以下命令,打開(kāi)“.bashrc”配置文件,添加以下配置信[hadoop@Master~]$vim~/.bashrc#配置信息exportSPARK_HOME=/usr/local/sparkexportPATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin第93頁(yè)2.搭建Spark完全分布式集群環(huán)境步驟3執(zhí)行以下命令,使環(huán)境變量生效。[hadoop@Master~]$source~/.bashrc第94頁(yè)2.搭建Spark完全分布式集群環(huán)境步驟4在Master節(jié)點(diǎn)上執(zhí)行以下命令,復(fù)制“workers.template”配置文件,并命名為“workers”;打開(kāi)“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頁(yè)2.搭建Spark完全分布式集群環(huán)境步驟5在Master節(jié)點(diǎn)上執(zhí)行以下命令,復(fù)制“spark-env.sh.template”配置文件,并命名為“spark-env.sh”;打開(kāi)“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頁(yè)2.搭建Spark完全分布式集群環(huán)境步驟6在Master節(jié)點(diǎn)上執(zhí)行以下命令,壓縮“/usr/local/spark”目錄。#切換到“/usr/local”目錄[hadoop@Masterspark]$cd/usr/local#壓縮“/usr/local/spark”目錄[hadoop@Masterlocal]$sudotar-zcf~/spark.master.tar.gz./spark第97頁(yè)2.搭建Spark完全分布式集群環(huán)境步驟7在Master節(jié)點(diǎn)上執(zhí)行以下命令,將壓縮后的“~/.spark.master.tar.gz”復(fù)制到Worker1和Worker2節(jié)點(diǎn)。#切換到根目錄[hadoop@Masterlocal]$cd~#將“~/.spark.master.tar.gz”復(fù)制到Worker1節(jié)點(diǎn)[hadoop@Master~]$sudoscp./spark.master.tar.gzWorker1:/home/hadoop#將“~/.spark.master.tar.gz”復(fù)制到Worker2節(jié)點(diǎn)[hadoop@Master~]$sudoscp./spark.master.tar.gzWorker2:/home/hadoop第98頁(yè)2.搭建Spark完全分布式集群環(huán)境步驟8分別在Worker1和Worker2節(jié)點(diǎn)上執(zhí)行以下命令,解壓從Master節(jié)點(diǎn)上復(fù)制過(guò)來(lái)的“~/.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頁(yè)2.搭建Spark完全分布式集群環(huán)境步驟9在Master節(jié)點(diǎn)上執(zhí)行以下命令,啟動(dòng)Hadoop集群。[hadoop@Master~]$cd/usr/local/hadoop#啟動(dòng)dfs[hadoop@Masterhadoop]$./sbin/start-dfs.sh#啟動(dòng)yarn[hadoop@Masterhadoop]$./sbin/start-yarn.sh#啟動(dòng)historyserver[hadoop@Masterhadoop]$./sbin/mr-jobhistory-daemon.shstarthistoryserver第100頁(yè)2.搭建Spark完全分布式集群環(huán)境步驟10在Master節(jié)點(diǎn)上執(zhí)行以下命令,創(chuàng)建“/usr/local/hadoop/spark-logs”目錄,用于存放日志。[hadoop@Masterhadoop]$hdfsdfs-mkdir/spark-logs第101頁(yè)2.搭建Spark完全分布式集群環(huán)境步驟11在Master節(jié)點(diǎn)上執(zhí)行“jps”命令查看進(jìn)程,進(jìn)程如圖所示。[hadoop@Masterhadoop]$jps第102頁(yè)2.搭建Spark完全分布式集群環(huán)境步驟12在Master節(jié)點(diǎn)上執(zhí)行以下命令,啟動(dòng)Master。[hadoop@Masterhadoop]$cd/usr/local/spark/sbin#啟動(dòng)Master[hadoop@Mastersbin]$./start-master.sh第103頁(yè)2.搭建Spark完全分布式集群環(huán)境步驟13在Master節(jié)點(diǎn)上執(zhí)行以下命令,啟動(dòng)Worker。[hadoop@Mastersbin]$./start-workers.sh第104頁(yè)2.搭建Spark完全分布式集群環(huán)境步驟14在Master節(jié)點(diǎn)上執(zhí)行“jps”命令,Maste節(jié)點(diǎn)的進(jìn)程如圖所示。[hadoop@Worker1~]$jps第105頁(yè)2.搭建Spark完全分布式集群環(huán)境步驟15在Worker1節(jié)點(diǎn)上執(zhí)行“jps”命令,Worker1節(jié)點(diǎn)的進(jìn)程如圖所示。[hadoop@Worker1~]$jps第106頁(yè)2.搭建Spark完全分布式集群環(huán)境步驟16打開(kāi)瀏覽器,訪問(wèn)“http://master:8080”,可以進(jìn)入主節(jié)點(diǎn)(即Master節(jié)點(diǎn))的監(jiān)控界面,可以看到兩個(gè)Worker節(jié)點(diǎn)處于“Alive”狀態(tài),如圖所示。第107頁(yè)Spark的生態(tài)系統(tǒng)Spark的運(yùn)行架構(gòu)Spark運(yùn)行的基本流程Spark的部署模式任務(wù)三開(kāi)發(fā)并運(yùn)行應(yīng)用程序第109頁(yè)不同的運(yùn)行環(huán)境已搭建完成,接下來(lái)就可以開(kāi)發(fā)并運(yùn)行應(yīng)用程序了。在此之前,需要選擇合適的編程語(yǔ)言和開(kāi)發(fā)工具,學(xué)習(xí)常用的PySpark命令,并掌握采用不同的部署模式運(yùn)行應(yīng)用程序的方法。本任務(wù)結(jié)合身份證戶籍地查詢案例,在PyCharm中開(kāi)發(fā)Spark應(yīng)用程序,并分別在Spark本地環(huán)境和集群環(huán)境中運(yùn)行應(yīng)用程序。第110頁(yè)一、編程語(yǔ)言的選擇Spark支持多種編程語(yǔ)言,包括Python、Scala、Java和R語(yǔ)言等。每種編程語(yǔ)言都有各自的特點(diǎn)和適合的應(yīng)用領(lǐng)域。PythonScalaJavaR語(yǔ)言第111頁(yè)一、編程語(yǔ)言的選擇是一種動(dòng)態(tài)編程語(yǔ)言,擁有清晰的代碼結(jié)構(gòu)和良好的代碼風(fēng)格,易于學(xué)習(xí)和使用。擁有大量的標(biāo)準(zhǔn)庫(kù)、第三方庫(kù)和框架,可以幫助開(kāi)發(fā)人員快速實(shí)現(xiàn)復(fù)雜的功能。常用于數(shù)據(jù)分析、人工智能和Web開(kāi)發(fā)等多個(gè)領(lǐng)域。是一個(gè)簡(jiǎn)單、高效、跨平臺(tái)、應(yīng)用廣泛、社區(qū)支持強(qiáng)大的編程語(yǔ)言。Python(本書采用Python語(yǔ)言開(kāi)發(fā)Spark應(yīng)用程序)第112頁(yè)一、編程語(yǔ)言的選擇一種面向?qū)ο蟮木幊陶Z(yǔ)言。Spark最初就是用Scala語(yǔ)言開(kāi)發(fā)的,是Spark的原生語(yǔ)言。具有靜態(tài)類型、函數(shù)式編程、擴(kuò)展性和并發(fā)性等特性,復(fù)雜分布式應(yīng)用程序的常用編程語(yǔ)言。在大規(guī)模分布式計(jì)算中,代碼的可讀性尤為重要。Scala的代碼可讀性高,可以幫助開(kāi)發(fā)人員快速理解代碼的邏輯。Scala第113頁(yè)一、編程語(yǔ)言的選擇一種流行的、面向?qū)ο蟮木幊陶Z(yǔ)言,并且在企業(yè)級(jí)應(yīng)用中被廣泛使用。具有平臺(tái)無(wú)關(guān)性、可移植性、安全可靠和可擴(kuò)展性等特點(diǎn)。提供了Hadoop和Spark等大數(shù)據(jù)處理框架,便于開(kāi)發(fā)和實(shí)現(xiàn)大數(shù)據(jù)處理應(yīng)用程序。Java第114頁(yè)一、編程語(yǔ)言的選擇用于數(shù)據(jù)分析和統(tǒng)計(jì)建模的編程語(yǔ)言,有著豐富的統(tǒng)計(jì)庫(kù)和可視化工具。簡(jiǎn)單易學(xué),并可以輕松地與其他編程語(yǔ)言(如Python或C++)結(jié)合使用。專注于數(shù)據(jù)處理、探索性數(shù)據(jù)分析、統(tǒng)計(jì)建模和數(shù)據(jù)可視化等數(shù)據(jù)科學(xué)領(lǐng)域。R語(yǔ)言第115頁(yè)P(yáng)ySpark是ApacheSpark的PythonAPI,它提供了許多用于數(shù)據(jù)操作、SQL查詢、流處理、機(jī)器學(xué)習(xí)和圖處理的庫(kù)和工具,以便Python開(kāi)發(fā)人員使用Spark的分布式計(jì)算能力來(lái)處理大規(guī)模數(shù)據(jù)集和執(zhí)行復(fù)雜的數(shù)據(jù)處理任務(wù)。此外,PySpark還提供了PySparkShell,用于交互式分析大數(shù)據(jù)。二、PySpark命令第116頁(yè)用戶可以使用PySpark命令啟動(dòng)PySparkShell,然后再編寫和運(yùn)行代碼。PySpark命令格式如下:pyspark[options][options]表示可選擇的參數(shù)選項(xiàng),執(zhí)行“pyspark--help”命令可以查看完整的參數(shù)選項(xiàng)。二、PySpark命令第117頁(yè)Spark的運(yùn)行模式取決于傳遞給SparkContext的MasterURL的值,可使用參數(shù)“--masterMasterURL”設(shè)置MasterURL的值,命令如下:pyspark--masterMasterURL二、PySpark命令第118頁(yè)二、PySpark命令MasterURL的取值MasterURL說(shuō)明示例local使用單個(gè)Worker線程本地化運(yùn)行Spark(完全不并行)[hadoop@bogon~]$
pyspark--masterlocallocal[k]使用k個(gè)Worker線程本地化運(yùn)行Spark[hadoop@bogon~]$
pyspark--masterlocal[4]yarn連接到采用YARN作為集群管理器的Spark集群[hadoop@Master~]$
pyspark--masteryarn第119頁(yè)二、PySpark命令MasterURL的取值MasterURL說(shuō)明示例local[*]使用與邏輯CPU個(gè)數(shù)相同數(shù)量的Worker線程本地化運(yùn)行Spark。其中,邏輯CPU個(gè)數(shù)=物理CPU個(gè)數(shù)×每個(gè)物理CPU包含的CPU核數(shù)[hadoop@bogon~]$
pyspark--masterlocal[*]k8s://https://host:port連接到采用Kubernetes作為集群管理器的Spark集群??梢灾付↘ubernetesAPIServer的地址和端口號(hào),使用HTTPS協(xié)議與KubernetesAPIServer進(jìn)行通信[hadoop@Master~]$
pyspark--masterk8s://:6443第120頁(yè)二、PySpark命令MasterURL的取值MasterURL說(shuō)明示例spark://host:port連接到指定的采用獨(dú)立集群管理器(即Standalone)的Spark集群。其中,host是Spark集群Master節(jié)點(diǎn)的名稱或IP地址;port是Spark集群Master節(jié)點(diǎn)的端口號(hào),默認(rèn)端口號(hào)是7077[hadoop@Master~]$
pyspark--master
spark://Master:7070第121頁(yè)二、PySpark命令進(jìn)入交互式執(zhí)行環(huán)境后,終端會(huì)出現(xiàn)Python命令提示符“>>>”,直接在提示符后面輸入以下表達(dá)式,然后按回車鍵,終端立即顯示結(jié)果,如圖所示。>>>1*33-29>>>exit()執(zhí)行以下命令,退出交互式執(zhí)行環(huán)境。第122頁(yè)三、開(kāi)發(fā)工具的選擇使用開(kāi)發(fā)工具對(duì)于編寫、調(diào)試和維護(hù)Spark應(yīng)用程序都是非常重要的,其主要原因如下:開(kāi)發(fā)工具提供了調(diào)試和測(cè)試功能,可以快速定位應(yīng)用程序中出現(xiàn)的問(wèn)題。開(kāi)發(fā)工具提供了大量的輔助開(kāi)發(fā)功能,如代碼自動(dòng)補(bǔ)全、模板、代碼片段和快捷鍵等。開(kāi)發(fā)工具提供了語(yǔ)法高亮功能,有助于提高代碼可讀性,也便于開(kāi)發(fā)人員維護(hù)應(yīng)用程序。發(fā)工具提供了共享配置文件、打包應(yīng)用程序和遠(yuǎn)程調(diào)試等功能。第123頁(yè)三、開(kāi)發(fā)工具的選擇常用的開(kāi)發(fā)工具PyCharm功能強(qiáng)大、穩(wěn)定性好的開(kāi)發(fā)工具。它支持多種語(yǔ)言,包括Python、JavaScript、HTML/CSS等,并提供了豐富的插件支持自帶代碼分析、調(diào)試、測(cè)試等功能,可以幫助開(kāi)發(fā)者提高工作效率還有代碼自動(dòng)補(bǔ)全、重構(gòu)、版本控制等功能第124頁(yè)三、開(kāi)發(fā)工具的選擇常用的開(kāi)發(fā)工具JupyterNotebook基于Web的交互式計(jì)算平臺(tái),支持多種編程語(yǔ)言,瀏覽器中直接編寫和運(yùn)行代碼,支持編輯、公式渲染、圖像展示等。操作方式靈活方便,廣泛應(yīng)用于數(shù)據(jù)分析、機(jī)器學(xué)習(xí)等領(lǐng)域。第125頁(yè)三、開(kāi)發(fā)工具的選擇常用的開(kāi)發(fā)工具Spyder使用Python編寫的集成開(kāi)發(fā)環(huán)境,用于數(shù)據(jù)分析和科學(xué)計(jì)算,可以有效提高數(shù)據(jù)處理效率。Spyder具有代碼編輯、調(diào)試、測(cè)試、版本控制和數(shù)據(jù)可視化等多種功能,為用戶帶來(lái)了極大的便利。第126頁(yè)三、開(kāi)發(fā)工具的選擇常用的開(kāi)發(fā)工具PyCharm在Python開(kāi)發(fā)中應(yīng)用廣泛穩(wěn)定性表現(xiàn)優(yōu)異,能夠滿足各種需求在社區(qū)版和專業(yè)版上都擁有大量的用戶支持。處理大型項(xiàng)目時(shí)穩(wěn)定性更好,并且在代碼分析、調(diào)試、自動(dòng)化測(cè)試等方面的功能也更加完備。第127頁(yè)四、運(yùn)行應(yīng)用程序應(yīng)用程序開(kāi)發(fā)結(jié)束后,可以使用spark-submit命令將其提交至Spark單機(jī)環(huán)境或集群環(huán)境中運(yùn)行,該命令格式如下:spark-submit[options] <appjar|pythonfile|Rfile> [apparguments]第128頁(yè)四、運(yùn)行應(yīng)用程序應(yīng)用程序開(kāi)發(fā)結(jié)束后,可以使用spark-submit命令將其提交至Spark單機(jī)環(huán)境或集群環(huán)境中運(yùn)行,該命令格式如下:spark-submit[options] <appjar|pythonfile|Rfile> [apparguments]第129頁(yè)四、運(yùn)行應(yīng)用程序[options][options]表示可選擇的參數(shù)選項(xiàng),執(zhí)行“spark-submit--help”命令可以查看完整的參數(shù)選項(xiàng)。常用的參數(shù)選項(xiàng)有“--masterMasterURL”第130頁(yè)四、運(yùn)行應(yīng)用程序<appjar|pythonfile|Rfile>用于指定要執(zhí)行的應(yīng)用程序代碼的位置。它可以是包含編譯后的Scala或Java代碼的Java存檔文件(JAR)、Python文件或R文件。第131頁(yè)四、運(yùn)行應(yīng)用程序[apparguments]表示傳遞給應(yīng)用程序主類方法的參數(shù)。這些參數(shù)通過(guò)Scala或Java的主方法的參數(shù)數(shù)組(args[]),或通過(guò)Python或R的sys.argv[]應(yīng)用于應(yīng)用程序。第132頁(yè)四、運(yùn)行應(yīng)用程序【例1-1】執(zhí)行以下命令,在Spark單機(jī)環(huán)境中運(yù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)境中運(yù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頁(yè)任務(wù)分析身份證數(shù)據(jù)存放在“/usr/local/spark/mycode/id_card.csv”文件中。身份證號(hào)碼具有唯一性,由18位組成,前6位為行政區(qū)劃代碼,第7—14位為出生日期碼,第15—17位為順序碼,第18位為校驗(yàn)碼。通過(guò)身份證前兩位可以找到持證人的歸屬省份。首先,在PyCharm開(kāi)發(fā)工具中開(kāi)發(fā)應(yīng)用程序,然后將該應(yīng)用程序分別在Spark單機(jī)環(huán)境和集群環(huán)境中運(yùn)行。第134頁(yè)步驟11.在Spark單機(jī)環(huán)境中運(yùn)行應(yīng)用程序打開(kāi)PyCharm,然后單擊“CreateNewProject”打開(kāi)“創(chuàng)建項(xiàng)目”對(duì)話框,接著設(shè)置位置和基礎(chǔ)解釋器,并取消勾選“創(chuàng)建main.py歡迎腳本”復(fù)選框,最后單擊“創(chuàng)建”按鈕,完成項(xiàng)目創(chuàng)建,如圖所示。第135頁(yè)步驟2右擊“PythonProject”項(xiàng)目,在彈出的快捷菜單中選擇“新建”→“目錄”選項(xiàng),打開(kāi)“新建目錄”對(duì)話框,在文本框中輸入目錄名稱“spark_demo”并按“Enter”鍵確認(rèn),如圖所示。第136頁(yè)步驟3右擊“spark_demo”目錄,在彈出的快捷菜單中選擇“新建”→“Python文件”選項(xiàng),打開(kāi)“新建Python文件”對(duì)話框,在文本框中輸入文件名稱“find_province”并按“Enter”鍵確認(rèn),如圖所示。第137頁(yè)步驟4打開(kāi)“find_province.py”文件,編寫應(yīng)用程序frompysparkimportSparkContext,SparkConf#配置Spark應(yīng)用程序conf=SparkConf().setMaster("local").setAppName("Province")#創(chuàng)建SparkContext對(duì)象sc=SparkContext(conf=conf)id_card="file:///usr/local/spark/mycode/id_card.csv"第138頁(yè)步驟4打開(kāi)“find_province.py”文件,編寫應(yīng)用程序#讀取身份證號(hào)碼數(shù)據(jù)并轉(zhuǎn)換為RDDid_card_rdd=sc.textFile(id_card).map(lambdaline:line.split(','))#定義函數(shù),根據(jù)身份證前兩位查找對(duì)應(yīng)歸屬省份deffind_province(id_card_prefix):province_dict={第139頁(yè)步驟4打開(kāi)“find_province.py”文件,編寫應(yīng)用程序
'11':'北京市','12':'天津市','13':'河北省','14':'山西省',‘15’:‘內(nèi)蒙古自治區(qū)’,(……詳見(jiàn)教材)第140頁(yè)步驟4打開(kāi)“find_province.py”文件,編寫應(yīng)用程序}returnprovince_dict.get(id_card_prefix[:4],'省份')#新增一列,根據(jù)身份證前兩位查找對(duì)應(yīng)歸屬省份id_card_rdd=id_card_rdd.map(lambdarow:(row[0],row[1],row[2],row[3],find_province(row[1][:2])))第141頁(yè)步驟4打開(kāi)“find_province.py”文件,編寫應(yīng)用程序#展示結(jié)果forrowinid_card_rdd.collect():print(row)sc.stop()第142頁(yè)步驟5在PyCharm中運(yùn)行代碼,輸出持證人歸屬的省份,如圖所示。第143頁(yè)步驟12.在Spark集群環(huán)境中運(yùn)行應(yīng)用程序在Spark集群環(huán)境中運(yùn)行應(yīng)用程序時(shí),需要保證Master節(jié)點(diǎn)、Worker1節(jié)點(diǎn)和Worker2節(jié)點(diǎn)的“/usr/local/spark/mycode”目錄下均存在“id_card.csv”文件。修改“find_province.py”文件中SparkConf()的配置信息,將應(yīng)用程序修改為在Spark集群環(huán)境中運(yùn)行。#修改SparkConf()配置前conf=SparkConf().setMaster("local").setAppName("Province")#修改SparkConf()配置后conf=SparkConf().setMaster("spark://Master:7077").setAppName("Province")第144頁(yè)步驟2在Master節(jié)點(diǎn)上執(zhí)行以下命令,啟動(dòng)Hadoop和Spark。#啟動(dòng)Hadoop[hadoop@Master~]$cd/usr/local/hadoop[hadoop@Masterhadoop]$./sbin/start-dfs.sh[hadoop@Masterhadoop]$./sbin/start-yarn.sh第145頁(yè)步驟2[hadoop@Masterhadoop]$./sbin/mr-jobhistory-daemon.shstarthistoryserver[hadoop@Masterhadoop]$cd/usr//local/spark/sbin#啟動(dòng)Spark[hadoop@Mastersbin]$./start-all.sh在Master節(jié)點(diǎn)上執(zhí)行以下命令,啟動(dòng)Hadoop和Spark。第146頁(yè)步驟3在Master節(jié)點(diǎn)上執(zhí)行以下命令,將find_province.py應(yīng)用程序提交到Spark集群并運(yùn)行,結(jié)果如圖所示。[hadoop@Master~]$cd/usr/local/spark[hadoop@Masterspark]$./bin/spark-submit\>--masterspark://Master:7077\>~/PycharmProjects/PythonProject/spark_demo/find_province.py第147頁(yè)步驟4打開(kāi)瀏覽器,訪問(wèn)“http://master:8080”,Master節(jié)點(diǎn)的監(jiān)控界面出現(xiàn)名為“Province”的應(yīng)用程序正在運(yùn)行中,如圖所示。第148頁(yè)編程語(yǔ)言的選擇PySpark命令開(kāi)發(fā)工具的選擇運(yùn)行應(yīng)用程序第149頁(yè)1.實(shí)訓(xùn)目標(biāo)(1)熟練掌握搭建Spark單機(jī)環(huán)境和集群環(huán)境的方法。(2)學(xué)會(huì)使用虛擬機(jī)終端編寫Spark應(yīng)用程序。臨時(shí)應(yīng)急處理。(3)熟練掌握在本地環(huán)境和集群環(huán)境中運(yùn)行應(yīng)用程序。第150頁(yè)2.實(shí)訓(xùn)內(nèi)容(1)搭建Spark單機(jī)環(huán)境和Spark集群環(huán)境。(2)使用Linux終端開(kāi)發(fā)Spark應(yīng)用程序,實(shí)現(xiàn)持證人的歸屬省份查詢。(3)分別在不同環(huán)境中運(yùn)行應(yīng)用程序。第151頁(yè)3.實(shí)訓(xùn)提示(1)在終端執(zhí)行以下命令,在“usr/local/spark/mycode”目錄下創(chuàng)建“find_province.py”文件,并使用“vim”命令打開(kāi)該文件。#切換到“/usr/local/spark”目錄[hadoop@Master~]$cd/usr/local/spark#創(chuàng)建“mycode”目錄[hadoop@Masterspark]$mkdirmycode#切換到“mycode”目錄第152頁(yè)3.實(shí)訓(xùn)提示(1)在終端執(zhí)行以下命令,在“usr/local/spark/mycode”目錄下創(chuàng)建“find_province.py”文件,并使用“vim”命令打開(kāi)該文件。[hadoop@Masterspark]$cdmycode#創(chuàng)建“find_province.py”文件[hadoop@Mastermycode]$touchfind_province.py#打開(kāi)“find_province.py”文件[hadoop@Mastermycode]$vimfind_province.py第153頁(yè)3.實(shí)訓(xùn)提示(2)參考任務(wù)三的任務(wù)實(shí)施,在“find_province.py”文件中編寫Spark應(yīng)用程序,實(shí)現(xiàn)根據(jù)持證人身份證號(hào)輸出持證人的歸屬省份。(3)在本地環(huán)境中運(yùn)行“find_province.py”應(yīng)用程序。(4)在集群環(huán)境中運(yùn)行“find_province.py”應(yīng)用程序。第154頁(yè)評(píng)價(jià)項(xiàng)目評(píng)價(jià)內(nèi)容分值評(píng)價(jià)得分自評(píng)師評(píng)知識(shí)(40%)Spark的特點(diǎn)和應(yīng)用場(chǎng)景5分
Spark的生態(tài)系統(tǒng)5分
Spark的運(yùn)行架構(gòu)10分
Spark運(yùn)行的基本流程10分
Spark的
溫馨提示
- 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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒保教知識(shí)與能力-教師資格《幼兒保教知識(shí)與能力》模擬題8
- 《沁園春 長(zhǎng)沙》 教學(xué)設(shè)計(jì) 2024-2025學(xué)年統(tǒng)編版高中語(yǔ)文必修上冊(cè)
- 2025年驅(qū)絳藥項(xiàng)目發(fā)展計(jì)劃
- 2024下半年合肥市梅山飯店有限公司社會(huì)招聘8人筆試參考題庫(kù)附帶答案詳解
- 第三章 整式及其加減單元教學(xué)設(shè)計(jì)-2024-2025學(xué)年魯教版(五四制)數(shù)學(xué)六年級(jí)上冊(cè)
- 2025年阜陽(yáng)科技職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)匯編
- 2025至2030年中國(guó)氣體流量計(jì)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年河北司法警官職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)及參考答案
- 2025年廣元中核職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)完整
- 2025至2030年中國(guó)明桿彈性閘閥數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 生物產(chǎn)品檢驗(yàn)檢疫基礎(chǔ)知識(shí)單選題100道及答案
- 江蘇省中職《英語(yǔ)》學(xué)業(yè)水平考試備考試題集(含歷年真題)
- Unit 3 Environmental Protection Reading and Thinking 選擇性必修第三冊(cè)
- 2025年合伙型公司新合伙人加入?yún)f(xié)議
- 小學(xué)道德與法治課堂教學(xué)中提升學(xué)生核心素養(yǎng)策略
- 中水回用項(xiàng)目可行性研究報(bào)告
- 2025城市商鋪買賣合同書
- 基于主題式教學(xué)法的初級(jí)漢語(yǔ)綜合課《我的低碳生活》教學(xué)設(shè)計(jì)
- 微信公眾號(hào)運(yùn)營(yíng)及推廣合同
- 2025年春新北師大版物理八年級(jí)下冊(cè)課件 第六章 質(zhì)量和密度 第一節(jié) 物體的質(zhì)量及其測(cè)量
- 2024全國(guó)各省高考詩(shī)歌鑒賞真題及解析
評(píng)論
0/150
提交評(píng)論