開發機器上安裝jdk1.7.0_60和scala2.10.4,配置好相關環境變量。網上資料很多,安裝過程忽略。此外,Eclipse使用Luna4.4.1,IDEA使用14.0.2版本。
1. Eclipse開發環境搭建
1.1. 安裝scala插件
安裝eclipse-scala-plugin插件,下載地址http://scala-ide.org/download/prev-stable.html
解壓縮以后把plugins和features復制到eclipse目錄,重啟eclipse以后即可。
Window -> Open Perspective -> Other…,打開Scala,說明安裝成功。
1.2. 創建maven工程
打開File -> New -> Other…,選擇Maven Project:
點擊Next,輸入項目存放路徑:
點擊Next,選擇org.scala-tools.archetypes:
點擊Next,輸入artifact相關信息:
點擊Finish即可。默認創建好的工程目錄結構如下:
修改pom.xml文件:
至此,一個默認的scala工程新建完成。
2. Spark開發環境搭建
2.1. 安裝scala插件
開發機器使用的IDEA版本為IntelliJ IEDA 14.0.2。為了使IDEA支持scala開發,需要安裝scala插件,如圖:
插件安裝完成后,IntelliJ IDEA會要求重啟。
2.2. 創建maven工程
點擊Create New Project,在Project SDK選擇jdk安裝目錄(建議開發環境中的jdk版本與Spark集群上的jdk版本保持一致)。點擊左側的Maven,勾選Create from archetype,選擇org.scala-tools.archetypes:scala-archetype-simple:
點擊Next后,可根據需求自行填寫GroupId,ArtifactId和Version(請保證之前已經安裝maven)。點擊Finish后,maven會自動生成pom.xml和下載依賴包。同1.2章節中eclipse下創建maven工程一樣,需要修改pom.xml中scala版本。
至此,IDEA下的一個默認scala工程創建完畢。
3. WordCount示例程序
3.1. 修改pom文件
在pom文件中添加spark和hadoop相關依賴包:

<!-- Spark --> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.10</artifactId> <version>1.1.0</version> </dependency> <!-- Spark Steaming--> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streaming_2.10</artifactId> <version>1.1.0</version> </dependency> <!-- HDFS --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>2.6.0</version> </dependency>
在<build></build>中使用maven-assembly-plugin插件,目的是package時把依賴jar也打包。

<plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.5.5</version> <configuration> <appendAssemblyId>false</appendAssemblyId> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.ccb.WordCount</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>assembly</goal> </goals> </execution> </executions> </plugin>
3.2. WordCount示例
WordCount用來統計輸入文件中所有單詞出現的次數,代碼參考:

package com.ccb import org.apache.spark.{ SparkConf, SparkContext } import org.apache.spark.SparkContext._ /** * 統計輸入目錄中所有單詞出現的總次數 */ object WordCount { def main(args: Array[String]) { val dirIn = "hdfs://192.168.62.129:9000/user/vm/count_in" val dirOut = "hdfs://192.168.62.129:9000/user/vm/count_out" val conf = new SparkConf() val sc = new SparkContext(conf) val line = sc.textFile(dirIn) val cnt = line.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _) // 文件按空格拆分,統計單詞次數 val sortedCnt = cnt.map(x => (x._2, x._1)).sortByKey(ascending = false).map(x => (x._2, x._1)) // 按出現次數由高到低排序 sortedCnt.collect().foreach(println) // 控制台輸出 sortedCnt.saveAsTextFile(dirOut) // 寫入文本文件 sc.stop() } }
3.3. 提交spark執行
使用maven pacakge打包得到sparktest-1.0-SNAPSHOT.jar,並提交到spark集群運行。
執行命令參考:
./spark-submit --name WordCountDemo --class com.ccb.WordCount sparktest-1.0-SNAPSHOT.jar |
即可得到統計結果。