Spark本地開發環境搭建與遠端debug設定
快速看完《Spark大資料處理 技術、應用與效能優化》前四章後,對Spark有了一個初步的瞭解,終於踏出了第一步,現在需要在Spark叢集中做些測試例子,熟悉一下開發環境和開發的流程。本文主要總結了如何在本地使用Maven搭建開發環境以及如何進行遠端debug。由於採用的Spark是今年5月24號才釋出的Spark2.1.1,網上大多數例子都是Spark1.X,因此走了不少彎路,才搭建好開發環境。
一:版本概述
Spark版本:2.1.1
IntelliJ IDEA:2017.1.5
開發環境:mac
測試環境:Linux
二:本地開發環境搭建
1、新建一個Maven專案,archetype選擇scala
2、匯入spark相關包
配置pom.xml,然後Maven自動下載依賴包,Spark2.X已經不提供spark-assembly-1.5.0-hadoop2.4.0.jar 之類的jar包,改成了一些小的jar包,存放在jars目錄下。開發的時候可以全部匯入jars目錄下的jar包,但更方便的是使用maven可以方便的自動匯入spark2.1.1開發所需要的包。
<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.1.1</version> <scope>provided</scope> </dependency>
3、編寫WordCount
package com.xuxp.test import org.apache.spark.{SparkConf, SparkContext} /** * Created by xuxp on 2017/8/21. */ object WordCount { def main(args: Array[String]): Unit = { if (args.length == 0) { System.err.println("Usage: SparkWordCount <inputfile> <outputfile>") System.exit(1) } val conf = new SparkConf().setAppName("WominWordCount") val sc = new SparkContext(conf) val textRdd = sc.textFile(args(0)) val result = textRdd.flatMap ( line => line.split("\\s+") ).map(word => (word, 1)).reduceByKey(_ + _) result.saveAsTextFile(args(1)) } }
4、打包配置
在project settings->Artifacts新建一個JAR—>from modules with dependencies
選擇Main Class.
配置好後Build—>Build Artifacts —>build,就能生成打包好的jar包
5、jar包上傳
配置檔案上傳tools—>deployment
開啟Browse Remote Host,將檔案直接拖過去,就實現檔案上傳
6、執行jar包
寫一個執行指令碼,上傳後,每次只需要./run-spark.sh
就能很快的執行。執行時需要保證README.md在hdfs中。
執行完畢後,可以查詢outputdir/part-00000
中的檔案hadoop fs -cat outputdir/part-00000
三:遠端開發除錯
1、在遠端伺服器的bash中設定SPARK_SUBMIT_OPTS
export SPARK_SUBMIT_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=41999
這是臨時設定,每次都需要進行設定一下,暫不永久設定。
2、在IntelliJ IDEA中配置remote debug
3、打個斷點
4、在遠端伺服器上執行程式
執行時會出現程式掛起,監聽埠中,此時進行下一步
5、在IntelliJ IDEA中debug
出現如下情況,說明遠端debug成功
程式會繼續輸出,並在斷點出停住。
總結
不得不說IntelliJ IDEA確實是一個非常強大的整合開發環境,提供版本管理,ssh,遠端debug等強大功能,是Spark開發的利器,事實上Spark的開發團隊也是使用IntelliJ IDEA來開發Spark的。
網上的有關spark的搭建文章有時候並不適合自己,需要根據自己的環境,軟體的版本來選擇搭建的方式。
參考資料
How to debug a scala based Spark program on Intellij IDEA - Stack Overflow
想研讀下spark的原始碼,怎麼搭閱讀和除錯的環境呢? - 知乎
IntelliJ IDEA 匯入 spark 原始碼 步驟 - - CSDN部落格
Spark修煉之道(進階篇)——Spark入門到精通:第三節 Spark Intellij IDEA開發環境搭建-部落格-雲棲社群-阿里雲