版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
項目7
基于Spark開發(fā)環(huán)境實現(xiàn)廣告流量檢測違規(guī)識別知識準備教學目標知識目標掌握JDK安裝和環(huán)境配置。掌握在IDEA等編程軟件創(chuàng)建Scala工程。掌握Spark運行環(huán)境配置。教學目標技能目標能夠本地環(huán)境下配置JDK環(huán)境,實現(xiàn)Java環(huán)境運行。能夠在IDEA中配置相關(guān)插件和開發(fā)依賴包,實現(xiàn)Scala工程創(chuàng)建。能夠在開發(fā)環(huán)境中添加Spark運行環(huán)境配置,實現(xiàn)Spark程序運行。教學目標素質(zhì)目標具備新的學習思維模式,通過擴展思維空間,進而深度了解Spark開發(fā)環(huán)境搭建。具備刻苦鉆研的學習態(tài)度,通過學習Spark運行環(huán)境配置,實現(xiàn)Spark程序運行。具備靈活地運用思維,通過學習SparkShell及Spark集成開發(fā)環(huán)境,能夠應用到實際需求中。思維導圖項目背景在實際業(yè)務場景中,廣告流量檢測違規(guī)識別面臨著數(shù)據(jù)量大和對違規(guī)識別的要求高等挑戰(zhàn)。使用SparkShell會對每個指令做出反饋,能夠為執(zhí)行Spark迭代操作快速得到結(jié)果,適合用于快速測試和探索數(shù)據(jù),但對于大規(guī)模的數(shù)據(jù)處理和復雜的任務,其性能可能不如使用集成開發(fā)工具。項目背景同時,SparkShell的交互式操作方式可能不夠靈活,對于需要頻繁運行和調(diào)試的任務來說,編程開發(fā)工具能夠提供更好的開發(fā)和調(diào)試體驗。因此,使用集成開發(fā)工具可以更好地解決實際的廣告流量檢測違規(guī)識別。當前集成開發(fā)環(huán)境工具主要有IntelliJIDEA和Eclipse,本書采用比較大眾化的IntelliJIDEA開發(fā)工具。本項目通過搭建Spark開發(fā)環(huán)境,將多行代碼、多個類進行協(xié)調(diào),實現(xiàn)廣告流量檢測違規(guī)識別。項目目標通過搭建Spark開發(fā)環(huán)境,對廣告流量檢測數(shù)據(jù)搭建模型,通過算法構(gòu)建分類模型,并將程序提交到集群中運行,實現(xiàn)廣告流量檢測違規(guī)識別。目標分析配置集群連接參數(shù)設置,將廣告流量檢測違規(guī)識別Spark程序編譯成Jar包,在集群環(huán)境中運行。保存廣告流量檢測違規(guī)識別訓練完成后的模型和預測結(jié)果。搭建Java開發(fā)環(huán)境搭建Spark開發(fā)環(huán)境搭建Java開發(fā)環(huán)境積累基本的知識和技能,加強基礎研究,形成良好的工作和學習習慣,培養(yǎng)健康的心理狀態(tài)和人際關(guān)系,再加上進一步地學習、工作和成長,才能夠更加穩(wěn)固地邁向成功。由于Spark是使用Scala語言開發(fā)的,而Scala運行在Java虛擬機(JVM)之上的,可以兼容現(xiàn)有的所有Java程序,故在搭建Spark開發(fā)環(huán)境之前先進行Java環(huán)境開發(fā)。安裝JDK8在JDK官網(wǎng)下載JDK8安裝包,根據(jù)電腦的系統(tǒng)選擇對應的版本,其中x86表示32位Windows系統(tǒng),x64表示64位Windows系統(tǒng)。以64位Windows系統(tǒng)為例安裝JDK8,安裝包名為jdk-8u281-windows-x64.exe。安裝JDK8安裝JDK8的操作步驟如下。設置JDK安裝目錄。雙擊JDK8安裝包,進入安裝向?qū)Ы缑?,單擊“下一步”按鈕。彈出的JDK的定制安裝窗口如圖所示,設置好JDK8的安裝目錄(本書的安裝在E盤,路徑為:E:\ProgramFiles\Java\jdk1.8.0_281\),單擊“下一步”按鈕。安裝JDK8取消Jre安裝。在安裝的過程中,會跳出要求安裝Java目標文件夾(Jre)的安裝窗口,如左圖所示,由于JDK自帶了Jre,所以無須單獨安裝Jre,單擊右上角的關(guān)閉按鈕,彈出的Java安裝窗口,如右圖所示,單擊“是”按鈕。安裝JDK8JDK安裝完成。JDK安裝成功后的界面如圖所示,單擊“關(guān)閉”按鈕完成安裝。設置環(huán)境變量環(huán)境變量一般指在操作系統(tǒng)中用來指定操作系統(tǒng)運行環(huán)境的一些參數(shù),如path.當要求系統(tǒng)運行一個程序而沒有告訴系統(tǒng)程序所在的完整路徑時,系統(tǒng)除了在當前目錄下面尋找此程序外,還會到path中指定的路徑去找。設置環(huán)境變量在編譯程序時,需要用到javac這個編譯工具,而javac存放在java的安裝目錄下,當需要在其他目錄調(diào)用javac時,系統(tǒng)會因在當前目錄找不到就會報錯,為了方便以后編譯程序,不用每次編譯時都在java安裝目錄中,所以需要進行環(huán)境變量設置。環(huán)境變量設置的基本流程如圖所示。設置環(huán)境變量環(huán)境變量設置步驟如下。打開高級系統(tǒng)設置。鼠標右擊“此電腦”,選擇“屬性”選項,在“相關(guān)設置”中單擊“高級系統(tǒng)設置”選項,彈出“系統(tǒng)屬性”窗口,如圖所示。設置環(huán)境變量新建系統(tǒng)變量。單擊圖的“環(huán)境變量”按鈕,在“系統(tǒng)變量”選項卡中單擊“新建”按鈕,新建JAVA_HOME變量,變量值為JDK8安裝路徑,如圖所示,單擊“確定”按鈕。設置環(huán)境變量編輯環(huán)境變量。在系統(tǒng)變量中找到Path變量,單擊“編輯”按鈕,在彈出的“編輯環(huán)境變量”窗口中,單擊“新建”按鈕.然后輸入JDK安裝路徑下的bin目錄,如圖所示,單擊“確定”按鈕。設置環(huán)境變量驗證JDK安裝??旖萱IWin+R,打開命令提示符窗口進行校驗,輸入“java-version”,單擊Enter鍵,顯示JDK的版本為1.8.0_281,如圖所示,則表示已經(jīng)安裝成功。搭建Java開發(fā)環(huán)境搭建Spark開發(fā)環(huán)境搭建Spark開發(fā)環(huán)境安裝好Java開發(fā)環(huán)境后,即可搭建Spark開發(fā)環(huán)境。一般搭建流程為:先下載安裝IntelliJIDEA(簡稱IDEA),并在IDEA中安裝Scala插件;然后添加Spark開發(fā)依賴包,配置Spark運行環(huán)境,實現(xiàn)Spark工程的創(chuàng)建、Spark程序的編寫與運行。下載與安裝IntelliJIDEA在官網(wǎng)下載IntelliJIDEA安裝包,安裝包名稱為“ideaIC-2018.3.6.exe”,本書使用的IDEA版本為社區(qū)版,即Community版,社區(qū)版是免費開源的。安裝IntelliJIDEA的基本流程如圖所示。下載與安裝IntelliJIDEA安裝IntelliJIDEA的操作步驟如下。設置IDEA安裝目錄。雙擊IDEA安裝包,進入安裝向?qū)Ы缑?,單擊“Next”按鈕。IDEA安裝目錄設置界面如圖所示,設置好IDEA的安裝目錄后,單擊“Next”按鈕。下載與安裝IntelliJIDEA選擇安裝選項。在跳出的“InstallationOptions”對話窗口中,按需進行勾選,本文設置情況如圖所示,其中“CreateDesktopShortcut”意為是否創(chuàng)建桌面快捷方式,本書所有的操作基于60位的Windows10系統(tǒng),所以勾選“64-bitlauncher”選項;“UpdatePATHvariable”意為是否將IDEA的環(huán)境變量添加至Windows系統(tǒng)的環(huán)境變量中,此處勾選了“AddlaunchersdirtoPATH”選項,即添加環(huán)境變量。然后單擊“Next”按鈕。下載與安裝IntelliJIDEA選擇開始菜單文件夾。在跳出的“ChooseStartMenuFolder”對話窗口中,保持默認設置,如圖所示,然后單擊“Install”按鈕。下載與安裝IntelliJIDEA完成IDEA安裝。接下來會彈出的“Installing”對話窗口,如圖所示,等待進度條拉滿,IDEA安裝完成界面如圖所示,單擊“Finish”按鈕完成安裝。下載與安裝IntelliJIDEA設置不導入以前的設定。雙擊桌面生成的IntelliJIDEA圖標啟動IntelliJIDEA。或在“開始”菜單中,依次單擊“JetBrains”→“IntelliJIDEACommunityEdition2018.3.6”啟動IntelliJIDEA。第一次啟動IntelliJIDEA時會詢問是否導入以前的設定,選擇不導入,如圖所示,單擊“OK”按鈕進入下一步。下載與安裝IntelliJIDEA選擇UI主題。進入UI主題的選擇,如圖所示,可以選擇白色或黑色背景,本書選擇白色背景,單擊“Light”頁面,并單擊左下角的“SkipRemainingandSetDefaults”按鈕,跳過其他設置,采用默認設置即可。下載與安裝IntelliJIDEA進入IDEA使用界面。設置完成,IDEA使用界面如圖所示。Scala插件安裝與使用在上一小節(jié)中,因為安裝IntelliJIDEA時選擇了默認安裝,所以Scala插件并沒有安裝。Spark是由Scala語言編寫而成的,因此IntelliJIDEA還需要安裝Scala插件,配置Scala開發(fā)環(huán)境。Scala插件的安裝有在線安裝和離線安裝兩種方式,具體操作過程如下。在線安裝Scala插件在線安裝Scala插件的操作步驟如下。打開IntelliJIDEA,單擊界面右下角的“Configure”下拉列表,選擇“Plugins”選項,如圖所示。在線安裝Scala插件彈出“Plugins”對話框,如圖所示,直接單擊“Scala”下方的“Install”按鈕安裝Scala插件即可。在線安裝Scala插件下載完成后,單擊“RestartIDE”按鈕重啟IDEA,如圖所示。離線安裝Scala插件使用離線安裝的方式安裝Scala插件時,Scala插件需要提前下載至本機計算機中。本書的IntelliJIDEA版本使用的Scala插件為“scala-intellij-bin-2018.3.6.zip”,可從IDEA官網(wǎng)下載。離線安裝Scala插件的操作步驟如下。離線安裝Scala插件在圖所示的“Plugins”對話框中,單擊圖標,在下拉列表中選擇“InstallPluginfromDisk...”選項,彈出“ChoosePluginFile”窗口,選擇Scala插件所在路徑,如圖所示,單擊“OK”按鈕進行安裝。離線安裝Scala插件Scala插件安裝完成后的界面,如圖所示,單擊右側(cè)的“RestartIDE”按鈕重啟IntelliJIDEA即可。測試Scala插件安裝了Scala插件并重啟IntelliJIDEA后,如果想測試Scala插件是否安裝成功,那么可以通過創(chuàng)建Scala工程進行測試。測試Scala插件的基本流程如圖所示。測試Scala插件測試Scala插件的步驟如下。創(chuàng)建Scala工程。在圖所示的界面中,選擇“CreateNewProject”選項,彈出“NewProject”界面,選擇左側(cè)窗格的“Scala”選項,再選擇右側(cè)窗格的“IDEA”選項,單擊“Next”按鈕進入下一步,如圖所示。測試Scala插件配置Scala工程。彈出圖所示的界面,將工程名稱定義為“HelloWorld”,自定義該工程存放路徑,并選擇工程所用JDK和ScalaSDK版本,單擊右下角的“Finish”按鈕,完成Scala工程創(chuàng)建。測試Scala插件Scala工程創(chuàng)建完成后,自動進入IDEA主界面,在左側(cè)導航欄可看到創(chuàng)建好的工程,HelloWorld工程結(jié)構(gòu)如圖所示。測試Scala插件新建Scala類。右鍵單擊HelloWorld工程下的src文件夾,依次選擇“New”→“ScalaClass”選項,在包下新建一個Scala類,如圖所示。測試Scala插件配置Scala類。在彈出的“CreateNewScalaClass”窗口中,將Scala類的類名設置為“HelloWorld”,并在“Kind”右側(cè)的下拉列表中選擇“Object”選項,如圖所示,單擊“OK”按鈕,完成Scala類的創(chuàng)建。測試Scala插件編寫程序。在類“HelloWorld”中即可編寫Scala程序。運行程序。選擇菜單欄中的“Run”,再依次選擇“Run”→“Run'HelloWorld'”選項,若控制臺打印出運行結(jié)果,如圖所示,則證明Scala環(huán)境的配置沒有問題。在IDEA中配置Spark運行環(huán)境使用IDEA開發(fā)程序,相比spark-shell編寫代碼,更加方便以外,通過配置運行環(huán)境,還可以直接運行整個Spark程序。添加Spark開發(fā)依賴包在IDEA中配置Spark運行環(huán)境,需要先在IDEA中添加Spark開發(fā)依賴包。選擇菜單欄中的“File”→“ProjectStructure...”選項,工程結(jié)構(gòu)配置界面如圖所示。也可以使用“Ctrl+Alt+Shift+S”快捷鍵打開。添加Spark開發(fā)依賴包在圖所示的工程結(jié)構(gòu)配置界面中,選擇“Libraries”選項,單擊“+”按鈕,選擇“Java”選項,如圖所示。添加Spark開發(fā)依賴包在彈出的界面中找到Spark安裝目錄下的jars文件夾,將整個文件夾導入,如圖所示,單擊“Apply”按鈕與“OK”按鈕即可將Spark開發(fā)依賴包加入到工程中。至此Spark的編程環(huán)境配置完成。編寫Spark程序Spark運行環(huán)境配置完成后,即可開始在IDEA開發(fā)環(huán)境中編寫Spark程序。但在編寫Spark程序前需要先了解Spark程序運行的設計要點。編寫Spark程序任何Spark程序均是以SparkContext對象開始的,因為SparkContext是Spark應用程序的上下文和入口,所以無論是使用Scala、Python或R語言編寫的Spark程序,均是通過SparkContext對象的實例化創(chuàng)建RDD。在spark-shell中SparkContext對象自動實例化為變量sc。而在IDEA中進行Spark應用程序開發(fā)時,則需要在main()方法中初始化SparkContext對象,作為Spark應用程序的入口,并在Spark程序結(jié)束時關(guān)閉SparkContext對象。編寫Spark程序初始化SparkContext需要一個SparkConf類,SparkConf包含了Spark集群配置的各種參數(shù),如設置程序名setAppName、設置運行模式setMaster等。SparkConf的屬性參數(shù)是一種鍵值對的形式,一般通過“set(屬性名,屬性設置值)”的方法修改屬性。編寫Spark程序SparkContext對象實例化后,即可通過實例變量進行集合轉(zhuǎn)換或數(shù)據(jù)讀取,并且Spark計算過程中使用的轉(zhuǎn)換操作和行動操作與在spark-shell環(huán)境中一致。以詞頻統(tǒng)計為例,編寫Spark程序?qū)崿F(xiàn)中文分詞和詞頻統(tǒng)計。要想通過Spark實現(xiàn)中文分詞,需借助jieba進行分詞,因此,需要導入依賴jieba-analysis-1.0.2.jar。編寫Spark程序在HelloWorld工程中下新建WordCountLocal類,并指定類型為Object,編寫Spark程序?qū)崿F(xiàn)平均值計算。程序中創(chuàng)建了一個SparkConf對象的實例conf,并且設置了程序名,通過conf創(chuàng)建并初始化一個SparkContext的實例變量sc,再通過Spark的轉(zhuǎn)換操作和行動操作實現(xiàn)中文分詞和詞頻統(tǒng)計。運行Spark程序在開發(fā)環(huán)境中編寫的類并不能像spark-shell環(huán)境一樣,直接在Spark集群中運行,還需要配置指定的參數(shù),并通過特定的方式才能在Spark集群中運行。Spark程序的運行根據(jù)運行的位置可以分為兩種方式,一種是在開發(fā)環(huán)境下運行Spark程序,另一種是在Spark集群環(huán)境中運行Spark程序。運行Spark程序在開發(fā)環(huán)境下運行Spark在開發(fā)環(huán)境下運行Spark程序,可以通過SparkConf對象的setMaster()方法連接至Spark集群環(huán)境,即可在開發(fā)環(huán)境下直接運行Spark程序。在WordCountLocal類中,通過SparkConf實例設置程序運行模式為“l(fā)ocal”。在IDEA中運行Spark程序時,文件的輸入路徑可以是本地路徑,也可以是HDFS文件系統(tǒng)的路徑。在開發(fā)環(huán)境下運行Spark設置URL參數(shù)在本地開發(fā)環(huán)境下運行Spark程序,程序中有以下幾點需要設置。在IDEA中直接運行程序的關(guān)鍵點是設置URL參數(shù)。如果不使用setMaster()方法設置URL參數(shù),那么程序?qū)⒄也坏街鞴?jié)點(master)的URL,會報出相應的錯誤。除了通過setMaster()方法設置URL參數(shù)之外,也可以通過依次選擇菜單欄的“Run”→“EditConfigurations...”選項。在開發(fā)環(huán)境下運行Spark在彈出的對話框中,選擇“Application”→“HelloWorld”選項,并在右側(cè)“VMoptions”對應的文本框中寫入“-Dspark.master=local”,指定為本地模式,如圖所示,然后依次單擊“Apply”按鈕和“OK”按鈕。其中,“l(fā)ocal”是指定使用的URL參數(shù)。在開發(fā)環(huán)境下運行Spark在代碼中指定要連接的集群的URL參數(shù)為“l(fā)ocal”,即本地運行,可以在不開啟Spark集群的情況下運行。除了本地模式“l(fā)ocal”,還可以設置URL參數(shù),如表所示。URL參數(shù)含義local使用一個工作線程在本地模式運行Spark(即根本沒有并行性)local[K]使用K個工作線程在本地模式運行Spark(理想情況下,將其設置為機器上的內(nèi)核數(shù))local[*]在本地運行Spark,工作線程與機器上的邏輯內(nèi)核一樣多spark://HOST:PORT連接到指定端口的Spark獨立集群上,默認為7077端口mesos://HOST:PORT連接到指定端口的Mesos集群yarn根據(jù)配置的值連接到Y(jié)ARN集群,使用client或cluster模式y(tǒng)arn-client應用程序以客戶端模式運行,相當于YARN用--deploy-modeclient參數(shù)yarn-cluster應用程序以集群模式運行,相當于YARN用--deploy-modecluster參數(shù)。只能在集群中運行時使用在開發(fā)環(huán)境下運行Spark需要注意的是,“spark://HOST:PORT”是獨立集群的URL參數(shù),是在Spark集群中運行的,因此一定要啟動Spark集群。若是本地模式或YARN集群模式運行,則可以不用打開Spark集群,但YARN集群模式需要啟動Hadoop集群。在開發(fā)環(huán)境中,只能指定“yarn-client”的客戶端模式,不能指定“yarn-cluster”。而且在開發(fā)環(huán)境中指定“yarn-client”還需要額外設置YARN的一些相關(guān)配置,因此不建議在開發(fā)環(huán)境中直接指定該方式運行。在開發(fā)環(huán)境下運行Spark指定Hadoop安裝包的bin文件夾的路徑本地在運行Spark程序時還需要指定Hadoop安裝包的bin文件夾的路徑,有兩種方式。第一種是通過參數(shù)的方式進行設置,對應參數(shù)名是“hadoop.home.dir”,指定的路徑為“D:\\hadoop-3.1.4”。在開發(fā)環(huán)境下運行Spark第二種指定“hadoop.home.dir”的方式是在Windows的環(huán)境變量的Path變量中添加Hadoop安裝包的bin文件夾的路徑,此時代碼所示的程序則不再需要指定該參數(shù)。在Hadoop安裝包的bin文件夾中還需要添加幾個Hadoop插件,分別是winutils.exe、winutils.pdb、libwinutils.lib、hadoop.exp、hadoop.lib、hadoop.pdb。讀者可在GitHub官網(wǎng)上自行下載并添加到/bin文件夾中。在開發(fā)環(huán)境下運行Spark設置自定義輸入?yún)?shù)如果程序有自定義的輸入?yún)?shù),那么運行程序之前還需要選擇菜單欄中的“Run”→“EditConfigurations...”→“Programarguments”選項進行設置。在代碼中并沒有設置輸入?yún)?shù),因此直接選擇菜單欄中的“Run”→“Run”選項,運行“WordCountLocal”程序即可,控制臺的輸出的部分結(jié)果如圖所示。在集群環(huán)境中運行Spark直接在開發(fā)環(huán)境下運行Spark程序通常選擇的是本地模式。如果數(shù)據(jù)的規(guī)模比較龐大,更常用的還是將Spark程序編譯打包為JAR包,并通過spark-submit命令提交到Spark集群環(huán)境中運行。在集群環(huán)境中運行Sparkspark-submit的腳本在Spark安裝目錄的bin目錄下,spark-submit是Spark為所有支持的集群管理器提供的一個提交作業(yè)的工具。Spark在/example目錄下有Scala、Java、Python和R的示例程序,都可以通過spark-submit運行。在集群環(huán)境中運行Sparkspark-submit提交JAR包到集群有一定的格式要求,需要設置一些參數(shù),參數(shù)設置如表所示。參數(shù)參數(shù)說明--class應用程序的入口點,指主程序--master指定要連接的集群URL的參數(shù)--deploy-mode設置將驅(qū)動程序部署在集群的工作節(jié)點(cluster),或?qū)⑵洳渴鹪诒镜氐耐獠靠蛻舳耍╟lient)--conf設置任意Spark配置屬性,允許使用"key=valueWordCount"的格式設置任意的SparkConf配置選項application-jar包含應用程序和所有依賴關(guān)系的JAR包的路徑application-arguments傳遞給main()方法的參數(shù)在集群環(huán)境中運行Spark如果除了設置運行的application.jar之外不設置其他參數(shù),那么Spark程序默認在本地運行。在HelloWorld工程中下新建AverageDriver類,并指定類型為Object,將URL參數(shù)更改為打包到集群中運行。程序中無須設置master地址、Hadoop安裝包位置。輸入、輸出路徑可通過spark-submit指定。在集群環(huán)境中運行Spark程序完成后按照以下步驟進行編譯打包。1.在IntelliJIDEA中打包工程(輸出JAR)在菜單欄中選擇“File”→“ProjectStructure…”選項,在彈出的對話框中選擇“Artifacts”選項,單擊“+”按鈕,依次選擇“JAR”→“Empty”,如圖所示。在集群環(huán)境中運行Spark在彈出的對話框中,“Name”對應的文本框可自定義JAR包的名稱,為“word”,雙擊右側(cè)欄“HelloWorld”下的“'HelloWorld'compileoutput”,會轉(zhuǎn)移到左側(cè),如圖所示。表示已添加工程至JAR包中,再單擊右下角的“OK”按鈕即可。在集群環(huán)境中運行Spark2.編譯生成構(gòu)件構(gòu)件(Artifact)是指在軟件構(gòu)建過程中生成的可部署或可執(zhí)行的文件。Artifact包含了項目的源代碼、依賴項以及其他必要的資源,可以被部署到目標環(huán)境中進行運行或使用。選擇菜單欄中的“Build”→“BuildArtifacts”命令,如圖所示。在集群環(huán)境中運行Spark在彈出的窗體中選擇“Build”選項,如圖所示。在集群環(huán)境中運行Spark生成Artifact后,在工程目錄中會有一個/out目錄,可以看到生成的JAR包,如圖所示。在集群環(huán)境中運行Spark右鍵單擊“word.jar”,在彈出菜單中選擇“ShowinExplorer”命令,如圖所示,可進入JAR包路徑。在集群環(huán)境中運行Spark3.運行Spark程序?qū)indows本地的words.jar文件上傳至Linux的/opt目錄下,將jieba-analysis-1.0.2.jar文件上傳至Spark安裝目錄的jars目錄下。進入Spark安裝目錄的bin目錄下,使用spark-submit提交Spark程序至集群中運行。--master設置連接的集群URL參數(shù)為YARN集群模式,--class設置程序入口,再設置JAR包路徑、輸入文件路徑和輸出文件路徑。在集群環(huán)境中運行Spark在HDFS的/user/root/word_count目錄下查看結(jié)果part-000000文件,如圖所示在集群環(huán)境中運行Spark4.優(yōu)化spark-submit提交程序命令spark-submit提交程序除了常用的格式外,還包含了對Spark性能調(diào)優(yōu)的設置,通常是修改Spark應用運行時的配置選項。Spark中的主要配置機制是通過SparkConf類對Spark程序進行配置。SparkConf實例中每個配置選項都是鍵值對類型的,可以通過set()方法設置。在集群環(huán)境中運行Spark如果在程序中通過SparkConf設置了程序運行時的配置,那么在更改時需要對程序修改并重新打包,過程比較繁瑣。Spark允許通過spark-submit工具動態(tài)設置配置項。當程序被spark-submit腳本啟動時,腳本將配置項設置到運行環(huán)境中。當創(chuàng)建一個SparkConf時,這些配置項將會被檢測出來并進行自動配置。因此,使用spark-submit時,Spark程序中只需要創(chuàng)建一個“空”的SparkConf實例,不需要進行任何設置,直接傳給SparkContext的構(gòu)造方法即可。在集群環(huán)境中運行Sparkspark-submit也支持從配置文件中讀取配置項的值,這對于一些與環(huán)境相關(guān)的配置項比較有用。默認情況下,spark-submit腳本將在Spark安裝目錄中找到conf/spark-default.conf文件,讀取文件中以空格隔開的鍵值對配置項,但也可以通過spark-submit的--properties-File標記指定讀取的配置文件的位置。在集群環(huán)境中運行Spark如果存在一個配置項在系統(tǒng)配置文件、應用程序、spark-submit提交參數(shù)等多個地方均進行了設置的情況,那么Spark有特定的優(yōu)先級順序選擇實際的配置。優(yōu)先級最高的是應用程序中set()方法設置的配置,其次是spark-submit傳遞的參數(shù),接著是寫在配置文件中的值,最后是系統(tǒng)默認值。在集群環(huán)境中運行Sparkspark-submit為常用的Spark配置項提供了專用的標記,而沒有專用標記的配置,可以通過通用-conf接收任意Spark配置項的值。Spark的配置項有很多,常用的配置項如表所示。選項描述--nameName設置程序名--jarsJARS添加依賴包--driver-memoryMEMDriver程序使用的內(nèi)存大小--executor-memoryMEMExecutor使用的內(nèi)存大小在集群環(huán)境中運行Spark續(xù)上表選項描述--total-executor-coresNUMExecutor使用的總內(nèi)核數(shù)--executor-coresNUM每個Executor使用的內(nèi)核數(shù)--num-executorsNUM啟動的Executor數(shù)量spark.eventLog.dir保存日志相關(guān)信息的路徑,可以是hdfs://開頭的HDFS路徑,也可以是file://開頭的本地路徑,路徑均需要提前創(chuàng)建spark.eventLog.enabled是否開啟日志記錄spark.cores.max當應用程序運行在Standalone集群或粗粒度共享模式Mesos集群時,應用程序向集群請求的最大CPU內(nèi)核總數(shù)(不是指每臺機器,而是整個集群)。如果不設置,那么對于Standalone集群將使用spark.deploy.defaultCores中的數(shù)值,而Mesos將使用集群中可用的內(nèi)核在集群環(huán)境中運行Spark設置spark-submit提交詞頻統(tǒng)計程序時的環(huán)境配置和運行時所啟用的資源。分配給每個executor的內(nèi)核數(shù)為1,內(nèi)存為1GB。項目7
基于Spark開發(fā)環(huán)境實現(xiàn)廣告流量檢測違規(guī)識別項目實施開發(fā)環(huán)境下實現(xiàn)流量數(shù)據(jù)違規(guī)識別模型應用開發(fā)環(huán)境下實現(xiàn)流量數(shù)據(jù)違規(guī)識別在項目4~6中,分步實現(xiàn)了廣告流量數(shù)據(jù)的檢測違規(guī)識別,代碼分散,為便于他人使用,通過IDEA工具進行代碼封裝。集群連接參數(shù)設置由于流量數(shù)據(jù)保存在Hive,要使用Scala工程訪問操作Hive表數(shù)據(jù),則需要準備好如下配置。切換至Hadoop安裝目錄的/sbin目錄,執(zhí)行命令“./start-all.sh”啟動Hadoop集群,如圖所示。集群連接參數(shù)設置啟動Hive的元數(shù)據(jù)服務。新建一個名為SparkSQL的Scala工程,創(chuàng)建好后,右鍵單擊SparkSQL,依次選擇“New”→“Directory”,創(chuàng)建名為“resources”的文件夾,將Hive安裝目錄的/conf目錄將hive-site.xml復制到SparkSQL工程下的resources文件夾中,并參考本項目第(三)小節(jié),添加Spark開發(fā)依賴,SparkSQL工程結(jié)構(gòu)界面如圖所示。封裝代碼在SparkSQL工程里,右鍵單擊SparkSQL工程下的src文件夾,依次選擇“New”→“Package”選項,新建一個包,包名為“com.tipdm.demo”,在com.tipdm.demo包里編寫Spark程序?qū)崿F(xiàn)以下功能。連接到Hive數(shù)據(jù)庫,并讀取流量檢測數(shù)據(jù)。對讀取的數(shù)據(jù)進行清洗操作,包括數(shù)據(jù)預處理、缺失值處理等。使用隨機森林算法對清洗后的數(shù)據(jù)進行建模和訓練。封裝代碼封裝代碼的實現(xiàn)步驟如下。右鍵單擊com.tipdm.demo包,依次選擇“New”→“ScalaClass”選項,在包下新建一個Scala類,并指定類型為Object,新建Data_Preprocessing類,實現(xiàn)數(shù)據(jù)清洗步驟。右鍵單擊com.tipdm.scalaDemo包,依次選擇“New”→“ScalaClass”選項,在包下新建一個Scala類,并指定類型為Object,新建Building_Features類,實現(xiàn)特征構(gòu)建步驟。右鍵單擊com.tipdm.scalaDemo包,依次選擇“New”→“ScalaClass”選項,在包下新建一個Scala類,并指定類型為Object,新建Building_Model類,實現(xiàn)搭建模型步驟。運行Spark程序?qū)park程序提交到spark-submit中運行,其步驟如下。在IntelliJIDEA中打包工程生成的SparkSQL.jar包輸出。將SparkSQL.jar包上傳至Linux的/opt目錄下,進入Spark安裝目錄的/bin目錄下,使用spark-submit提交Spark程序至集群中運行,運行結(jié)果如圖所示。運行Spark程序需要注意的是,由于隨機森林是一種基于集成學習的算法,在構(gòu)建每個決策樹時會進行隨機特征選擇和隨機樣本選擇。因此,每次構(gòu)建不同的決策樹,最終的模型結(jié)構(gòu)和性能可能會有所不同,模型評估的準確度/率會存在一些細微差別。開發(fā)環(huán)境下實現(xiàn)流量數(shù)據(jù)違規(guī)識別模型應用模型應用在應用分類器進行虛假流量識別時,首先需要對得到的流量監(jiān)測數(shù)據(jù)進行模型數(shù)據(jù)處理,得到可以輸入分類器的模型數(shù)據(jù),再加載分類器對這些數(shù)據(jù)進行預測,將預測結(jié)果返回即可。右鍵單擊src,依次選擇“New”→“ScalaClass”選項,在包下新建一個Scala類,并指定類型為Object,新建Application類,通過加載存儲好的隨機森林分類模型,進行虛假流量預測。模型應用將程序打包上傳至/opt目錄下,執(zhí)行“./spark-submit--classApplication/opt/SparkSQL.jar”命令運行程序,運行結(jié)果如圖所示。真實場景中后期訓練的數(shù)據(jù)沒有l(wèi)abel標簽的,但是由于在模擬情況下,所使用的數(shù)據(jù)依舊包含了標簽列,因此可以對新數(shù)據(jù)的預測結(jié)果進行準確率計算,通過圖所示的計算的結(jié)果可以了解到,保存的模型再次加載后并不會損失模型的效果。項目總結(jié)本項目首先介紹了如何搭建Java開發(fā)環(huán)境以及Spark開發(fā)環(huán)境,通過開發(fā)環(huán)境搭建,實現(xiàn)Spark程序在集成開發(fā)環(huán)境下運行。然后對廣告流量檢測數(shù)據(jù)的數(shù)據(jù)預處理、特征構(gòu)建以及模型搭建代碼進行封裝。最后在IntelliJIDEA中打包工程輸出JAR包在集群下運行。通過本項目的集成開發(fā)環(huán)境介紹,使得在實際應用開發(fā)中,業(yè)務任務的代碼量較多的情況下,能夠使用集成開發(fā)環(huán)境來協(xié)調(diào)完成任務。項目7
基于Spark開發(fā)環(huán)境實現(xiàn)廣告流量檢測違規(guī)識別技能拓展+測試題技能拓展Spark注重建立良好的生態(tài)系統(tǒng),不僅支持多種外部文件存儲系統(tǒng),提供了多種多樣的集成開發(fā)環(huán)境。Eclipse本身不支持Scala語言,但是有一個插件Scala-IDE,利用該插件,Eclipse就能很好的支持Scala語言的開發(fā)。在Scala-IDE官網(wǎng)安裝專門開發(fā)的Scala的Eclipse,安裝時保證Scala-IDE插件與本地的Scala版本一致。技能拓展從官網(wǎng)下載后,解壓壓縮包,進入路徑..\scala-SDK-4.7.0-vfinal-2.12-win32.win32.x86_64\eclipse,雙擊“eclipse.exe”應用程序,即可以在Eclipse運行Spark程序,基本流程如圖所示。技能拓展新建一個名為WordCount的工程,并運行Spark程序的步驟如下。新建Scala工程。單擊Eclipse界面左上角“File”,在彈出窗口中單擊New,選擇ScalaProject,如圖所示。技能拓展配置Scala工程。輸入工程名“WordCount”,單擊“Finsh”按鈕后,Scala工程就創(chuàng)建完成了,如圖所示。技能拓展添加Spark開發(fā)依賴包。鼠標右擊WordCount,在彈出窗口中單擊“BuildPath”選項,在菜單欄選擇“ConfigureBuildPath”選項,如圖所示。技能拓展在彈出的“PropertiesforWordCount”對話框中,左側(cè)選項框保持默認設置“JavaBuildPath”,然后單擊“Libraries”選項卡,選擇“AddExternalJARs…”按鈕。在彈出的界面中找到Spark安裝目錄下的jar
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- (2篇)2024大學生活部年終工作總結(jié)
- 項目組成及主要環(huán)境問題表
- 2024年湖北中醫(yī)藥高等專科學校高職單招職業(yè)技能測驗歷年參考題庫(頻考版)含答案解析
- 第一章物理基礎知識備課講稿
- 20202021學年高中物理選修3-1滬科版課件33
- 成比例線段練習題及答案
- 二零二五年度股權(quán)投資終止協(xié)議
- 2024年浙江旅游職業(yè)學院高職單招職業(yè)適應性測試歷年參考題庫含答案解析
- 2024年泉州紡織服裝職業(yè)學院高職單招職業(yè)適應性測試歷年參考題庫含答案解析
- 二零二五年度房地產(chǎn)租賃簡易合作協(xié)議2篇
- 2025年河南鶴壁市政務服務和大數(shù)據(jù)管理局招聘12345市長熱線人員10人高頻重點提升(共500題)附帶答案詳解
- 路面彎沉溫度修正系數(shù)
- 職業(yè)技能鑒定要素細目表和卷庫編寫要求
- 公司設備轉(zhuǎn)讓合同協(xié)議書
- 2023年全國統(tǒng)一建筑工程預算工程量計算規(guī)則完整版
- 教科版四年級科學下冊第三單元巖石與土壤4.制作巖石和礦物標本(教學設計)教案
- 大學《工程力學》期末考試試題庫含詳細答案
- 2022年湖北省武漢市中考數(shù)學試卷含解析
- TLFSA 003-2020 危害分析與關(guān)鍵控制點(HACCP)體系調(diào)味面制品生產(chǎn)企業(yè)要求
- LY/T 2244.3-2014自然保護區(qū)保護成效評估技術(shù)導則第3部分:景觀保護
- 紀律教育月批評與自我批評五篇
評論
0/150
提交評論