




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
通信數(shù)據(jù)分析與實戰(zhàn)Spark基礎第二章第1節(jié)2知道Spark的作用了解Spark的生態(tài)圈熟悉Spark的特點學習目標TARGETSpark于2009年誕生于美國加州大學伯克利分校的AMP實驗室,它是一個可應用于大規(guī)模數(shù)據(jù)處理的統(tǒng)一分析引擎。Spark不僅計算速度快,而且內(nèi)置了豐富的API,使得我們能夠更加容易編寫程序。
Spark在2013年加入Apache孵化器項目,之后獲得迅猛的發(fā)展,并于2014年正式成為Apache軟件基金會的頂級項目。Spark生態(tài)系統(tǒng)已經(jīng)發(fā)展成為一個可應用于大規(guī)模數(shù)據(jù)處理的統(tǒng)一分析引擎,它是基于內(nèi)存計算的大數(shù)據(jù)并行計算框架,適用于各種各樣的分布式平臺的系統(tǒng)。Spark的概述Spark生態(tài)圈中包含了SparkSQL、SparkStreaming、GraphX、MLlib等組件。Spark的生態(tài)圈SparkCore和SparkSQLSpark的生態(tài)圈SparkCoreSparkSQLSpark核心組件,實現(xiàn)了Spark的基本功能,包含任務調(diào)度、內(nèi)存管理、錯誤恢復、與存儲系統(tǒng)交互等模塊。SparkCore中還包含對彈性分布式數(shù)據(jù)集的API定義。用來操作結(jié)構(gòu)化數(shù)據(jù)的核心組件,通過SparkSQL可直接查詢Hive、HBase等多種外部數(shù)據(jù)源中的數(shù)據(jù)。SparkSQL的重要特點是能夠統(tǒng)一處理關系表和RDD。SparkStreaming和MLlibSpark的生態(tài)圈MLlibSpark提供的流式計算框架,支持高吞吐量、可容錯處理的實時流式數(shù)據(jù)處理,其核心原理是將流數(shù)據(jù)分解成一系列短小的批處理作業(yè)。SparkStreamingSpark提供的關于機器學習功能的算法程序庫,包括分類、回歸、聚類、協(xié)同過濾算法等,還提供了模型評估、數(shù)據(jù)導入等額外的功能。GraphX和調(diào)度器Spark的生態(tài)圈
GraphX獨立調(diào)度器、Yarn、MesosSpark提供的分布式圖處理框架,擁有對圖計算和圖挖掘算法的API接口及豐富的功能和運算符,便于對分布式圖處理的需求,能在海量數(shù)據(jù)上運行復雜的圖算法。集群管理器,負責Spark框架高效地在一個到數(shù)千個節(jié)點之間進行伸縮計算的資源管理。Spark的特點Spark計算框架在處理數(shù)據(jù)時,所有的中間數(shù)據(jù)都保存在內(nèi)存中,從而減少磁盤讀寫操作,提高框架計算效率。同時Spark還兼容HDFS、Hive,可以很好地與Hadoop系統(tǒng)融合,從而彌補MapReduce高延遲的性能缺點。所以說,Spark是一個更加快速、高效的大數(shù)據(jù)計算平臺。spark速度快易用性通用性兼容性Spark的應用場景數(shù)據(jù)科學數(shù)據(jù)工程師可以利用Spark進行數(shù)據(jù)分析與建模,由于Spark具有良好的易用性,數(shù)據(jù)工程師只需要具備一定的SQL語言基礎、統(tǒng)計學、機器學習等方面的經(jīng)驗,以及使用Python、Matlab或者R語言的基礎編程能力,就可以使用Spark進行上述工作。數(shù)據(jù)處理大數(shù)據(jù)工程師將Spark技術(shù)應用于廣告、報表、推薦系統(tǒng)等業(yè)務中,在廣告業(yè)務中,利用Spark系統(tǒng)進行應用分析、效果分析、定向優(yōu)化等業(yè)務,在推薦系統(tǒng)業(yè)務中,利用Spark內(nèi)置機器學習算法訓練模型數(shù)據(jù),進行個性化推薦及熱點點擊分析等業(yè)務。10小結(jié)知道Spark的作用了解Spark的生態(tài)圈熟悉Spark的特點通信數(shù)據(jù)分析與實戰(zhàn)Spark基礎第二章第2節(jié)12知道Spark的部署方式掌握Spark的安裝過程熟悉Spark的集群部署流程學習目標TARGETSpark的搭建的環(huán)境介紹由于Spark僅僅是一種計算框架,不負責數(shù)據(jù)的存儲和管理,因此,通常都會將Spark和Hadoop進行統(tǒng)一部署,由Hadoop中的HDFS、HBase等組件負責數(shù)據(jù)的存儲管理,Spark負責數(shù)據(jù)計算。
所以在搭建Spark環(huán)境之前,務必安裝好Hadoop的集群環(huán)境Spark的部署方式Standalone模式Standalone模式被稱為集群單機模式。該模式下,Spark集群架構(gòu)為主從模式,即一臺Master節(jié)點與多臺Slave節(jié)點,Slave節(jié)點啟動的進程名稱為Worker,存在單點故障的問題。Mesos模式被稱為SparkonMesos模式。Mesos是一款資源調(diào)度管理系統(tǒng),為Spark提供服務,由于Spark與Mesos存在密切的關系,因此在設計Spark框架時充分考慮到對Mesos的集成。Yarn模式被稱為SparkonYarn模式,即把Spark作為一個客戶端,將作業(yè)提交給Yarn服務。由于在生產(chǎn)環(huán)境中,很多時候都要與Hadoop使用同一個集群,因此采用Yarn來管理資源調(diào)度,可以提高資源利用率。Spark集群安裝部署我們將在Standalone模式下,進行Spark集群的安裝部署。規(guī)劃的Spark集群包含一臺Master節(jié)點和兩臺Slave節(jié)點。其中,主機名hadoop01是Master節(jié)點,hadoop02和hadoop03是Slave節(jié)點。Spark集群安裝部署1、下載Spark安裝包Spark集群安裝部署2、解壓Spark安裝包
首先將下載的spark-2.3.2-bin-hadoop2.7.tgz安裝包上傳到主節(jié)點hadoop01的/export/software目錄下,然后解壓到/export/servers/目錄,解壓命令如下。tar-zxvfspark-2.3.2-bin-hadoop2.7.tgz-C/export/servers/Spark集群安裝部署3、修改配置文件1(1)將spark-env.sh.template配置模板文件復制一份并命名為spark-env.sh
(2)修改spark-env.sh文件,在該文件添加以下內(nèi)容:#配置java環(huán)境變量exportJAVA_HOME=/export/servers/jdk#指定Master的IPexportSPARK_MASTER_HOST=hadoop01#指定Master的端口
exportSPARK_MASTER_PORT=7077Spark集群安裝部署3、修改配置文件2(3)復制slaves.template文件,并重命名為slaves
(4)修改spark-env.sh文件,在該文件添加以下內(nèi)容:通過“vislaves”命令編輯slaves配置文件,主要是指定Spark集群中的從節(jié)點IP,由于在hosts文件中已經(jīng)配置了IP和主機名的映射關系,因此直接使用主機名代替IP,添加內(nèi)容如下。hadoop02hadoop03Spark集群安裝部署4、分發(fā)文件修改完成配置文件后,將spark目錄分發(fā)至hadoop02和hadoop03節(jié)點scp-r/export/servers/spark/hadoop02:/export/servers/scp-r/export/servers/spark/hadoop03:/export/servers/Spark集群安裝部署5、啟動Spark集群sbin/start-all.sh集群進程Spark集群安裝部署5、啟動Spark集群Spark集群管理頁面SparkHA集群部署SparkStandalone集群是主從架構(gòu)的集群模式,由于存在單點故障問題,解決這個問題需要用到Zookeeper服務,其基本原理是將Standalone集群連接到同一個Zookeeper實例并啟動多個Master節(jié)點,利用Zookeeper提供的選舉和狀態(tài)保存功能,可以使一臺Master節(jié)點被選舉,另一臺Master節(jié)點處于Standby狀態(tài)。當活躍的Master發(fā)生故障時,Standby狀態(tài)的Master就會被激活,恢復集群調(diào)度,整個恢復的過程可能需要1-2分鐘。Zookeeper集群安裝1.Zookeeper安裝包的下載安裝由于Zookeeper集群運行需要Java環(huán)境支持,所以要提前安裝JDK(對于jdk的下載安裝這里不作贅述)。Zookeeper安裝包的下載安裝,具體步驟如下:1下載Zookeeper安裝包。Zookeeper的下載地址為:/apache/zookeeper/zookeeper-3.4.10/。上傳Zookeeper安裝包。將下載完畢的Zookeeper安裝包上傳至Linux系統(tǒng)/export/software/目錄下。23解壓安裝Zookeeper安裝包。Zookeeper集群安裝2.Zookeeper的相關配置修改Zookeeper的配置文件。先將zoo_sample.cfg配置文件重命名為zoo.cfg,然后指定dataDir目錄、配置服務器編號與主機名映射關系、設置與主機連接的心跳端口和選舉端口。步驟1:#進入Zookeeper解壓目錄下的conf目錄,復制配置文件zoo_sample.cfg并重命名zoo.cfg
cpzoo_sample.cfgzoo.cfg
#使用vi編輯器打開zoo.cfgvizoo.cfg
#設置數(shù)據(jù)文件目錄+數(shù)據(jù)持久化路徑dataDir=/export/data/zookeeper/zkdata#設置對應的主機名選舉端口號和通信端口號server.1=hadoop01:2888:3888server.2=hadoop02:2888:3888server.3=hadoop03:2888:3888Zookeeper集群安裝2.Zookeeper的相關配置#在指定目錄下創(chuàng)建zkdata文件夾mkdir-p/export/data/zookeeper/zkdata
#在zkdata文件夾下創(chuàng)建myid文件cd/export/data/zookeeper/zkdataecho1>myid步驟2:創(chuàng)建myid文件。根據(jù)配置文件zoo.cfg設置的dataDir目錄,創(chuàng)建zkdata文件夾并創(chuàng)建myid文件,該文件里面的內(nèi)容就是服務器編號。Zookeeper集群安裝2.Zookeeper的相關配置exportZK_HOME=/export/servers/zookeeper-3.4.10exportPATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZK_HOME/bin步驟3:配置環(huán)境變量。執(zhí)行命令vi/etc/profile對profile文件進行修改,添加Zookeeper的環(huán)境變量Zookeeper集群安裝2.Zookeeper的相關配置#將hadoop01上的zookeeper分發(fā)到hadoop02hadoop03上scp-r/export/servers/zookeeper-3.4.10/hadoop02:/export/servers/scp-r/export/servers/zookeeper-3.4.10/hadoop03:/export/servers/#將myid文件分發(fā)到hadoop02hadoop03上,并且修改myid的文件內(nèi)容,依次修改成2,3scp-r/export/data/zookeeper/hadoop02:/export/data/scp-r/export/data/zookeeper/hadoop03:/export/data/#在hadoop02上面操作echo2>/export/data/zookeeper/zkdata/myid#在hadoop03上面操作echo3>/export/data/zookeeper/zkdata/myid
#將profile文件分發(fā)到hadoop02hadoop03上scp/etc/profilehadoop02:/etc/profilescp/etc/profilehadoop03:/etc/profile分發(fā)Zookeeper相關文件至其他服務器。先將Zookeeper安裝目錄、myid文件以及profile文件分發(fā)至hadoop02、hadoop03服務器上,并且修改myid的文件內(nèi)容,依次對應服務器號進行設置,分別為2、3。步驟4:Zookeeper集群安裝2.Zookeeper的相關配置#分別在hadoop01,hadoop02,hadoop03服務器上刷新profile配置文件,使環(huán)境變量生效source/etc/profile步驟5:環(huán)境變量生效。分別在hadoop01、hadoop02、hadoop03服務器上刷新profile配置文件,使環(huán)境變量生效。Zookeeper服務器的啟動和關閉Zookeeper的啟動在hadoop01、hadoop02、hadoop03服務器上使用zkServer.shstart依次啟動Zookeeper服務。執(zhí)行命令“zkServer.shstatus”查看該節(jié)點Zookpeer的角色。步驟1:步驟2:Zookeeper服務器的啟動和關閉Zookeeper的關閉在hadoop01、hadoop02、hadoop03服務器上執(zhí)行zkServer.shstop關閉Zookeeper服務。執(zhí)行命令“zkServer.shstatus”查看該節(jié)點Zookpeer的角色。步驟1:步驟2:SparkHA集群部署1啟動Zookeeper集群服務。2在spark-env.sh配置文件中注釋Master節(jié)點的配置參數(shù),并指定Spark使用Zookeeper管理。3在hadoop01主節(jié)點啟動Spark集群,在hadoop02節(jié)點再次啟動Master服務。4關閉hadoop01節(jié)點中的Master進程,測試SparkHA集群。SparkHA集群部署#依次在三臺節(jié)點上啟動Zookeeper,命令如下:zkServer.shstart1啟動Zookeeper集群服務。SparkHA集群部署2在spark-env.sh配置文件中注釋Master節(jié)點的配置參數(shù),并指定Spark使用Zookeeper管理。#指定Master的IP#exportSPARK_MASTER_HOST=hadoop01#指定Master的端口exportSPARK_MASTER_PORT=7077exportSPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER-Dspark.deploy.zookeeper.url=hadoop01:2181,hadoop02:2181,hadoop03:2181-Dspark.deploy.zookeeper.dir=/spark“[spark.deploy.recoveryMode]():設置Zookeeper去啟動備用Master模式。[spark.deploy.zookeeper.url]():指定ZooKeeper的Server地址。[spark.deploy.zookeeper.dir]():保存集群元數(shù)據(jù)信息的文件、目錄。SparkHA集群部署2在spark-env.sh配置文件中注釋Master節(jié)點的配置參數(shù),并指定Spark使用Zookeeper管理。scpspark-env.shhadoop02:/export/servers/spark/confscpspark-env.shhadoop03:/export/servers/spark/conf配置完成后,將spark-env.sh分發(fā)至hadoop02、hadoop03節(jié)點上,保證配置文件統(tǒng)一,命令如下SparkHA集群部署3在hadoop01主節(jié)點啟動Spark集群,在hadoop02節(jié)點再次啟動Master服務。在hadoop01主節(jié)點使用一鍵啟動腳本啟動,命令如下。/export/servers/spark/sbin/start-all.sh在hadoop02節(jié)點再次啟動Master服務,命令如下。/export/servers/spark/sbin/start-master.sh啟動成功后,通過瀏覽器訪問<http://hadoop02:8080>,查看備用Master節(jié)點狀態(tài)SparkHA集群部署4關閉hadoop01節(jié)點中的Master進程,測試SparkHA集群。SparkHA集群啟動完畢后,為了演示是否解決了單點故障問題,可以關閉在hadoop01節(jié)點中的Master進程,用來模擬在生產(chǎn)環(huán)境中hadoop01突然宕機,命令如下所示。/export/servers/spark/sbin/stop-master.sh執(zhí)行命令后,通過瀏覽器查看http://hadoop01:8080)發(fā)現(xiàn)已經(jīng)無法通過hadoop01節(jié)點訪問Spark集群管理界面。大約經(jīng)過1-2分鐘后,刷新http://hadoop02:8080頁面,可以發(fā)現(xiàn)hadoop02節(jié)點中的Status值更改為ALIVE,Spark集群恢復正常,說明SparkHA配置有效解決了單點故障問題。腳本啟動Zookeeper集群在集群中啟動Zookeeper服務時,需要依次在三臺服務器上執(zhí)行啟動命令,然而在實際工作應用中,集群數(shù)量并非3臺,當遇到數(shù)十臺甚至更多的服務器時,就不得不編寫腳本來啟動服務了,編寫腳本的語言有多種,這里采用Shell語言開發(fā)一鍵啟動Zookeeper服務腳本,使用vi創(chuàng)建start_zk.sh文件#!/bin/shforhostinhadoop01hadoop02hadoop03dossh$host"source/etc/profile;zkServer.shstart"echo"$hostzkisrunning"done39小結(jié)知道Spark的部署方式掌握Spark的安裝過程熟悉Spark的集群部署流程通信數(shù)據(jù)分析與實戰(zhàn)Spark基礎第二章第3節(jié)41了解Spark架構(gòu)的基本概念知道Spark的運行架構(gòu)熟悉Spark的運行流程學習目標TARGET在學習Spark運行架構(gòu)與工作原理之前,首先需要了解幾個重要的概念和術(shù)語基本概述Application(應用)運行main()方法并創(chuàng)建SparkContext的進程。Spark上運行的應用。Application中包含一個驅(qū)動器進程和集群上的多個執(zhí)行器進程。ClusterManager(集群管理器)集群上運行應用程序代碼的任意一個節(jié)點。用于在集群上申請資源的外部服務(如:獨立部署的集群管理器、Mesos或者Yarn)。DriverProgram(驅(qū)動器)WorkerNode(工作節(jié)點)基本概述Executor(執(zhí)行器)運行main()方法并創(chuàng)建SparkContext的進程。在集群工作節(jié)點上為某個應用啟動的工作進程,該進程負責運行計算任務,并為應用程序存儲數(shù)據(jù)。Job(作業(yè))每個Job可劃分為更小的Task集合,每組任務被稱為
Stage一個并行計算作業(yè),由一組任務組成,并由Spark的行動算子(如:save、collect)觸發(fā)啟動。Stage(階段)Task(任務)Spark集群運行架構(gòu)Spark運行架構(gòu)主要由SparkContext、ClusterManager和Worker組成,其中ClusterManager負責整個集群的統(tǒng)一資源管理,Worker節(jié)點中的Executor是應用執(zhí)行的主要進程,內(nèi)部含有多個Task線程以及內(nèi)存空間。Spark集群運行架構(gòu)
Spark應用在集群上運行時,包括了多個獨立的進程,這些進程之間通過驅(qū)動程序(DriverProgram)中的SparkContext對象進行協(xié)調(diào),SparkContext對象能夠與多種集群資源管理器(ClusterManager)通信,一旦與集群資源管理器連接,Spark會為該應用在各個集群節(jié)點上申請執(zhí)行器(Executor),用于執(zhí)行計算任務和存儲數(shù)據(jù)。每個Spark應用程序都有其對應的多個執(zhí)行器進程。執(zhí)行器進程在整個應用程序生命周期內(nèi),都保持運行狀態(tài),并以多線程方式執(zhí)行任務。?驅(qū)動器程序在整個生命周期內(nèi)必須監(jiān)聽并接受其對應的各個執(zhí)行器的連接請求,因此驅(qū)動器程序必須能夠被所有Worker節(jié)點訪問到。因為集群上的任務是由驅(qū)動器來調(diào)度的,所以驅(qū)動器應該放在離集群Worker節(jié)點比較近的機器上。Spark的運行流程Spark的運行流程當一個Spark應用被提交時,根據(jù)提交參數(shù)創(chuàng)建Driver進程,Driver進程初始化SparkContext對象,由SparkContext負責和ClusterManager的通信以及資源的申請、任務的分配和監(jiān)控等。Driver進程向ClusterManager申請資源,ClusterManager接收到Application的注冊請求后,會使用自己的資源調(diào)度算法,在Spark集群的Worker節(jié)點上,通知Worker為應用啟動多個Executor。Executor創(chuàng)建后,會向ClusterManager進行資源及狀態(tài)的反饋,便于ClusterManager對Executor進行狀態(tài)監(jiān)控,如果監(jiān)控到Executor失敗,則會立刻重新創(chuàng)建。步驟1步驟2步驟3Spark的運行流程Executor會向SparkContext反向注冊申請Task。TaskScheduler將Task發(fā)送給Worker進程中的Executor運行并提供應用程序代碼。當程序執(zhí)行完畢后寫入數(shù)據(jù),Driver向ClusterManager注銷申請的資源。步驟4步驟5步驟649小結(jié)了解Spark架構(gòu)的基本概念知道Spark的運行架構(gòu)熟悉Spark的運行流程通信數(shù)據(jù)分析與實戰(zhàn)Spark基礎第二章第4節(jié)51知道Spark的小程序的調(diào)用知道查看小程序的運行結(jié)果學習目標TARGET我們可以通過運行Spark官方示例SparkPi,體驗Spark集群提交任務的流程。執(zhí)行下述代碼塊中的命令,提交SparkPi程序。第一個Spark程序bin/spark-submit--classorg.apache.spark.examples.SparkPi--masterspark://hadoop01:7077--executor-memory1G--total-executor-cores1examples/jars/spark-examples_2.11-2.3.2.jar10提交Spark作業(yè)后,觀察Spark集群管理界面,其中“RunningApplications”列表表示當前Spark集群正在計算的作業(yè),執(zhí)行幾秒后,刷新界面,在CompletedApplications表單下,可以看到當前應用執(zhí)行完畢,返回控制臺查看輸出信息,出現(xiàn)了“Piisroughly3.140691140691141”,說明Pi值已經(jīng)被計算完畢第一個Spark程序54小結(jié)知道Spark的小程序的調(diào)用知道查看小程序的運行結(jié)果通信數(shù)據(jù)分析與實戰(zhàn)Spark基礎第二章第5節(jié)56掌握SparkShell的啟動掌握SparkShell和HDFS交互學習目標TARGETSpark
Shell介紹Spark-Shell是一個強大的交互式數(shù)據(jù)分析工具,初學者可以很好的使用它來學習相關API,用戶可以在命令行下使用Scala編寫Spark程序,并且每當輸入一條語句,Spark-Shell就會立即執(zhí)行語句并返回結(jié)果,這就是我們所說的REPL(Read-Eval-PrintLoop,交互式解釋器),Spark-Shell支持Scala和Python,如果需要進入Python語言的交互式執(zhí)行環(huán)境,只需要執(zhí)行“pyspark”命令即可。Spark
Shell啟動在spark/bin目錄中,執(zhí)行下列命令進入Spark-Shell交互環(huán)境:--master”表示指定當前連接的Master節(jié)點<master-url>用于指定Spark的運行模式bin/spark-shell--master<master-url>Spark
Shell啟動<master-url>可取的詳細值如下所示。下面通過啟動Spark-Shell,并且使用Scala語言開發(fā)單詞計數(shù)的Spark程序,現(xiàn)需要有文本文件words.txt(需要在本地創(chuàng)建文件并上傳至指定目錄)在HDFS中的/spark/test路徑下,且文本內(nèi)容如下:SparkShell讀取HDFS文件
hellohadoophellosparkhello
yuanlongpinghellohuangxuhua#在hadoop01上創(chuàng)建words.txt文件cd/export/dataviwords.txt#啟動Hadoop集群start-all.sh#創(chuàng)建文件夾在Hadoop上面hadoopfs–mkdir–p/spark/test#上傳本地文件到Hadoop指定路徑hadoopfs–put/export/data/words.txt/spark/test/SparkShell讀取HDFS文件
1整合Spark和HDFS。2啟動Hadoop、Spark服務。3啟動Spark–Shell編寫程序。4退出Spark-Shell客戶端。SparkShell讀取HDFS文件
exportHADOOP_CONF_DIR=/export/servers/hadoop-2.7.4/etc/hadoop1整合Spark和HDFS。Spark加載HDFS上的文件,需要修改spark-env.sh配置文件,添加HADOOP_CONF_DIR配置參數(shù),指定Hadoop配置文件的目錄,添加配置參數(shù)如下。SparkShell讀取HDFS文件
#啟動Hadoop集群start-all.sh#啟動zookeepercd~zk_start.sh#啟動spark集群/export/servers/spark/sbin/start-all.sh配置完畢后,啟動Hadoop集群服務,并重新啟動Spark集群服務,使配置文件生效。2啟動Hadoop、Spark服務。SparkShell讀取HDFS文件
#啟動Spark-Shell交互式界面cd/export/servers/spark/bin/spark-shell--masterlocal[2]#Spark-Shell本身就是一個Driver,它會初始化一個SparkContext對象為“sc”,用戶可以直接調(diào)用
scala>sc.textFile("/spark/test/words.txt").flatMap(_.split("")).map((_,1)).reduceByKey(_+_).collectres0:Array[(String,Int)]=Array((yuanlongping,1),(hello,4),(spark,1),(huangxuhua,1))3啟動Spark–Shell編寫程序。SparkShell讀取HDFS文件
#可以使用命令:quit或者ctrl+D退出Spark-shellScala>:quit4退出Spark-Shell客戶端。66小結(jié)掌握SparkShell的啟動掌握SparkShell和HDFS交互通信數(shù)據(jù)分析與實戰(zhàn)Spark基礎第二章第6節(jié)68掌握創(chuàng)建Maven項目掌握IDEA編寫Spark程序流程掌握Spark集群運行Spark程序?qū)W習目標TARGET
Spark-Shell通常在測試和驗證我們的程序時使用的較多,然而在生產(chǎn)環(huán)境中,通常會在IDEA開發(fā)工具中編寫程序,然后打成Jar包,最后提交到集群中執(zhí)行。本節(jié)我們將利用IDEA工具開發(fā)一個WordCount單詞計數(shù)程序。
WordCount案例步驟一:創(chuàng)建Maven項目步驟二:添加Spark相關依賴,打包插件步驟三:編寫代碼,查看結(jié)果WordCount案例創(chuàng)建一個名為“spark_chapter02”的Maven項目,然后在main和test目錄下分別創(chuàng)建一個名稱為scala的文件夾。步驟一:創(chuàng)建Maven項目將文件夾標記為資源文件夾類型WordCount案例步驟二:添加Spark相關依賴,打包插件設置依賴的版本號添加了Scala、Hadoop和Spark相關的依賴根據(jù)素材pom.xml復制內(nèi)容WordCount案例步驟三:編寫代碼,查看結(jié)果在main目錄的scala文件夾中,創(chuàng)建WordCount.scala文件實現(xiàn)詞頻統(tǒng)計。
objectWordCount{
defmain(args:Array[String]):Unit={
//1.創(chuàng)建SparkConf對象,設置appName和Master地址
valsparkconf=new
SparkConf().setAppName("WordCount").setMaster("local[2]")
//2.創(chuàng)建SparkContext對象,它是所有任務計算的源頭,
//它會創(chuàng)建DAGScheduler和TaskScheduler
valsparkContext=newSparkContext(sparkconf)
//3.讀取數(shù)據(jù)文件,RDD可以簡單的理解為是一個集合-集合中存放的元素是String類型
valdata:RDD[String]=sparkContext.textFile("D:\\word\\words.txt")WordCount案例步驟三:編寫代碼,查看結(jié)果
//4.切分每一行,獲取所有的單詞
valwords:RDD[String]=data.flatMap(_.split(""))
//5.每個單詞記為1,轉(zhuǎn)換為(單詞,1)
valwordAndOne:RDD[(String,Int)]=words.map(x=>(x,1))
//6.相同單詞匯總,前一個下劃線表示累加數(shù)據(jù),后一個下劃線表示新數(shù)據(jù)
valresult:RDD[(String,Int)]=wordAndOne.reduceByKey(_+_)
//7.收集打印結(jié)果數(shù)據(jù)
valfinalResult:Array[(String,Int)]=result.collect()println(finalResult.toBuffer)
//8.關閉sparkContext對象
sparkContext.stop()集群模式執(zhí)行Spark程序步驟一:添加打包插件步驟二:修改代碼,打包程序
步驟三:執(zhí)行提交命令“spark-submit”集群模式執(zhí)行Spark程序步驟一:添加打包插件在實際工作應用中,代碼編寫完成后,需要將程序打包,上傳至服務器運行,因此還需要向pom.xml文件中添加所需插件,具體配置參數(shù)見素材中pom.xmlbuild中的內(nèi)容小提示:如果在創(chuàng)建Maven工程中選擇Scala原型模板,上述插件會自動創(chuàng)建。這些插件的主要功能是方便開發(fā)人員進行打包。集群模式執(zhí)行Spark程序在打包項目之前,需要對詞頻統(tǒng)計的代碼進行修改,創(chuàng)建WordCount_Online.scala文件
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 4s店裝潢合同協(xié)議
- 駕校場地收購合同協(xié)議
- 合同里加入保密協(xié)議
- 工程竣工審核合同協(xié)議
- 合同工能簽三方協(xié)議
- 工程師證書合同協(xié)議
- 廢膠水桶回收合同協(xié)議
- arm機維保合同協(xié)議
- 合川?;肺锪骱贤瑓f(xié)議
- 合同商業(yè)合同協(xié)議
- 血液制品規(guī)范輸注
- 2025-2030中國生物醫(yī)藥行業(yè)市場深度調(diào)研及發(fā)展趨勢與投資前景預測研究報告
- 專利代理師高頻題庫新版2025
- 肝硬化護理新進展
- 2025年征信業(yè)務合規(guī)培訓
- 2025年全國國家版圖知識競賽題庫及答案(中小學組)
- 2025項目部與供應商安全生產(chǎn)物資供應合同
- 統(tǒng)借統(tǒng)還合同協(xié)議
- 2025年上半年中國十五冶金建設集團限公司公開招聘中高端人才易考易錯模擬試題(共500題)試卷后附參考答案
- 養(yǎng)老院護理九防內(nèi)容課件
- XX鎮(zhèn)衛(wèi)生院綜治信訪維穩(wěn)工作方案
評論
0/150
提交評論