使用Scala编写的程序需要使用sbt进行编译打包,相应的,Java程序使用 Maven编译打包,而 Python程序通过spark-submit直接提交
sbt编译打包:
1.安装sbt
下载sbt-launch.jar,拷贝到虚拟机中
2.穿件sbt脚本
创建 sbt 脚本(vim ./sbt),添加如下内容:
#!/bin/bash SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M" java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"
3.运行命令
最后运行如下命令,检验 sbt 是否可用(需要几分钟时间):
./sbt sbt-version
如果出现权限被拒绝,修改权限即可:
修改权限:chmod u+x ./sbt,再次运行之前的命令,会下载一些东西,要等几分钟
只要能得到如下图的版本信息就没问题:
编写spark独立应用程序:
在对应目录下(我的目录为/opt/module/sbt/mycode/src/main/scala)新建SimpleApp.scala文件添加如下代码:
import org.apache.spark.SparkContext import org.apache.spark.SparkContext._ import org.apache.spark.SparkConf object SimpleApp{ def main(args: Array[String]){ val logFile = "file:///opt/module/data/english.txt"//注意要有file:// val conf = new SparkConf().setAppName("Simple Application") val sc = new SparkContext(conf) val logData = sc.textFile(logFile,2).cache() val numAs = logData.filter(line => line.contains("a")).count() val numBs = logData.filter(line => line.contains("b")).count() println("Lines with a:%s,Lines with b:%s".format(numAs,numBs)) } }
请在./mycode 中新建文件 simple.sbt(vim ./mycode/simple.sbt),添加内容如下,声明该独立应用程序的信息以及与 Spark 的依赖关系:
注意版本号对应
name := "Simple Project" version := "1.0" scalaVersion := "2.11.8" libraryDependencies += "org.apache.spark" %% "spark-core" % "2.1.0"
检查文件结构如下如所示即为正确:
接着,我们就可以通过如下代码将整个应用程序打包成 JAR(首次运行同样需要下载依赖包 ):
完成后:
生成的jar包位置:/opt/module/sbt/mycode/target/scala-2.12
可以通过spark-submit提交应用程序,该命令的格式如下:./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 中运行了,命令如下:
$ /opt/module/spark-3.1.2/bin/spark-submit --class "SimpleApp" /opt/module/sbt/mycode/target/scala-2.12/simple-project_2.12-1.0.jar
结果:Lines with a:8,Lines with b:7