OutofMemoryErrory 使用 sbt 程序集创建 fat jar
OutofMemoryErrory creating fat jar with sbt assembly
我们正在尝试制作一个包含一个小型 scala 源文件和大量依赖项的胖 jar 文件(使用 spark 和 cassandra 的简单 mapreduce 示例):
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import com.datastax.spark.connector._
import org.apache.spark.SparkConf
object VMProcessProject {
def main(args: Array[String]) {
val conf = new SparkConf()
.set("spark.cassandra.connection.host", "127.0.0.1")
.set("spark.executor.extraClassPath", "C:\Users\SNCUser\dataquest\ScalaProjects\lib\spark-cassandra-connector-assembly-1.3.0-M2-SNAPSHOT.jar")
println("got config")
val sc = new SparkContext("spark://US-L15-0027:7077", "test", conf)
println("Got spark context")
val rdd = sc.cassandraTable("test_ks", "test_col")
println("Got RDDs")
println(rdd.count())
val newRDD = rdd.map(x => 1)
val count1 = newRDD.reduce((x, y) => x + y)
}
}
我们没有 build.sbt 文件,而是将 jars 放入 lib 文件夹,将源文件放入 src/main/scala 目录和 运行 sbt 运行。我们的 assembly.sbt 文件如下所示:
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.13.0")
当我们 运行 sbt assembly 时,我们得到以下错误信息:
...
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: java heap space
at java.util.concurrent...
我们不确定如何更改 jvm 设置以增加内存,因为我们正在使用 sbt 程序集来制作 jar。此外,如果我们编写代码或构建项目的方式存在严重错误,那也会对我们有很大帮助;尝试设置基本的 spark 程序时遇到了很多令人头疼的问题!
sbt 本质上是一个 java 进程。您可以尝试针对 OutOfMemory 问题调整 sbt 运行时堆大小。
对于 0.13.x,sbt 使用的默认内存选项是
-Xms1024m -Xmx1024m -XX:ReservedCodeCacheSize=128m -XX:MaxPermSize=256m
。
你可以通过像
这样的方式来扩大堆大小
sbt -J-Xms2048m -J-Xmx2048m assembly
我将 spark 作为非托管依赖项包含在内(将 jar 文件放在 lib 文件夹中),因为它是一个巨大的 jar,所以使用了大量内存。
相反,我制作了一个 build.sbt
文件,其中包含 spark 作为提供的非托管依赖项。
其次,我创建了值为 -Xms256m -Xmx4g
的环境变量 JAVA_OPTS
,它将最小堆大小设置为 256 兆字节,同时允许堆增长到最大 4 GB。这两个组合允许我创建一个带有 sbt assembly
的 jar 文件
有关提供的依赖项的更多信息:
我以前遇到过这个问题。对于我的环境,set Java_ops 不起作用。
我使用以下命令并且有效。
- 设置SBT_OPTS="-Xmx4G"
- sbt 程序集
不存在内存不足的问题
这对我有用:
sbt -mem 2000 "set test in assembly := {}" assembly
我们正在尝试制作一个包含一个小型 scala 源文件和大量依赖项的胖 jar 文件(使用 spark 和 cassandra 的简单 mapreduce 示例):
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import com.datastax.spark.connector._
import org.apache.spark.SparkConf
object VMProcessProject {
def main(args: Array[String]) {
val conf = new SparkConf()
.set("spark.cassandra.connection.host", "127.0.0.1")
.set("spark.executor.extraClassPath", "C:\Users\SNCUser\dataquest\ScalaProjects\lib\spark-cassandra-connector-assembly-1.3.0-M2-SNAPSHOT.jar")
println("got config")
val sc = new SparkContext("spark://US-L15-0027:7077", "test", conf)
println("Got spark context")
val rdd = sc.cassandraTable("test_ks", "test_col")
println("Got RDDs")
println(rdd.count())
val newRDD = rdd.map(x => 1)
val count1 = newRDD.reduce((x, y) => x + y)
}
}
我们没有 build.sbt 文件,而是将 jars 放入 lib 文件夹,将源文件放入 src/main/scala 目录和 运行 sbt 运行。我们的 assembly.sbt 文件如下所示:
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.13.0")
当我们 运行 sbt assembly 时,我们得到以下错误信息:
...
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: java heap space
at java.util.concurrent...
我们不确定如何更改 jvm 设置以增加内存,因为我们正在使用 sbt 程序集来制作 jar。此外,如果我们编写代码或构建项目的方式存在严重错误,那也会对我们有很大帮助;尝试设置基本的 spark 程序时遇到了很多令人头疼的问题!
sbt 本质上是一个 java 进程。您可以尝试针对 OutOfMemory 问题调整 sbt 运行时堆大小。
对于 0.13.x,sbt 使用的默认内存选项是
-Xms1024m -Xmx1024m -XX:ReservedCodeCacheSize=128m -XX:MaxPermSize=256m
。
你可以通过像
这样的方式来扩大堆大小sbt -J-Xms2048m -J-Xmx2048m assembly
我将 spark 作为非托管依赖项包含在内(将 jar 文件放在 lib 文件夹中),因为它是一个巨大的 jar,所以使用了大量内存。
相反,我制作了一个 build.sbt
文件,其中包含 spark 作为提供的非托管依赖项。
其次,我创建了值为 -Xms256m -Xmx4g
的环境变量 JAVA_OPTS
,它将最小堆大小设置为 256 兆字节,同时允许堆增长到最大 4 GB。这两个组合允许我创建一个带有 sbt assembly
有关提供的依赖项的更多信息:
我以前遇到过这个问题。对于我的环境,set Java_ops 不起作用。 我使用以下命令并且有效。
- 设置SBT_OPTS="-Xmx4G"
- sbt 程序集
不存在内存不足的问题
这对我有用:
sbt -mem 2000 "set test in assembly := {}" assembly