使用SBT构建Apache Spark:无效或损坏的jar文件

11

我正在尝试在本地机器上安装Spark。 我一直在遵循这个指南。 我已经安装了JDK-7(也安装了JDK-8)和Scala 2.11.7。 当我尝试使用sbt构建Spark 1.4.1时,出现了一个问题。 我得到了以下异常。

NOTE: The sbt/sbt script has been relocated to build/sbt.
      Please update references to point to the new location.

      Invoking 'build/sbt assembly' now ...

Attempting to fetch sbt
Launching sbt from build/sbt-launch-0.13.7.jar
Error: Invalid or corrupt jarfile build/sbt-launch-0.13.7.jar

我已经寻找了解决这个问题的方法。我找到了一份不错的指南,链接为https://dev59.com/Y43da4cB1Zd3GeqPyVbz#31597283它使用了一个预构建的版本。除了使用预构建的版本外,还有没有其他使用sbt安装Spark的方法?此外,Invalid or corrupt jarfile错误发生的原因是什么?


2
我建议尝试使用Scala 2.10版本。2.11版本需要在构建过程中进行一些额外的处理,但上次我在主干上使用2.11版本时,还必须手动更改一些源文件。请参考http://spark.apache.org/docs/latest/building-spark.html#building-for-scala-211。 - heenenee
2
无论您使用Scala 2.11还是2.10,Spark的Maven构建都比SBT构建更好维护,因此请按照此处的说明进行构建:http://spark.apache.org/docs/latest/building-spark.html#building-for-scala-211 - Dean Wampler
2个回答

18
我遇到了同样的问题,现在已经解决了。
这可能是因为sbt-launch-0.13.7.jar下载失败,虽然你可以看到文件存在,但它不是正确的文件。该文件大小约为1.2MB。如果小于此大小,您可以进入build/目录,使用"vim sbt-launch-0.13.7.jar"或其他工具来打开sbt-launch-0.13.7.jar文件。
如果文件内容如下:
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>

这意味着sbt-launch-0.13.7.jar未被下载。然后在同一目录下打开sbt-launch-lib.bash,在第41和42行检查,它给出了两个URL。打开它们以检查是否正常工作。
如果url1不起作用,则手动下载sbt-launch.jar(您可以使用url2,它可能有效,或者您可以从sbt官方网站下载),将其放在相同的目录中,将其重命名为sbt-launch-0.13.7.jar,然后应该注释掉与下载相关的行(可能在47到68行之间),避免脚本再次下载。就像这样:
acquire_sbt_jar () {
  SBT_VERSION=`awk -F "=" '/sbt\.version/ {print $2}'    ./project/build.properties`
  URL1=http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/${SBT_VERSION}/sbt-launch.jar
  URL2=http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/${SBT_VERSION}/sbt-launch.jar
  JAR=build/sbt-launch-${SBT_VERSION}.jar

  sbt_jar=$JAR

 # if [[ ! -f "$sbt_jar" ]]; then
 #   # Download sbt launch jar if it hasn't been downloaded yet
 #   if [ ! -f "${JAR}" ]; then
 #   # Download
 #   printf "Attempting to fetch sbt\n"
 #   JAR_DL="${JAR}.part"
 #   if [ $(command -v curl) ]; then
 #     (curl --silent ${URL1} > "${JAR_DL}" || curl --silent ${URL2} > "${JAR_DL}") && mv "${JAR_DL}" "${JAR}"
 #   elif [ $(command -v wget) ]; then
 #     (wget --quiet ${URL1} -O "${JAR_DL}" || wget --quiet ${URL2} -O "${JAR_DL}") && mv "${JAR_DL}" "${JAR}"
 #   else
 #     printf "You do not have curl or wget installed, please install sbt manually from http://www.scala-sbt.org/\n"
 #     exit -1
 #   fi
 #   fi
 #   if [ ! -f "${JAR}" ]; then
 #   # We failed to download
 #   printf "Our attempt to download sbt locally to ${JAR} failed. Please install sbt manually from http://www.scala-sbt.org/\n"
 #   exit -1
 #   fi
 #   printf "Launching sbt from ${JAR}\n"
 # fi
 }

然后使用 "build/sbt assembly" 重新构建 Spark。

希望你能成功。

如果我表达不清楚,下面的链接可能会有帮助。

https://www.mail-archive.com/user@spark.apache.org/msg34358.html

错误:无效或损坏的jar文件sbt/sbt-launch-0.13.5.jar prabeesh提供的答案

https://groups.google.com/forum/#!topic/predictionio-user/fllCh8n-0d4


4
这是一个非常类似于Spark的需要做的事情。 - Eric Walker
你有没有任何进展?我遇到了和你完全相同的问题! - HappyCoding

0

手动下载sbt-launch.jar文件(可以使用url2,也可能有用,或者你可以从sbt官方网站下载),将其放置在同一个目录下,将其重命名为sbt-launch-0.13.7.jar,然后运行sbt/sbt assembly命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接