spark開發環境搭建(基於idea 和maven)
轉載
文章出自:http://blog.csdn.net/u012373815/article/details/53266301
使用idea構建maven 管理的spark專案 ,預設已經裝好了idea 和Scala,mac安裝Scala
那麼使用idea 新建maven 管理的spark 專案有以下幾步:- scala外掛的安裝
- 全域性JDK和Library的設定
- 配置全域性的Scala SDK
- 新建maven專案
- 屬於你的”Hello World!”
- 匯入spark依賴
- 編寫sprak程式碼
- 打包在spark上執行
1.scala外掛的安裝
首先在歡迎介面點選Configure,選擇plugins如下圖所示:
因為的安裝過了所以事uninstall 沒有安裝的話是 install ,安裝成功後,點選OK退出。
注意:外掛安裝完了之後,記得重啟一下IntelliJ IDEA使得外掛能夠生效。
2.全域性JDK和Library的設定
為了不用每次都去配置JDK,這裡先進行一次全域性配置。首先在歡迎介面點選Configure,然後在Project Defaults的下拉選單中選擇Project Structure,如下圖所示:
在開啟的Default Project Structure介面的左側邊欄選擇Project,在右側開啟的頁面中建立一個新的JDK選項(一定要本機已經安裝過JDK了),如下圖所示步驟在下拉選單中點選JDK後,在開啟的對話方塊中選擇你所安裝JDK的位置,注意是JDK安裝的根目錄,就是JAVA_HOME中設定的目錄。
3.配置全域性的Scala SDK
在歡迎頁面的右下角點選Configure,然後在Project Defaults的下拉選單中選擇Project Structure,在開啟的頁面左側選擇Global Libraries,然後在中間一欄中有一個綠色的加號標誌 +,點選後在下拉選單中選擇 Scala SDK
然後在開啟的對話方塊中選擇系統本身所安裝的Scala(即System對應的版本),點選OK確定,這時候會在中間一欄位置處出現Scala的SDK,在其上右鍵點選後選擇Copy to Project Libraries…,這個操作是為了將Scala SDK新增到專案的預設Library中去。整個流程如下面的動圖所示。
4.新建maven專案
在歡迎介面點選Create New Project,在開啟的頁面左側邊欄中,選擇Maven,然後在右側的Project SDK一項中,檢視是否是正確的JDK配置項正常來說這一欄會自動填充的,因為我們之前在1.3中已經配置過了全域性的Project JDK了,如果這裡沒有正常顯示JDK的話,可以點選右側的New…按鈕,然後指定JDK安裝路徑的根目錄即可),然後點選Next,來到Maven專案最重要三個引數的設定頁面,這三個引數分別為:GroupId, ArtifactId和Version. 步驟如下圖所示:
5.屬於你的”Hello World!”
在上一步中,我們已經建立了一個Maven工程
1. 為了讓你的首次體驗Scala更清爽一些,將一些暫時無關的檔案和資料夾都勇敢的刪除掉吧,主要有 main\java, main\resources 和 test 這三個;
2. 將Scala的框架新增到這個專案中,方法是在左側欄中的專案名稱上右鍵選單中點選Add Framework Support…,然後在開啟的對話方塊左側邊欄中,勾選Scala前面的複選框,然後點選確定即可(前提是上文中所述步驟都已正確走通,否則你很有可能看不到Scala這個選項的);
3. 在main資料夾中建立一個名為 scala 的資料夾,並右鍵點選 scala 資料夾,選擇 Make Directory as,然後選擇Sources Root ,這裡主要意思是將 scala 資料夾標記為一個原始檔的根目錄,然後在其內的所有程式碼中的 package ,其路徑就從這個根目錄下開始算起。
4. 在已經標記好為原始檔根目錄的 scala 資料夾 上,右鍵選擇 New,然後選擇 Scala Class,隨後設定好程式的名稱,並且記得將其設定為一個 Object(類似於Java中含有靜態成員的靜態類),正常的話,將會開啟這個 Object 程式碼介面,並且可以看到IntelliJ IDEA自動添加了一些最基本的資訊;
5. 在建立的 Object 中輸入如下語句:
def main(args: Array[String]):Unit = {println("Hello World!")}
在程式介面的任意位置,右鍵單擊後選擇 Run '你的程式名稱',靜待程式的編譯和執行,然後在下方自動開啟的視窗中,你就可以看到振奮人心的 Hello World!了。
流程動圖如下:
6. 匯入spark依賴
此時你已經可以成功的執行一個Scala 專案了。想要執行在spark 上則還需要匯入相關依賴。開啟pom.xml檔案新增如下依賴。
注意:是新增如下依賴;spark 和Scala的版本是對應的。
<properties><spark.version>2.0.2</spark.version>
<scala.version>2.11</scala.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<version>2.15.2</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
匯入依賴以後記得點選,這個引入jar 包哦
7. 編寫sprak程式碼
依賴新增成功後,新建scala 的object 檔案然後填寫如下程式碼
//本案例是新建一個int 型的List陣列,對陣列中的每個元素乘以3 ,再過濾出來陣列中大於10 的元素,然後對陣列求和。
import org.apache.spark.{SparkConf, SparkContext}
/**
* Created by yangyibo on 16/11/21.
*/
object MySpark {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("mySpark")
//setMaster("local") 本機的spark就用local,遠端的就寫ip
//如果是打成jar包執行則需要去掉 setMaster("local")因為在引數中會指定。
conf.setMaster("local")
val sc =new SparkContext(conf)
val rdd =sc.parallelize(List(1,2,3,4,5,6)).map(_*3)
val mappedRDD=rdd.filter(_>10).collect()
//對集合求和
println(rdd.reduce(_+_))
//輸出大於10的元素
for(arg <- mappedRDD)
print(arg+" ")
println()
println("math is work")
}
}
程式碼編寫好以後,右鍵 run ‘mySpark’ 執行。
執行結果如下:
8. 打包執行
執行成功後,可以講程式碼打包成jar 包傳送到遠端或者本地的spark 叢集上執行。打包有以下步驟
點選“File“然後選擇“project Structure“
然後如圖所示進行如下操作
在彈出的對話方塊中點選按鈕,選擇主類進行如下4步操作。
由於我們的jar包實在spark 上執行的,所可以刪除其他不需要的依賴包,如下圖所示,刪除其他不需要的包,只留下紅色矩形中的兩個。
注意:output directory 的路徑。此處是你匯出 jar 的路徑。
執行 bulid 構建你的jar
jar 包匯出以後就可以在spark上運行了。
此時進入終端,進入到spark安裝包的 bin 目錄下。執行如下命令
MySpark :是啟動類的名字,如果有包命,要加包名,(例如 com.edu.MySpark)
spark1:7077 : 是你遠端的spark 的地址 ,(可以是 //192.168.200.66:7077) 寫spark1 是因為我在/etc/hosts 中配置了環境引數,至於hosts 怎麼配,請自行百度。
/Users/yangyibo/Idea/mySpark/out/artifacts/mySpark_jar/mySpark.jar: 是你jar 包的路徑。
./bin/spark-submit--classMySpark--masterspark://spark1:7077/Users/yangyibo/Idea/mySpark/out/artifacts/mySpark_jar/mySpark.jar