开发环境: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即可完成创建

此时还需要手动创建一下src/main/java,src/main/resources和target文件夹,并且设置java和scala文件夹为source,resources为resource,target为excluded
最后maven project的结构如下:
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运行结果如下:
