版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
通信數(shù)據(jù)分析與實(shí)戰(zhàn)Spark基礎(chǔ)第二章第1節(jié)2知道Spark的作用了解Spark的生態(tài)圈熟悉Spark的特點(diǎn)學(xué)習(xí)目標(biāo)TARGETSpark于2009年誕生于美國(guó)加州大學(xué)伯克利分校的AMP實(shí)驗(yàn)室,它是一個(gè)可應(yīng)用于大規(guī)模數(shù)據(jù)處理的統(tǒng)一分析引擎。Spark不僅計(jì)算速度快,而且內(nèi)置了豐富的API,使得我們能夠更加容易編寫(xiě)程序。
Spark在2013年加入Apache孵化器項(xiàng)目,之后獲得迅猛的發(fā)展,并于2014年正式成為Apache軟件基金會(huì)的頂級(jí)項(xiàng)目。Spark生態(tài)系統(tǒng)已經(jīng)發(fā)展成為一個(gè)可應(yīng)用于大規(guī)模數(shù)據(jù)處理的統(tǒng)一分析引擎,它是基于內(nèi)存計(jì)算的大數(shù)據(jù)并行計(jì)算框架,適用于各種各樣的分布式平臺(tái)的系統(tǒng)。Spark的概述Spark生態(tài)圈中包含了SparkSQL、SparkStreaming、GraphX、MLlib等組件。Spark的生態(tài)圈SparkCore和SparkSQLSpark的生態(tài)圈SparkCoreSparkSQLSpark核心組件,實(shí)現(xiàn)了Spark的基本功能,包含任務(wù)調(diào)度、內(nèi)存管理、錯(cuò)誤恢復(fù)、與存儲(chǔ)系統(tǒng)交互等模塊。SparkCore中還包含對(duì)彈性分布式數(shù)據(jù)集的API定義。用來(lái)操作結(jié)構(gòu)化數(shù)據(jù)的核心組件,通過(guò)SparkSQL可直接查詢Hive、HBase等多種外部數(shù)據(jù)源中的數(shù)據(jù)。SparkSQL的重要特點(diǎn)是能夠統(tǒng)一處理關(guān)系表和RDD。SparkStreaming和MLlibSpark的生態(tài)圈MLlibSpark提供的流式計(jì)算框架,支持高吞吐量、可容錯(cuò)處理的實(shí)時(shí)流式數(shù)據(jù)處理,其核心原理是將流數(shù)據(jù)分解成一系列短小的批處理作業(yè)。SparkStreamingSpark提供的關(guān)于機(jī)器學(xué)習(xí)功能的算法程序庫(kù),包括分類、回歸、聚類、協(xié)同過(guò)濾算法等,還提供了模型評(píng)估、數(shù)據(jù)導(dǎo)入等額外的功能。GraphX和調(diào)度器Spark的生態(tài)圈
GraphX獨(dú)立調(diào)度器、Yarn、MesosSpark提供的分布式圖處理框架,擁有對(duì)圖計(jì)算和圖挖掘算法的API接口及豐富的功能和運(yùn)算符,便于對(duì)分布式圖處理的需求,能在海量數(shù)據(jù)上運(yùn)行復(fù)雜的圖算法。集群管理器,負(fù)責(zé)Spark框架高效地在一個(gè)到數(shù)千個(gè)節(jié)點(diǎn)之間進(jìn)行伸縮計(jì)算的資源管理。Spark的特點(diǎn)Spark計(jì)算框架在處理數(shù)據(jù)時(shí),所有的中間數(shù)據(jù)都保存在內(nèi)存中,從而減少磁盤(pán)讀寫(xiě)操作,提高框架計(jì)算效率。同時(shí)Spark還兼容HDFS、Hive,可以很好地與Hadoop系統(tǒng)融合,從而彌補(bǔ)MapReduce高延遲的性能缺點(diǎn)。所以說(shuō),Spark是一個(gè)更加快速、高效的大數(shù)據(jù)計(jì)算平臺(tái)。spark速度快易用性通用性兼容性Spark的應(yīng)用場(chǎng)景數(shù)據(jù)科學(xué)數(shù)據(jù)工程師可以利用Spark進(jìn)行數(shù)據(jù)分析與建模,由于Spark具有良好的易用性,數(shù)據(jù)工程師只需要具備一定的SQL語(yǔ)言基礎(chǔ)、統(tǒng)計(jì)學(xué)、機(jī)器學(xué)習(xí)等方面的經(jīng)驗(yàn),以及使用Python、Matlab或者R語(yǔ)言的基礎(chǔ)編程能力,就可以使用Spark進(jìn)行上述工作。數(shù)據(jù)處理大數(shù)據(jù)工程師將Spark技術(shù)應(yīng)用于廣告、報(bào)表、推薦系統(tǒng)等業(yè)務(wù)中,在廣告業(yè)務(wù)中,利用Spark系統(tǒng)進(jìn)行應(yīng)用分析、效果分析、定向優(yōu)化等業(yè)務(wù),在推薦系統(tǒng)業(yè)務(wù)中,利用Spark內(nèi)置機(jī)器學(xué)習(xí)算法訓(xùn)練模型數(shù)據(jù),進(jìn)行個(gè)性化推薦及熱點(diǎn)點(diǎn)擊分析等業(yè)務(wù)。10小結(jié)知道Spark的作用了解Spark的生態(tài)圈熟悉Spark的特點(diǎn)通信數(shù)據(jù)分析與實(shí)戰(zhàn)Spark基礎(chǔ)第二章第2節(jié)12知道Spark的部署方式掌握Spark的安裝過(guò)程熟悉Spark的集群部署流程學(xué)習(xí)目標(biāo)TARGETSpark的搭建的環(huán)境介紹由于Spark僅僅是一種計(jì)算框架,不負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)和管理,因此,通常都會(huì)將Spark和Hadoop進(jìn)行統(tǒng)一部署,由Hadoop中的HDFS、HBase等組件負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)管理,Spark負(fù)責(zé)數(shù)據(jù)計(jì)算。
所以在搭建Spark環(huán)境之前,務(wù)必安裝好Hadoop的集群環(huán)境Spark的部署方式Standalone模式Standalone模式被稱為集群?jiǎn)螜C(jī)模式。該模式下,Spark集群架構(gòu)為主從模式,即一臺(tái)Master節(jié)點(diǎn)與多臺(tái)Slave節(jié)點(diǎn),Slave節(jié)點(diǎn)啟動(dòng)的進(jìn)程名稱為Worker,存在單點(diǎn)故障的問(wèn)題。Mesos模式被稱為SparkonMesos模式。Mesos是一款資源調(diào)度管理系統(tǒng),為Spark提供服務(wù),由于Spark與Mesos存在密切的關(guān)系,因此在設(shè)計(jì)Spark框架時(shí)充分考慮到對(duì)Mesos的集成。Yarn模式被稱為SparkonYarn模式,即把Spark作為一個(gè)客戶端,將作業(yè)提交給Yarn服務(wù)。由于在生產(chǎn)環(huán)境中,很多時(shí)候都要與Hadoop使用同一個(gè)集群,因此采用Yarn來(lái)管理資源調(diào)度,可以提高資源利用率。Spark集群安裝部署我們將在Standalone模式下,進(jìn)行Spark集群的安裝部署。規(guī)劃的Spark集群包含一臺(tái)Master節(jié)點(diǎn)和兩臺(tái)Slave節(jié)點(diǎn)。其中,主機(jī)名hadoop01是Master節(jié)點(diǎn),hadoop02和hadoop03是Slave節(jié)點(diǎn)。Spark集群安裝部署1、下載Spark安裝包Spark集群安裝部署2、解壓Spark安裝包
首先將下載的spark-2.3.2-bin-hadoop2.7.tgz安裝包上傳到主節(jié)點(diǎn)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配置模板文件復(fù)制一份并命名為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)復(fù)制slaves.template文件,并重命名為slaves
(4)修改spark-env.sh文件,在該文件添加以下內(nèi)容:通過(guò)“vislaves”命令編輯slaves配置文件,主要是指定Spark集群中的從節(jié)點(diǎn)IP,由于在hosts文件中已經(jīng)配置了IP和主機(jī)名的映射關(guān)系,因此直接使用主機(jī)名代替IP,添加內(nèi)容如下。hadoop02hadoop03Spark集群安裝部署4、分發(fā)文件修改完成配置文件后,將spark目錄分發(fā)至hadoop02和hadoop03節(jié)點(diǎn)scp-r/export/servers/spark/hadoop02:/export/servers/scp-r/export/servers/spark/hadoop03:/export/servers/Spark集群安裝部署5、啟動(dòng)Spark集群sbin/start-all.sh集群進(jìn)程Spark集群安裝部署5、啟動(dòng)Spark集群Spark集群管理頁(yè)面SparkHA集群部署SparkStandalone集群是主從架構(gòu)的集群模式,由于存在單點(diǎn)故障問(wèn)題,解決這個(gè)問(wèn)題需要用到Zookeeper服務(wù),其基本原理是將Standalone集群連接到同一個(gè)Zookeeper實(shí)例并啟動(dòng)多個(gè)Master節(jié)點(diǎn),利用Zookeeper提供的選舉和狀態(tài)保存功能,可以使一臺(tái)Master節(jié)點(diǎn)被選舉,另一臺(tái)Master節(jié)點(diǎn)處于Standby狀態(tài)。當(dāng)活躍的Master發(fā)生故障時(shí),Standby狀態(tài)的Master就會(huì)被激活,恢復(fù)集群調(diào)度,整個(gè)恢復(fù)的過(guò)程可能需要1-2分鐘。Zookeeper集群安裝1.Zookeeper安裝包的下載安裝由于Zookeeper集群運(yùn)行需要Java環(huán)境支持,所以要提前安裝JDK(對(duì)于jdk的下載安裝這里不作贅述)。Zookeeper安裝包的下載安裝,具體步驟如下:1下載Zookeeper安裝包。Zookeeper的下載地址為:/apache/zookeeper/zookeeper-3.4.10/。上傳Zookeeper安裝包。將下載完畢的Zookeeper安裝包上傳至Linux系統(tǒng)/export/software/目錄下。23解壓安裝Zookeeper安裝包。Zookeeper集群安裝2.Zookeeper的相關(guān)配置修改Zookeeper的配置文件。先將zoo_sample.cfg配置文件重命名為zoo.cfg,然后指定dataDir目錄、配置服務(wù)器編號(hào)與主機(jī)名映射關(guān)系、設(shè)置與主機(jī)連接的心跳端口和選舉端口。步驟1:#進(jìn)入Zookeeper解壓目錄下的conf目錄,復(fù)制配置文件zoo_sample.cfg并重命名zoo.cfg
cpzoo_sample.cfgzoo.cfg
#使用vi編輯器打開(kāi)zoo.cfgvizoo.cfg
#設(shè)置數(shù)據(jù)文件目錄+數(shù)據(jù)持久化路徑dataDir=/export/data/zookeeper/zkdata#設(shè)置對(duì)應(yīng)的主機(jī)名選舉端口號(hào)和通信端口號(hào)server.1=hadoop01:2888:3888server.2=hadoop02:2888:3888server.3=hadoop03:2888:3888Zookeeper集群安裝2.Zookeeper的相關(guān)配置#在指定目錄下創(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設(shè)置的dataDir目錄,創(chuàng)建zkdata文件夾并創(chuàng)建myid文件,該文件里面的內(nèi)容就是服務(wù)器編號(hào)。Zookeeper集群安裝2.Zookeeper的相關(guān)配置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對(duì)profile文件進(jìn)行修改,添加Zookeeper的環(huán)境變量Zookeeper集群安裝2.Zookeeper的相關(guān)配置#將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相關(guān)文件至其他服務(wù)器。先將Zookeeper安裝目錄、myid文件以及profile文件分發(fā)至hadoop02、hadoop03服務(wù)器上,并且修改myid的文件內(nèi)容,依次對(duì)應(yīng)服務(wù)器號(hào)進(jìn)行設(shè)置,分別為2、3。步驟4:Zookeeper集群安裝2.Zookeeper的相關(guān)配置#分別在hadoop01,hadoop02,hadoop03服務(wù)器上刷新profile配置文件,使環(huán)境變量生效source/etc/profile步驟5:環(huán)境變量生效。分別在hadoop01、hadoop02、hadoop03服務(wù)器上刷新profile配置文件,使環(huán)境變量生效。Zookeeper服務(wù)器的啟動(dòng)和關(guān)閉Zookeeper的啟動(dòng)在hadoop01、hadoop02、hadoop03服務(wù)器上使用zkServer.shstart依次啟動(dòng)Zookeeper服務(wù)。執(zhí)行命令“zkServer.shstatus”查看該節(jié)點(diǎn)Zookpeer的角色。步驟1:步驟2:Zookeeper服務(wù)器的啟動(dòng)和關(guān)閉Zookeeper的關(guān)閉在hadoop01、hadoop02、hadoop03服務(wù)器上執(zhí)行zkServer.shstop關(guān)閉Zookeeper服務(wù)。執(zhí)行命令“zkServer.shstatus”查看該節(jié)點(diǎn)Zookpeer的角色。步驟1:步驟2:SparkHA集群部署1啟動(dòng)Zookeeper集群服務(wù)。2在spark-env.sh配置文件中注釋Master節(jié)點(diǎn)的配置參數(shù),并指定Spark使用Zookeeper管理。3在hadoop01主節(jié)點(diǎn)啟動(dòng)Spark集群,在hadoop02節(jié)點(diǎn)再次啟動(dòng)Master服務(wù)。4關(guān)閉hadoop01節(jié)點(diǎn)中的Master進(jìn)程,測(cè)試SparkHA集群。SparkHA集群部署#依次在三臺(tái)節(jié)點(diǎn)上啟動(dòng)Zookeeper,命令如下:zkServer.shstart1啟動(dòng)Zookeeper集群服務(wù)。SparkHA集群部署2在spark-env.sh配置文件中注釋Master節(jié)點(diǎn)的配置參數(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]():設(shè)置Zookeeper去啟動(dòng)備用Master模式。[spark.deploy.zookeeper.url]():指定ZooKeeper的Server地址。[spark.deploy.zookeeper.dir]():保存集群元數(shù)據(jù)信息的文件、目錄。SparkHA集群部署2在spark-env.sh配置文件中注釋Master節(jié)點(diǎn)的配置參數(shù),并指定Spark使用Zookeeper管理。scpspark-env.shhadoop02:/export/servers/spark/confscpspark-env.shhadoop03:/export/servers/spark/conf配置完成后,將spark-env.sh分發(fā)至hadoop02、hadoop03節(jié)點(diǎn)上,保證配置文件統(tǒng)一,命令如下SparkHA集群部署3在hadoop01主節(jié)點(diǎn)啟動(dòng)Spark集群,在hadoop02節(jié)點(diǎn)再次啟動(dòng)Master服務(wù)。在hadoop01主節(jié)點(diǎn)使用一鍵啟動(dòng)腳本啟動(dòng),命令如下。/export/servers/spark/sbin/start-all.sh在hadoop02節(jié)點(diǎn)再次啟動(dòng)Master服務(wù),命令如下。/export/servers/spark/sbin/start-master.sh啟動(dòng)成功后,通過(guò)瀏覽器訪問(wèn)<http://hadoop02:8080>,查看備用Master節(jié)點(diǎn)狀態(tài)SparkHA集群部署4關(guān)閉hadoop01節(jié)點(diǎn)中的Master進(jìn)程,測(cè)試SparkHA集群。SparkHA集群?jiǎn)?dòng)完畢后,為了演示是否解決了單點(diǎn)故障問(wèn)題,可以關(guān)閉在hadoop01節(jié)點(diǎn)中的Master進(jìn)程,用來(lái)模擬在生產(chǎn)環(huán)境中hadoop01突然宕機(jī),命令如下所示。/export/servers/spark/sbin/stop-master.sh執(zhí)行命令后,通過(guò)瀏覽器查看http://hadoop01:8080)發(fā)現(xiàn)已經(jīng)無(wú)法通過(guò)hadoop01節(jié)點(diǎn)訪問(wèn)Spark集群管理界面。大約經(jīng)過(guò)1-2分鐘后,刷新http://hadoop02:8080頁(yè)面,可以發(fā)現(xiàn)hadoop02節(jié)點(diǎn)中的Status值更改為ALIVE,Spark集群恢復(fù)正常,說(shuō)明SparkHA配置有效解決了單點(diǎn)故障問(wèn)題。腳本啟動(dòng)Zookeeper集群在集群中啟動(dòng)Zookeeper服務(wù)時(shí),需要依次在三臺(tái)服務(wù)器上執(zhí)行啟動(dòng)命令,然而在實(shí)際工作應(yīng)用中,集群數(shù)量并非3臺(tái),當(dāng)遇到數(shù)十臺(tái)甚至更多的服務(wù)器時(shí),就不得不編寫(xiě)腳本來(lái)啟動(dòng)服務(wù)了,編寫(xiě)腳本的語(yǔ)言有多種,這里采用Shell語(yǔ)言開(kāi)發(fā)一鍵啟動(dòng)Zookeeper服務(wù)腳本,使用vi創(chuàng)建start_zk.sh文件#!/bin/shforhostinhadoop01hadoop02hadoop03dossh$host"source/etc/profile;zkServer.shstart"echo"$hostzkisrunning"done39小結(jié)知道Spark的部署方式掌握Spark的安裝過(guò)程熟悉Spark的集群部署流程通信數(shù)據(jù)分析與實(shí)戰(zhàn)Spark基礎(chǔ)第二章第3節(jié)41了解Spark架構(gòu)的基本概念知道Spark的運(yùn)行架構(gòu)熟悉Spark的運(yùn)行流程學(xué)習(xí)目標(biāo)TARGET在學(xué)習(xí)Spark運(yùn)行架構(gòu)與工作原理之前,首先需要了解幾個(gè)重要的概念和術(shù)語(yǔ)基本概述Application(應(yīng)用)運(yùn)行main()方法并創(chuàng)建SparkContext的進(jìn)程。Spark上運(yùn)行的應(yīng)用。Application中包含一個(gè)驅(qū)動(dòng)器進(jìn)程和集群上的多個(gè)執(zhí)行器進(jìn)程。ClusterManager(集群管理器)集群上運(yùn)行應(yīng)用程序代碼的任意一個(gè)節(jié)點(diǎn)。用于在集群上申請(qǐng)資源的外部服務(wù)(如:獨(dú)立部署的集群管理器、Mesos或者Yarn)。DriverProgram(驅(qū)動(dòng)器)WorkerNode(工作節(jié)點(diǎn))基本概述Executor(執(zhí)行器)運(yùn)行main()方法并創(chuàng)建SparkContext的進(jìn)程。在集群工作節(jié)點(diǎn)上為某個(gè)應(yīng)用啟動(dòng)的工作進(jìn)程,該進(jìn)程負(fù)責(zé)運(yùn)行計(jì)算任務(wù),并為應(yīng)用程序存儲(chǔ)數(shù)據(jù)。Job(作業(yè))每個(gè)Job可劃分為更小的Task集合,每組任務(wù)被稱為
Stage一個(gè)并行計(jì)算作業(yè),由一組任務(wù)組成,并由Spark的行動(dòng)算子(如:save、collect)觸發(fā)啟動(dòng)。Stage(階段)Task(任務(wù))Spark集群運(yùn)行架構(gòu)Spark運(yùn)行架構(gòu)主要由SparkContext、ClusterManager和Worker組成,其中ClusterManager負(fù)責(zé)整個(gè)集群的統(tǒng)一資源管理,Worker節(jié)點(diǎn)中的Executor是應(yīng)用執(zhí)行的主要進(jìn)程,內(nèi)部含有多個(gè)Task線程以及內(nèi)存空間。Spark集群運(yùn)行架構(gòu)
Spark應(yīng)用在集群上運(yùn)行時(shí),包括了多個(gè)獨(dú)立的進(jìn)程,這些進(jìn)程之間通過(guò)驅(qū)動(dòng)程序(DriverProgram)中的SparkContext對(duì)象進(jìn)行協(xié)調(diào),SparkContext對(duì)象能夠與多種集群資源管理器(ClusterManager)通信,一旦與集群資源管理器連接,Spark會(huì)為該應(yīng)用在各個(gè)集群節(jié)點(diǎn)上申請(qǐng)執(zhí)行器(Executor),用于執(zhí)行計(jì)算任務(wù)和存儲(chǔ)數(shù)據(jù)。每個(gè)Spark應(yīng)用程序都有其對(duì)應(yīng)的多個(gè)執(zhí)行器進(jìn)程。執(zhí)行器進(jìn)程在整個(gè)應(yīng)用程序生命周期內(nèi),都保持運(yùn)行狀態(tài),并以多線程方式執(zhí)行任務(wù)。?驅(qū)動(dòng)器程序在整個(gè)生命周期內(nèi)必須監(jiān)聽(tīng)并接受其對(duì)應(yīng)的各個(gè)執(zhí)行器的連接請(qǐng)求,因此驅(qū)動(dòng)器程序必須能夠被所有Worker節(jié)點(diǎn)訪問(wèn)到。因?yàn)榧荷系娜蝿?wù)是由驅(qū)動(dòng)器來(lái)調(diào)度的,所以驅(qū)動(dòng)器應(yīng)該放在離集群Worker節(jié)點(diǎn)比較近的機(jī)器上。Spark的運(yùn)行流程Spark的運(yùn)行流程當(dāng)一個(gè)Spark應(yīng)用被提交時(shí),根據(jù)提交參數(shù)創(chuàng)建Driver進(jìn)程,Driver進(jìn)程初始化SparkContext對(duì)象,由SparkContext負(fù)責(zé)和ClusterManager的通信以及資源的申請(qǐng)、任務(wù)的分配和監(jiān)控等。Driver進(jìn)程向ClusterManager申請(qǐng)資源,ClusterManager接收到Application的注冊(cè)請(qǐng)求后,會(huì)使用自己的資源調(diào)度算法,在Spark集群的Worker節(jié)點(diǎn)上,通知Worker為應(yīng)用啟動(dòng)多個(gè)Executor。Executor創(chuàng)建后,會(huì)向ClusterManager進(jìn)行資源及狀態(tài)的反饋,便于ClusterManager對(duì)Executor進(jìn)行狀態(tài)監(jiān)控,如果監(jiān)控到Executor失敗,則會(huì)立刻重新創(chuàng)建。步驟1步驟2步驟3Spark的運(yùn)行流程Executor會(huì)向SparkContext反向注冊(cè)申請(qǐng)Task。TaskScheduler將Task發(fā)送給Worker進(jìn)程中的Executor運(yùn)行并提供應(yīng)用程序代碼。當(dāng)程序執(zhí)行完畢后寫(xiě)入數(shù)據(jù),Driver向ClusterManager注銷申請(qǐng)的資源。步驟4步驟5步驟649小結(jié)了解Spark架構(gòu)的基本概念知道Spark的運(yùn)行架構(gòu)熟悉Spark的運(yùn)行流程通信數(shù)據(jù)分析與實(shí)戰(zhàn)Spark基礎(chǔ)第二章第4節(jié)51知道Spark的小程序的調(diào)用知道查看小程序的運(yùn)行結(jié)果學(xué)習(xí)目標(biāo)TARGET我們可以通過(guò)運(yùn)行Spark官方示例SparkPi,體驗(yàn)Spark集群提交任務(wù)的流程。執(zhí)行下述代碼塊中的命令,提交SparkPi程序。第一個(gè)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”列表表示當(dāng)前Spark集群正在計(jì)算的作業(yè),執(zhí)行幾秒后,刷新界面,在CompletedApplications表單下,可以看到當(dāng)前應(yīng)用執(zhí)行完畢,返回控制臺(tái)查看輸出信息,出現(xiàn)了“Piisroughly3.140691140691141”,說(shuō)明Pi值已經(jīng)被計(jì)算完畢第一個(gè)Spark程序54小結(jié)知道Spark的小程序的調(diào)用知道查看小程序的運(yùn)行結(jié)果通信數(shù)據(jù)分析與實(shí)戰(zhàn)Spark基礎(chǔ)第二章第5節(jié)56掌握SparkShell的啟動(dòng)掌握SparkShell和HDFS交互學(xué)習(xí)目標(biāo)TARGETSpark
Shell介紹Spark-Shell是一個(gè)強(qiáng)大的交互式數(shù)據(jù)分析工具,初學(xué)者可以很好的使用它來(lái)學(xué)習(xí)相關(guān)API,用戶可以在命令行下使用Scala編寫(xiě)Spark程序,并且每當(dāng)輸入一條語(yǔ)句,Spark-Shell就會(huì)立即執(zhí)行語(yǔ)句并返回結(jié)果,這就是我們所說(shuō)的REPL(Read-Eval-PrintLoop,交互式解釋器),Spark-Shell支持Scala和Python,如果需要進(jìn)入Python語(yǔ)言的交互式執(zhí)行環(huán)境,只需要執(zhí)行“pyspark”命令即可。Spark
Shell啟動(dòng)在spark/bin目錄中,執(zhí)行下列命令進(jìn)入Spark-Shell交互環(huán)境:--master”表示指定當(dāng)前連接的Master節(jié)點(diǎn)<master-url>用于指定Spark的運(yùn)行模式bin/spark-shell--master<master-url>Spark
Shell啟動(dòng)<master-url>可取的詳細(xì)值如下所示。下面通過(guò)啟動(dòng)Spark-Shell,并且使用Scala語(yǔ)言開(kāi)發(fā)單詞計(jì)數(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#啟動(dòng)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啟動(dòng)Hadoop、Spark服務(wù)。3啟動(dòng)Spark–Shell編寫(xiě)程序。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文件
#啟動(dòng)Hadoop集群start-all.sh#啟動(dòng)zookeepercd~zk_start.sh#啟動(dòng)spark集群/export/servers/spark/sbin/start-all.sh配置完畢后,啟動(dòng)Hadoop集群服務(wù),并重新啟動(dòng)Spark集群服務(wù),使配置文件生效。2啟動(dòng)Hadoop、Spark服務(wù)。SparkShell讀取HDFS文件
#啟動(dòng)Spark-Shell交互式界面cd/export/servers/spark/bin/spark-shell--masterlocal[2]#Spark-Shell本身就是一個(gè)Driver,它會(huì)初始化一個(gè)SparkContext對(duì)象為“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啟動(dòng)Spark–Shell編寫(xiě)程序。SparkShell讀取HDFS文件
#可以使用命令:quit或者ctrl+D退出Spark-shellScala>:quit4退出Spark-Shell客戶端。66小結(jié)掌握SparkShell的啟動(dòng)掌握SparkShell和HDFS交互通信數(shù)據(jù)分析與實(shí)戰(zhàn)Spark基礎(chǔ)第二章第6節(jié)68掌握創(chuàng)建Maven項(xiàng)目掌握IDEA編寫(xiě)Spark程序流程掌握Spark集群運(yùn)行Spark程序?qū)W習(xí)目標(biāo)TARGET
Spark-Shell通常在測(cè)試和驗(yàn)證我們的程序時(shí)使用的較多,然而在生產(chǎn)環(huán)境中,通常會(huì)在IDEA開(kāi)發(fā)工具中編寫(xiě)程序,然后打成Jar包,最后提交到集群中執(zhí)行。本節(jié)我們將利用IDEA工具開(kāi)發(fā)一個(gè)WordCount單詞計(jì)數(shù)程序。
WordCount案例步驟一:創(chuàng)建Maven項(xiàng)目步驟二:添加Spark相關(guān)依賴,打包插件步驟三:編寫(xiě)代碼,查看結(jié)果WordCount案例創(chuàng)建一個(gè)名為“spark_chapter02”的Maven項(xiàng)目,然后在main和test目錄下分別創(chuàng)建一個(gè)名稱為scala的文件夾。步驟一:創(chuàng)建Maven項(xiàng)目將文件夾標(biāo)記為資源文件夾類型WordCount案例步驟二:添加Spark相關(guān)依賴,打包插件設(shè)置依賴的版本號(hào)添加了Scala、Hadoop和Spark相關(guān)的依賴根據(jù)素材pom.xml復(fù)制內(nèi)容WordCount案例步驟三:編寫(xiě)代碼,查看結(jié)果在main目錄的scala文件夾中,創(chuàng)建WordCount.scala文件實(shí)現(xiàn)詞頻統(tǒng)計(jì)。
objectWordCount{
defmain(args:Array[String]):Unit={
//1.創(chuàng)建SparkConf對(duì)象,設(shè)置appName和Master地址
valsparkconf=new
SparkConf().setAppName("WordCount").setMaster("local[2]")
//2.創(chuàng)建SparkContext對(duì)象,它是所有任務(wù)計(jì)算的源頭,
//它會(huì)創(chuàng)建DAGScheduler和TaskScheduler
valsparkContext=newSparkContext(sparkconf)
//3.讀取數(shù)據(jù)文件,RDD可以簡(jiǎn)單的理解為是一個(gè)集合-集合中存放的元素是String類型
valdata:RDD[String]=sparkContext.textFile("D:\\word\\words.txt")WordCount案例步驟三:編寫(xiě)代碼,查看結(jié)果
//4.切分每一行,獲取所有的單詞
valwords:RDD[String]=data.flatMap(_.split(""))
//5.每個(gè)單詞記為1,轉(zhuǎn)換為(單詞,1)
valwordAndOne:RDD[(String,Int)]=words.map(x=>(x,1))
//6.相同單詞匯總,前一個(gè)下劃線表示累加數(shù)據(jù),后一個(gè)下劃線表示新數(shù)據(jù)
valresult:RDD[(String,Int)]=wordAndOne.reduceByKey(_+_)
//7.收集打印結(jié)果數(shù)據(jù)
valfinalResult:Array[(String,Int)]=result.collect()println(finalResult.toBuffer)
//8.關(guān)閉sparkContext對(duì)象
sparkContext.stop()集群模式執(zhí)行Spark程序步驟一:添加打包插件步驟二:修改代碼,打包程序
步驟三:執(zhí)行提交命令“spark-submit”集群模式執(zhí)行Spark程序步驟一:添加打包插件在實(shí)際工作應(yīng)用中,代碼編寫(xiě)完成后,需要將程序打包,上傳至服務(wù)器運(yùn)行,因此還需要向pom.xml文件中添加所需插件,具體配置參數(shù)見(jiàn)素材中pom.xmlbuild中的內(nèi)容小提示:如果在創(chuàng)建Maven工程中選擇Scala原型模板,上述插件會(huì)自動(dòng)創(chuàng)建。這些插件的主要功能是方便開(kāi)發(fā)人員進(jìn)行打包。集群模式執(zhí)行Spark程序在打包項(xiàng)目之前,需要對(duì)詞頻統(tǒng)計(jì)的代碼進(jìn)行修改,創(chuàng)建WordCount_Online.scala文件
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024瀝青采購(gòu)合同
- 2023-2024學(xué)年人教版(2015)小學(xué)信息技術(shù)四年級(jí)下冊(cè)文字處理初嘗試(說(shuō)課稿)
- 2024某影視公司與某廣告公司關(guān)于影視植入廣告服務(wù)的合同
- 1 《沁園春·長(zhǎng)沙》 (說(shuō)課稿)-2024-2025學(xué)年高一語(yǔ)文同步說(shuō)課稿與知識(shí)梳理(統(tǒng)編版必修上冊(cè))
- 5G網(wǎng)絡(luò)建設(shè)與優(yōu)化協(xié)議
- 2024年革新版:基于VR技術(shù)的虛擬物流培訓(xùn)服務(wù)合同
- 2024陜西餐飲業(yè)勞動(dòng)合同范本及服務(wù)條款3篇
- 2《學(xué)會(huì)溝通交流》第1課時(shí)說(shuō)課稿-2024-2025學(xué)年道德與法治五年級(jí)上冊(cè)統(tǒng)編版
- 11變廢為寶有妙招(說(shuō)課稿)-部編版道德與法治四年級(jí)上冊(cè)
- 2025年度文化產(chǎn)業(yè)融合發(fā)展合同補(bǔ)充協(xié)議3篇
- 過(guò)敏性紫癜-教學(xué)課件
- GB/T 24183-2021金屬材料薄板和薄帶制耳試驗(yàn)方法
- 醫(yī)院手術(shù)分級(jí)動(dòng)態(tài)管理表
- 湖南2023消耗量定額說(shuō)明及計(jì)算規(guī)則-市政工程
- 藥店血液制品管理制度 全
- 污水管網(wǎng)工程主要項(xiàng)目清單與計(jì)價(jià)表參考模板范本
- 危險(xiǎn)化學(xué)品儲(chǔ)存柜安全管理
- 術(shù)后惡心嘔吐防治專家共識(shí)(全文)
- 圓形蓄水池工程量及配筋Excel計(jì)算
- 浙教版初中科學(xué)八下《表示元素的符號(hào)》課件
- 汽車儀表與顯示系統(tǒng)課件
評(píng)論
0/150
提交評(píng)論