SBT安装及命令行打包spark程序
程序员文章站
2022-04-29 08:32:09
1.从https://www.scala-sbt.org/download.html官网上寻找所需要的安装包 可以直接本地下载完扔进去也可以wget路径,在这里我用的是sbt1.2.8版本的,下载到/usr/local目录下 2.将下载的sbt文件中的sbt-launch.jar拷贝到/usr/lo ......
1.从官网上寻找所需要的安装包
可以直接本地下载完扔进去也可以wget路径,在这里我用的是sbt1.2.8版本的,下载到/usr/local目录下
2.将下载的sbt文件中的sbt-launch.jar拷贝到/usr/local/下的sbt目录中的一级目录下
3.在/usr/local/sbt中创建一个sbt脚本(vim ./sbt),添加以下内容:
sbt_opts="-xms512m -xmx1536m -xss1m -xx:+cmsclassunloadingenabled -xx:maxpermsize=256m"
java $sbt_opts -jar `dirname $0`/sbt-launch.jar "$@"
4.修改脚本权限
chmod u+x ./sbt
5.修改依赖源(此处修改为阿里源)
vim ~/.sbt/repositories
修改内容如下:
[repositories] local aliyun-nexus: http://maven.aliyun.com/nexus/content/groups/public/ typesafe: http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaversion]/)(sbt_[sbtversion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootonly sonatype-oss-releases maven-central sonatype-oss-snapshots
6.定位阿里源
进入这两个文件,
和
vim sbtconfig.txt
vim sbtopts
将此行代码加入两个文件的最后一行
-dsbt.override.build.repos=true
7.检验 sbt 是否可用,耐心等待,一般需要下载好几分钟的,但是如果等待的时间特别长,那建议换源,前面的阿里源就是我针对这个问题而换的,如果你是按照我前面的操作来做的话,那很快就能成功。
./sbt sbtversion
最后出现版本信息就可以了
8.接下来进行spark第一个应用程序的打包执行
1)首先进入用户的主文件夹
cd ~
创建应用程序根目录
mkdir sparkapp
创建所需的文件夹结构
mkdir -p ./sparkapp/src/main/scala
2)在./sparkapp/src/main/scala下建立一个simpleapp.scala的文件
vim ./sparkapp/src/main/scala/simpleapp.scala
内容如下:
1 /* simpleapp.scala */ 2 import org.apache.spark.sparkcontext 3 import org.apache.spark.sparkcontext._ 4 import org.apache.spark.sparkconf 5 6 object simpleapp { 7 def main(args: array[string]) { 8 val logfile = "file:///usr/local/spark-2.4.3/readme.md" 9 val conf = new sparkconf().setappname("simple application") 10 val sc = new sparkcontext(conf) 11 val logdata = sc.textfile(logfile, 2).cache() 12 val numas = logdata.filter(line => line.contains("a")).count() 13 val numbs = logdata.filter(line => line.contains("b")).count() 14 println("lines with a: %s, lines with b: %s".format(numas, numbs)) 15 } 16 }
该程序计算 /usr/local/spark/readme 文件中包含 “a” 的行数 和包含 “b” 的行数。代码第8行的 /usr/local/spark 为 spark 的安装目录,如果不是该目录请自行修改。不同于 spark shell,独立应用程序需要通过 val sc = new sparkcontext(conf) 初始化 sparkcontext,sparkcontext 的参数 sparkconf 包含了应用程序的信息。
该程序依赖 spark api,因此我们需要通过 sbt 进行编译打包。 ./sparkapp 中新建文件 simple.sbt(vim ./sparkapp/simple.sbt),添加内容如下,声明该独立应用程序的信息以及与 spark 的依赖关系:
name := "simple project" version := "1.0" scalaversion := "2.11.12" librarydependencies += "org.apache.spark" %% "spark-core" % "2.4.3"
文件 simpale.sbt 需要指明 spark 和 scla 的版本。在上面的配置信息中,scalaversion用来指定scala的版本,sparkcore用来指定spark的版本,这两个版本信息都可以在之前的启动 spark shell 的过程中,从屏幕的显示信息中找到。下面就是笔者在启动过程当中,看到的相关版本信息(备注:屏幕显示信息会很长,需要往回滚动屏幕仔细寻找信息)。
3)使用 sbt 打包 scala 程序
cd ~/sparkapp find .
接着,我们就可以通过如下代码将整个应用程序打包成 jar(首次运行同样需要下载依赖包 ):
/usr/local/sbt/sbt package
生成的jar包的位置为:
~/sparkapp/target/scala-2.11/simple-project_2.11-1.0.jar
4)通过spark-submit运行程序,将生成的jar包通过是spark-submit提交到spark中运行
/usr/local/spark-2.4.3/bin/spark-submit --class "simpleapp" ~/sparkapp/target/scala-2.11/simple-project_2.11-1.0.jar
上面的命令输出的东西会特别多,所以也可以通过管道化来筛选跟输出指定的信息
/usr/local/spark-2.4.3/bin/spark-submit --class "simpleapp" ~/sparkapp/target/scala-2.11/simple-project_2.11-1.0.jar 2>&1 | grep "lines with a:"