Spark 中没有自带 sbt,需要手动安装sbt,可在官网https://www.scala-sbt.org/download.html下载,我们这里使用的是sbt-0.13.9.tgz 我们选择安装在 /usr/local/sbt 中:
- sudo mkdir /usr/local/sbt
- sudo chown -R hadoop /usr/local/sbt # 此处的 hadoop 为你的用户名
- cd /usr/local/sbt
下载后,执行如下命令拷贝至 /usr/local/sbt 中:
- cp ~/upload/sbt-launch.jar .
接着在 /usr/local/sbt 中创建 sbt 脚本(vim ./sbt
),添加如下内容:
- #!/bin/bash
- SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
- java $SBT_OPTS -jar /user/local/sbt/sbt-launch.jar "$@"
保存后,为 ./sbt 脚本增加可执行权限:
- chmod u+x ./sbt
最后检验 sbt 是否可用(首次运行会处于 “Getting org.scala-sbt sbt 0.13.9 …” 的下载状态,请耐心等待。笔者等待了 7 分钟才出现第一条下载提示):
- ./sbt sbt-version
下载过程中可能会类似 “Server access Error: java.security.ProviderException: java.security.KeyException url=https://jcenter.bintray.com/org/scala-sbt/precompiled-2_9_3/0.13.9/precompiled-2_9_3-0.13.9.jar” 的错误,可以忽略。可再执行一次 ./sbt sbt-version
,只要能得到如下图的版本信息就没问题:
按照官网教程安装 sbt 0.13.9 后,运行时会出现如下错误:
Getting org.scala-sbt sbt 0.13.9 ...
:: problems summary ::
:::: WARNINGS
module not found: org.scala-sbt#sbt;0.13.9
==== local: tried
/home/hadoop/.ivy2/local/org.scala-sbt/sbt/0.13.9/ivys/ivy.xml
-- artifact org.scala-sbt#sbt;0.13.9!sbt.jar:
/home/hadoop/.ivy2/local/org.scala-sbt/sbt/0.13.9/jars/sbt.jar
...
::::::::::::::::::::::::::::::::::::::::::::::
:: UNRESOLVED DEPENDENCIES ::
::::::::::::::::::::::::::::::::::::::::::::::
:: org.scala-sbt#sbt;0.13.9: not found
::::::::::::::::::::::::::::::::::::::::::::::
:::: ERRORS
Server access Error: java.security.ProviderException: java.security.KeyException url=https://jcenter.bintray.com/org/scala-sbt/sbt/0.13.9/sbt-0.13.9.pom
...
:: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS
unresolved dependency: org.scala-sbt#sbt;0.13.9: not found
Error during sbt execution: Error retrieving required libraries
(see /home/hadoop/.sbt/boot/update.log for complete log)
Error: Could not retrieve sbt 0.13.9
用浏览器访问给出的链接,也是 404 的状态,这就需要修改 repositories 的地址。另外一个可能出现的问题是提示 “Server access Error: java.security.ProviderException: java.security.KeyException”,但通过浏览器可以访问,这应该是 https 导致的问题,可以改成通过 http 访问。
执行如下命令下载官方的 sbt-launch.jar,并进行解压:
- cd /usr/local/sbt
- wget https://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/0.13.9/sbt-launch.jar -O ./sbt-launch.jar # 下载
- unzip -q ./sbt-launch.jar # 解压
需要修改其中的 ./sbt/sbt.boot.properties 文件(vim ./sbt/sbt.boot.properties
),将 [repositories] 处修改为如下内容(即增加了一条 oschina 镜像,并且将原有的 https 镜像都改为相应的 http 版):
[repositories]
local
oschina: http://maven.oschina.net/content/groups/public/
jcenter: http://jcenter.bintray.com/
typesafe-ivy-releases: http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
maven-central: http://repo1.maven.org/maven2/
保存后,重新打包 jar:
- rm ./sbt-launch.jar # 删除旧的
- jar -cfM ./sbt-launch.jar . # 重新打包
- ls | grep -v "sbt-launch.jar" | xargs rm -r # 解压后的文件已无用,删除
注意打包时,需要使用 -M 参数,否则 ./META-INF/MANIFEST.MF 会被修改,导致运行时会出现 “./sbt-launch.jar中没有主清单属性” 的错误。
重新打包后,接着创建 sbt 脚本并赋予可执行权限,在此就不再复试。