開發環境:IntelliJ IDEA ULTIMATE 2017.2
運行環境:jdk1.8.0_2,scala-2.11.4
安裝jdk和scala
在win7機器上安裝jdk和scala,添加環境變量JAVA_HOME和SCALA_HOME,並追加到Path環境變量中:%JAVA_HOME\bin%;%JAVA_HOME\jre\bin%;%SCALA_HOME%\bin;
IDEA導入jdk
安裝完IDEA激活後(激活網址:http://idea.lanyus.com/)進入主界面,點擊菜單File --> Project Structure --> SDKs,點擊+號選擇JDK,在右側選擇jdk的存放位置,點擊OK即可
IDEA導入scala插件
點擊菜單File --> Settings --> Plugins:
在2處搜索框輸入scala,右側出現3所示,如果沒有安裝過,會顯示instal按鈕,這裏我已經安裝了並且是2017.2.0版本所以顯示update,如果直接點擊install則會在線安裝。建議大家先離線下載好IDEA對應的scala插件,不同版本的IDEA對應不同版本的scala插件,插件下載地址:https://plugins.jetbrains.com/plugin/1347-scala。如下圖我找到自己的2017.2.0對應的版本下載:
離線下載好scala插件後,在plugins頁面下點擊Install plugin form disk後選擇插件的存放位置,點擊OK即可
IDEA導入sdk
點擊菜單File --> Project Settings --> Global Libraries,點擊+號的Scala SDK,右側選擇scala的存放路徑,點擊ok即可
IDEA利用Maven創建spark環境
點擊File --> New Project創建新項目,左側選擇Maven,右側依次選擇下圖紅框,點擊Next:
填寫GroupId和ArtifactId,名字任意就行,點擊Next
選擇Maven的目錄,這裏我選擇的是IDEA自帶的Maven,路徑在IDEA安裝目錄下plugins裏,你也可以自己下載Maven然後載入進來,User settings file就是Maven裏的settings.xml,Local repository可以選用默認位置也可以自己修改位置,存放通過Maven下載的各jar包,記得勾選上override,點擊next
填寫Project name和選擇Project存放路徑,點擊Finish即可完成創建
Maven創建好project後,我們修改在settings.xml裏面修改Maven爲國內鏡像,否則下載jar包的速度很慢,這裏我的settings.xml文件位於idea自帶的maven裏,具體是F:\ideaIU-2017.2.win\plugins\maven\lib\maven3\conf\settings.xml,打開settings.xml文件後,在mirrors標籤裏添加如下配置:
</mirrors>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
</mirrors>
接下來在pom.xml里加入spark所依賴的包,我選用的spark版本是2.0.2,對應的scala版本是2.11.4,spark各種依賴包及其對應的scala version可在https://mvnrepository.com/artifact/org.apache.spark查看,我的spark依賴配置如下:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spark.version>2.0.2</spark.version>
<scala.version>2.11.4</scala.version>
<hadoop.version>2.6.5</hadoop.version>
</properties>
<repositories>
<repository>
<id>scala-tools.org</id>
<name>Scala-Tools Maven2 Repository</name>
<url>http://scala-tools.org/repo-releases</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>scala-tools.org</id>
<name>Scala-Tools Maven2 Repository</name>
<url>http://scala-tools.org/repo-releases</url>
</pluginRepository>
</pluginRepositories>
<dependencies>
<!-- scala -->
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.11.4</version>
</dependency>
<!-- spark -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.11</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.11</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.11</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming-kafka-0-8_2.11</artifactId>
<version>2.0.2</version>
</dependency>
配置好以上依賴關係後,maven就自動下載所依賴的jar包,存放於Local repository路徑裏。
本地運行spark wordcount示例
在src/main/scala/com.boya下新建一個scala class,選擇類型爲object
package com.boya
import org.apache.spark.{SparkContext, SparkConf}
object wordcount {
def main(args: Array[String]) {
/**
* SparkContext 的初始化需要一個SparkConf對象
* SparkConf包含了Spark集羣的配置的各種參數
*/
val conf = new SparkConf()
.setMaster("local[2]")//啓動本地化計算
.setAppName("testRdd")//設置本程序名稱
// Spark程序的編寫都是從SparkContext開始的
val sc=new SparkContext(conf)
//以上的語句等價與val sc=new SparkContext("local","testRdd")
val data=sc.textFile("e://The_Man_of_Property.txt")//讀取本地文件
data.flatMap(_.split(" "))//下劃線是佔位符,flatMap是對行操作的方法,對讀入的數據進行分割
.map((_,1))//將每一項轉換爲key-value,數據是key,value是1
.reduceByKey(_+_)//將具有相同key的項相加合併成一個
//.sortBy(_._2,false).take(10) // 按照value進行降序排序,取value較大的前10個返回一個array
.top(10)(Ordering.by(e => e._2))
.foreach(println)//循環打印
}
}
若直接運行,會報Failed to locate the winutils binary in the hadoop binary path的錯誤,若程序中用到saveAsTextFile,還會報(null) entry in command string: null chmod 0700的錯誤,解決方法如下:
此時我的win7機器上沒有安裝hadoop和spark,其jar包通過maven依賴引入的。在https://github.com/steveloughran/winutils/tree/master/hadoop-2.6.0/bin下分別下載winutils.exe、libwinutils.lib和hadoop.dll。
第一,新建hadoop/bin文件夾,將winutils.exe和libwinutils.lib放入hadoop/bin文件夾中,並添加HADOOP_HOME環境變量,比如我是放到E:\hadoop\bin下,則變量值爲E:\hadoop\,然後在Path變量裏追加%HADOOP_HOME%\bin。
第二,將hadoop.dll複製到C:\Windows\System32。
以上兩步完成即可,若還報錯,重啓機器(至少我是這樣解決的),wordcount運行結果如下: