首页 理论教育 Spark独立应用程序简介

Spark独立应用程序简介

时间:2023-06-21 理论教育 版权反馈
【摘要】:表2-1 基于不同语言的Spark独立应用所依赖工具当上述的工具安装完毕之后,就可以开始编写基于不同语言的Spark独立应用了。表2-2 spark-submit命令常用的Option选项及其含义--master选项可选值如表2-3所示。ApacheSpark程序内部通过SparkConf配置的属性值拥有最高的优先级,其次才是传递给spark-submit命令参数中的配置项,在后面的示例程序中会看到如何通过SparkConf来配置配置项。$spark-submit\--class LineCount\--master local\./target/scala-2.10/line-count_2.10-1.0.jar运行结果如图2-10所示。

Spark独立应用程序简介

Spark项目的构建不依赖于操作系统中是否已经安装了Spark,开发者一般会采用项目构建工具来辅助完成项目的构建、源码的编译、依赖的解决等工作,通常情况下开发者会采用“Java+ Maven、Scala+SBT[10]”的搭配组合。Python和R本身是解释型语言,不需要使用项目构建工具来辅助生成二进制文件或者字节码文件,因此直接将脚本文件提交给Spark运行即可。

不同语言编写的Spark应用所依赖的编译器/解释器、项目构建工具如表2-1所示,读者可根据需求自行下载,在此不做过多介绍。

表2-1 基于不同语言的Spark独立应用所依赖工具

978-7-111-52928-6-Part01-22.jpg

当上述的工具安装完毕之后,就可以开始编写基于不同语言的Spark独立应用了。

1.spark-submit工具

spark-submit命令用于部署一个应用程序在Spark集群中运行,在后面,我们会使用该命令提交Java、Scala项目导出的Jar包和Python项目的脚本文件,R脚本文件则使用单独的sparkR命令提交,后面会在编写R语言程序部分单独进行介绍。

spark-submit命令的格式如下。

978-7-111-52928-6-Part01-23.jpg

其中,常用的Option及其含义如表2-2所示,具体选项请参考“spark-submit-help”命令的输出结果,在此不一一列出。

表2-2 spark-submit命令常用的Option选项及其含义

978-7-111-52928-6-Part01-24.jpg

--master选项可选值如表2-3所示。

表2-3 spark-submit命令--master选项可选参数值

978-7-111-52928-6-Part01-25.jpg

ApacheSpark程序内部通过SparkConf配置的属性值拥有最高的优先级,其次才是传递给spark-submit命令参数中的配置项,在后面的示例程序中会看到如何通过SparkConf来配置配置项。

2.Scala独立应用程序

之前重新改写在Shell中执行的LineCount程序,保存成LineCount.scala文件的代码如下。

978-7-111-52928-6-Part01-26.jpg

接下来编写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文件放在如下的项目目录结构内。

978-7-111-52928-6-Part01-27.jpg

进入项目根目录,执行命令“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所示。

978-7-111-52928-6-Part01-28.jpg(www.xing528.com)

图2-10 运行结果图

3.Java独立应用程序

编写如下代码,保存成LineCount.java文件。

978-7-111-52928-6-Part01-29.jpg

978-7-111-52928-6-Part01-30.jpg

编写pom.xml文件,该文件的作用类似于之前的build.sbt文件,代码如下。

978-7-111-52928-6-Part01-31.jpg

把LineCount.java与pom.xml文件放在如下的文件目录结构内,与SBT类似,在项目根目录下执行指令“mvn clean package”构建项目,项目构建完毕后会自动在target目录下生成对应的Jar包。

978-7-111-52928-6-Part01-32.jpg

执行如下的命令,将生成的Jar包提交给Spark执行。

978-7-111-52928-6-Part01-33.jpg

4.Python独立应用程序

编写如下所示代码,保存成LineCount.py文件。

978-7-111-52928-6-Part01-34.jpg

Python脚本无须编译,因此只需要切换到LineCount.py文件所在目录,使用spark-submit来提交程序即可。

$spark-submit\

--masterlocal\

LineCount.py

执行结果如图2-11所示。

978-7-111-52928-6-Part01-35.jpg

图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所示。

978-7-111-52928-6-Part01-36.jpg

图2-12 R程序执行结果图

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈