Spark项目的构建不依赖于操作系统中是否已经安装了Spark,开发者一般会采用项目构建工具来辅助完成项目的构建、源码的编译、依赖的解决等工作,通常情况下开发者会采用“Java+ Maven、Scala+SBT[10]”的搭配组合。Python和R本身是解释型语言,不需要使用项目构建工具来辅助生成二进制文件或者字节码文件,因此直接将脚本文件提交给Spark运行即可。
不同语言编写的Spark应用所依赖的编译器/解释器、项目构建工具如表2-1所示,读者可根据需求自行下载,在此不做过多介绍。
表2-1 基于不同语言的Spark独立应用所依赖工具
当上述的工具安装完毕之后,就可以开始编写基于不同语言的Spark独立应用了。
1.spark-submit工具
spark-submit命令用于部署一个应用程序在Spark集群中运行,在后面,我们会使用该命令提交Java、Scala项目导出的Jar包和Python项目的脚本文件,R脚本文件则使用单独的sparkR命令提交,后面会在编写R语言程序部分单独进行介绍。
spark-submit命令的格式如下。
其中,常用的Option及其含义如表2-2所示,具体选项请参考“spark-submit-help”命令的输出结果,在此不一一列出。
表2-2 spark-submit命令常用的Option选项及其含义
--master选项可选值如表2-3所示。
表2-3 spark-submit命令--master选项可选参数值
ApacheSpark程序内部通过SparkConf配置的属性值拥有最高的优先级,其次才是传递给spark-submit命令参数中的配置项,在后面的示例程序中会看到如何通过SparkConf来配置配置项。
2.Scala独立应用程序
之前重新改写在Shell中执行的LineCount程序,保存成LineCount.scala文件的代码如下。
接下来编写build.sbt文件,用于定义项目,代码如下。
name:="LineCount"
version:="1.0"
scalaVersion:="2.10.4"
libraryDependencies+="org.apache.spark"%%"spark-core"%"1.4.1"
为了保证SBT能够正常运作,需要把LineCount.scala与build.sbt文件放在如下的项目目录结构内。
进入项目根目录,执行命令“sbt clean package”,SBT会开始构建项目,并将src/main/scala编译出来的class文件打包成一个Jar文件,在此期间SBT会自动从仓库中下载编译与运行程序所依赖的Jar包,所用时间可能会比较长。构建完成后会在target/scala-2.10/目录下自动生成所需要的Jar文件。
通过spark-submit命令,将刚刚生成的Jar包提交给Spark运行。
$spark-submit\
--class LineCount\
--master local\
./target/scala-2.10/line-count_2.10-1.0.jar
运行结果如图2-10所示。
(www.xing528.com)
图2-10 运行结果图
3.Java独立应用程序
编写如下代码,保存成LineCount.java文件。
编写pom.xml文件,该文件的作用类似于之前的build.sbt文件,代码如下。
把LineCount.java与pom.xml文件放在如下的文件目录结构内,与SBT类似,在项目根目录下执行指令“mvn clean package”构建项目,项目构建完毕后会自动在target目录下生成对应的Jar包。
执行如下的命令,将生成的Jar包提交给Spark执行。
4.Python独立应用程序
编写如下所示代码,保存成LineCount.py文件。
Python脚本无须编译,因此只需要切换到LineCount.py文件所在目录,使用spark-submit来提交程序即可。
$spark-submit\
--masterlocal\
LineCount.py
执行结果如图2-11所示。
图2-11 Python提交程序运行结果
5.R独立应用程序
编写如下所示代码,保存成LineCount.R文件。
library(SparkR)
sc<-sparkR.init(appName="LineCount")
lines<-SparkR:::textFile(sc,"/etc/passwd")
print(count(lines))
sparkR.stop
切换到LineCount.R文件所在目录,执行如下命令提交R程序。
$sparkRLineCount.Rlocal
执行结果如图2-12所示。
图2-12 R程序执行结果图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。