概述
1 安装编译打包工具
1).安装sbt
sbt是一款Spark用来对scala编写程序进行打包的工具,Spark 中没有自带 sbt,需要下载安装
下载sbt安装包以后,执行如下命令拷贝至 /usr/local/sbt 中:
接着在 /usr/local/sbt 中创建 sbt 脚本(vim ./sbt),添加如下内容:
// An highlighted block
#!/bin/bash
SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"
保存后,为 ./sbt 脚本增加可执行权限:
最后运行如下命令,检验 sbt 是否可用(需要几分钟时间)(请确保电脑处于联网状态,首次运行会处于 “Getting org.scala-sbt sbt 0.13.11 …” 的下载状态,请耐心等待。笔者等待了 7 分钟才出现第一条下载提示):
只要能得到如下图的版本信息就没问题:
2). 安装Maven
下载到Maven安装文件以后,保存到“~/下载”目录下。然后,可以选择安装在“/usr/local/maven”目录中,命令如下:
// An highlighted block
$ sudo unzip ~/下载/apache-maven-3.3.9-bin.zip -d /usr/local
$ cd /usr/local
$ sudo mv ./apache-maven-3.3.9 ./maven
$ sudo chown -R hadoop ./maven
在终端中执行如下命令创建一个文件夹 sparkapp 作为应用程序根目录:
在 ./sparkapp/src/main/scala 下建立一个名为 SimpleApp.scala 的文件,添加代码如下
2 编写Spark应用程序代码
该程序计算 /usr/local/spark/README 文件中包含 “a” 的行数 和包含 “b” 的行数。代码第8行的 /usr/local/spark 为 Spark 的安装目录,如果不是该目录请自行修改。
不同于 Spark shell交互式环境(P99),独立应用程序需要通过 val sc = new SparkContext(conf) 初始化 SparkContext,SparkContext 的参数 SparkConf 包含了应用程序的信息。
3 编译打包
-1. 使用sbt对Scala 程序进行编译打包
请在./sparkapp 中新建文件 simple.sbt(vim ./sparkapp/simple.sbt),添加内容如下,声明该独立应用程序的信息以及与 Spark 的依赖关系:
name := “Simple Project”
version := “1.0”
scalaVersion := “2.11.8”
libraryDependencies += “org.apache.spark” %% “spark-core” % “2.1.0”
Spark和Scala的版本信息可以在启动信息中找到
为保证 sbt 能正常运行,先执行如下命令检查整个应用程序的文件结构:
文件结构应如下图所示:
接着,我们就可以通过如下代码将整个应用程序打包成 JAR(首次运行同样需要下载依赖包 ):
对于刚安装好的Spark和sbt而言,第一次运行上面的打包命令时,会需要几分钟的运行时间,因为系统会自动从网络上下载各种文件。后面再次运行上面命令,就会很快,因为不再需要下载相关文件。打包成功的话,会输出类似如下信息:
// An highlighted block
hadoop@dblab:~/sparkapp$ /usr/local/sbt/sbt package
OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=256M; support was removed in 8.0
[info] Set current project to Simple Project (in build file:/home/hadoop/sparkapp/)
[success] Total time: 2 s, completed 2017-2-19 15:45:29
生成的 jar 包的位置为 ~/sparkapp/target/scala-2.11/simple-project_2.11-1.0.jar
-2. 使用Maven对Scala 程序进行编译打包
为了和sbt打包编译的内容进行区分,这里再为Maven创建一个代码目录“/sparkapp2”,并在“/sparkapp2/src/main/scala”下建立一个名为 SimpleApp.scala的Scala代码文件,放入和前面一样的代码
在“~/sparkapp2”目录中新建文件pom.xml
// An highlighted block
<project>
<groupId>cn.edu.xmu</groupId>
<artifactId>simple-project</artifactId>
<modelVersion>4.0.0</modelVersion>
<name>Simple Project</name>
<packaging>jar</packaging>
<version>1.0</version>
<repositories>
<repository>
<id>jboss</id>
<name>JBoss Repository</name>
<url>http://repository.jboss.com/maven2/</url>
</repository>
</repositories>
<dependencies>
<dependency> <!-- Spark dependency -->
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.1.0</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src/main/scala</sourceDirectory>
<plugins>
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
<configuration>
<scalaVersion>2.11.8</scalaVersion>
<args>
<arg>-target:jvm-1.5</arg>
</args>
</configuration>
</plugin>
</plugins>
</build>
</project>
可以通过如下代码将整个应用程序打包成JAR包(注意:计算机需要保持连接网络的状态,而且首次运行打包命令时,Maven会自动下载依赖包,需要消耗几分钟的时间)
// An highlighted block
$ cd ~/sparkapp2 #一定把这个目录设置为当前目录
$ /usr/local/maven/bin/mvn package
如果屏幕返回如下信息,则说明生成JAR包成功:
// An highlighted block
[INFO] Building jar: /home/hadoop/sparkapp2/target/simple-project-1.0.jar
[INFO]----------------------------------------
[INFO] BUILD SUCCESS
[INFO]----------------------------------------
[INFO] Total time: 4.665 s
[INFO] Finished at: 2017-01-31T 15:57:09+08:00
[INFO] Final Memory: 30M/72M
[INFO]----------------------------------------
生成的应用程序JAR包的位置为“/home/hadoop/sparkapp2/target/simple-project-1.0.jar”。
4 通过spark-submit运行程序
可以通过spark-submit提交应用程序,该命令的格式如下:
// An highlighted block
./bin/spark-submit
--class <main-class> //需要运行的程序的主类,应用程序的入口点
--master <master-url> //Master URL,下面会有具体解释
--deploy-mode <deploy-mode> //部署模式
... # other options //其他参数
<application-jar> //应用程序JAR包
[application-arguments] //传递给主类的主方法的参数
对于之前使用sbt工具编译打包得到的 jar 包,就可以通过 spark-submit 提交到 Spark 中运行了,命令如下:
// An highlighted block
$ /usr/local/spark/bin/spark-submit --class "SimpleApp" ~/sparkapp/target/scala-2.11/simple-project_2.11-1.0.jar
#上面命令执行后会输出太多信息,可以不使用上面命令,而使用下面命令查看想要的结果
$ /usr/local/spark/bin/spark-submit --class "SimpleApp" ~/sparkapp/target/scala-2.11/simple-project_2.11-1.0.jar 2>&1 | grep "Lines with a:"
最终得到的结果如下:
Lines with a: 62, Lines with b: 30
对于之前使用Maven工具编译打包得到的 jar 包,也可以通过 spark-submit 提交到 Spark 中运行
最后
以上就是沉默牛排为你收集整理的如何使用sbt或者maven编译打包运行的全部内容,希望文章能够帮你解决如何使用sbt或者maven编译打包运行所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复