
2.2 准备编写Spark应用程序的IDEA环境
首先安装IntelliJ IDEA的Community版本,这个版本是免费开源的(遵循Apache 2.0)。
访问IntelliJ IDEA的官方下载页面(https://www.jetbrains.com/idea/download/),下载IntelliJ IDEA的Community版本,然后安装。
打开IDEA,并配置Java的JDK。
电脑上没有JDK的读者请先安装Java的JDK,并配置Java环境变量。
JDK的下载地址为http://www.oracle.com/technetwork/java/javase/downloads/index.html。下载安装完成之后,配置一下JAVA_HOME这个环境变量即可,如图2-10、图2-11所示。

图2-10

图2-11
在IDEA中安装Scala插件,如图2-12~图2-14所示。

图2-12

图2-13

图2-14
按照图中的指示安装完之后单击Close按钮回到plugin页面后单击OK按钮。之后会提示重启,如图2-15所示。

图2-15
重启一下IDEA即可(单击Restart按钮)。
创建Scala sbt项目,如图2-16、图2-17所示。

图2-16

图2-17
按照图上的指示操作之后单击Finish按钮,然后就是一段长时间的等待,直到显示在IDEA底部的任务完成(等待的时间长短和网速的快慢有关),如图2-18所示。

图2-18
添加依赖。
访问https://search.maven.org页面。
这里可以进行Maven仓库的搜索。
单击ADVANCED SEARCH,如图2-19所示。

图2-19
访问Spark的下载页面ttps://spark.apache.org/downloads.html ,如图2-20所示。

图2-20
在之前的高级搜素界面中,对应填上相应的信息,如图2-21所示。

图2-21
搜索的结果如图2-22所示。

图2-22
然后按图2-23中的指示操作查看SBT的依赖。

图2-23
复制里面的内容(见图2-24)。

图2-24
如图2-25所示,双击打开IDEA sparkapp项目里面的build.sbt文件。

图2-25
将刚刚复制的内容粘贴到这个文件中,如图2-26所示。

图2-26
等待依赖刷新(等待IDEA界面下方任务栏的任务完成)。因为我们使用的是Spark SQL,所以我们还需要额外添加Spark SQL的依赖,如图2-27所示。

图2-27
同样的,我们选择Scala SBT项,如图2-28所示。

图2-28
复制如图2-29所示的内容。

图2-29
编辑build.sbt文件,如图2-30所示。

图2-30
等待依赖刷新完成。
创建Scala文件。
创建Scala文件,如图2-31所示。

图2-31
在弹出来的提示框中填写文件名,如图2-32所示。

图2-32
到此为止Spark程序的编写环境就搭建好了。
如果在Windows环境下用IDEA编写程序,那么在运行Spark代码的时候会出现以下错误:

解决方法:
- 需要在Windows中下载Hadoop以及配置Hadoop的环境变量。
- 需要下载http://public-repo-1.hortonworks.com/hdp-win-alpha/ winutils.exe这个文件并将其放置到Hadoop根目录下的bin文件夹中。其实,这个问题在Hadoop Wiki中已经给出了解决的办法:https://wiki.apache.org/hadoop/ WindowsProblems。
2.3 将编写好的Spark应用程序打包成jar提交到Spark上
当我们使用SBT建好项目并且编写完程序之后,有时可能需要将其打包,我们可以使用IDEA内置的SBT将工程打包。
首先打开项目,将鼠标指针移到IDEA右下角的小方框图案上,就会出现一个菜单,单击SBT Shell,如图2-33所示。

图2-33
出现一个SBT Shell,在红色箭头处输入命令,如图2-34所示。

图2-34
依次输入clean命令,回车,清除已生成的文件。
然后输入compile命令,回车,编译文件,等待其编译完成。
最后输入package命令,回车,打包成jar。
打包好的文件在target目录下的scala-2.11文件夹下。读者可以到工程目录下找到这个打包好的文件,如图2-35所示。

图2-35
下面我们来讲一下如何使用spark-submit将打包好的jar提交到Spark上运行。
在Linux虚拟机中右击虚拟机桌面,打开终端,在终端中输入spark-submit--help,可以查看spark-submit的详细帮助。
下面我们来说一下spark-submit的几个常用选项。
(1)--class指向程序中的主类。例如:

(2)--master是指集群的master URL。
举个例子,在本地运行就可以这样写:

使用这种方式由于是直接在本地运行的,并没有提交到集群上,所以8080端口的Web UI中看不到提交的任务。
如果想在standalone模式下运行则可以这样写:

如果使用了mesos作为集群的资源管理器,则可以这样写:

如果使用了YARN作为集群的资源管理器,则可以这样写:

(3)--deploy-mode设置以什么模式运行,有cluster和client两种,默认是client模式。
(4)--conf后面跟配置属性的键和值,详情可参看下面的模板。
下面给出大体的模板:

注意:"\"反斜杠用于换行。
下面给出一个例子供读者参考:
