【问题标题】:Configure Java heap space with Spark使用 Spark 配置 Java 堆空间
【发布时间】:2018-12-27 17:12:43
【问题描述】:

我正在尝试通过对 spark 中的一个小数组进行过采样来创建一个几百兆字节的文件,并将其作为目标文件保存到 spark-ec2 脚本创建的 hdfs 系统:

//Accepted arguments
val URI = args(0)
val repNum = args(1).toInt

//Create a LabeledPoint array of size 2
val labelPts = sc.parallelize(Array(LabeledPoint(1.0, Vectors.dense(1.0, 0.0, 3.0, 4.0, 5.0, 7.0, 8.0)),
  LabeledPoint(1.0, Vectors.dense(3.0, 1.0, 2.0, 8.0, 6.0, 9.0, 9.0))))

//Oversampling repNum LabeledPoints from the array above
val overSample = labelPts.takeSample(true, repNum, 1)

//output oversampling result as object
sc.parallelize(overSample).saveAsObjectFile(URI)

集群由脚本创建:

spark-ec2 -k spark -i ~/.ssh/spark.pem -s 1 launch my-spark-cluster

我捆绑的 Spark 应用程序是通过脚本提交的:

./spark-submit \
--class SimpleApp \
--master spark://ec2-52-1-94-89.compute-1.amazonaws.com:7077 \
--executor-memory=4g \
--driver-memory=4g \
--conf spark.akka.frameSize=10000 \
--conf spark.core.connection.auth.wait.timeout=1000 \
~/oversample-assembly-1.0.jar \
hdfs://ec2-52-1-94-89.compute-1.amazonaws.com:9000/user/root/oversampleOut \
70000000

然后它抛出一个EXCEPTION: java.lang.OutOfMemoryError: Java heap space。不知道有什么问题因为如果我的repNum设置为6000000就不会报错而且输出文件在490m左右,所以我怀疑java堆空间还是有512m的上限,但是我'已经设置了--executor-memory=4g,并且这个集群中的工作节点有 7.5GB 内存。这里有什么问题?

【问题讨论】:

  • 它是否作为 64 位进程运行?
  • @sturcotte06 我不知道如何检查它是否作为 64 位进程运行,但它是 Ubuntu 14.04 64 位 EC2 实例,jvm 是 OpenJDK 64 位服务器 VM
  • 你解决了吗?我面临同样的问题..我的代码在 spark shell 和相同的数据集上运行良好,但是当我尝试打包它并通过 spark-submit 运行它时失败

标签: java scala hadoop apache-spark


【解决方案1】:

您可以使用 sparks 运行时选项 spark.executor.extraJavaOptions 提供额外的 java 选项,也可以使用 spark.storage.memoryFraction 减少用于缓存的内存,更多信息请关注 link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多