【问题标题】:Simple Spark App on single machine testing cluster got killed due to OutOfMemoryError单机测试集群上的简单 Spark 应用程序因 OutOfMemoryError 而被杀死
【发布时间】:2014-07-23 19:39:10
【问题描述】:

我正在尝试在我的单机集群上运行 spark tutorial 中的简单应用程序。我的机器上运行着 Hadoop 2.2。我正在使用带有 8GB RAM 的 mac。

steven@eva-2 /o/s/a/t/scala-2.10> jps
6160 Jps
5841 Worker
4005 SecondaryNameNode
1460 NailgunRunner
3828 NameNode
3907 DataNode
1382 
4106 ResourceManager
5751 Master
4185 NodeManager

另外,我能够访问 Web UI(能够看到程序已完成但被终止)。问题是当我运行这个程序时:

import org.apache.spark.SparkContext
import org.apache.spark.SparkConf

object SimplyApp extends App {
  val logFile = "/opt/spark-0.9.0-incubating-bin-hadoop2/README.md"

  val conf = new SparkConf()
    .setMaster("spark://eva-2.local:7077")
    .setAppName("Simple App")
    .set("spark.executor.memory", "1g")

  val sc = new SparkContext(conf)

  val logData = sc.textFile(logFile, 2).cache()
  val numAs = logData.filter(line => line.contains("a")).count()
  val numBs = logData.filter(line => line.contains("b")).count()
  println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
  println(numAs)
}

错误是:

14/06/03 20:46:19 INFO storage.BlockManagerMasterActor$BlockManagerInfo: Registering block manager 10.10.121.52:53320 with 589.2 MB RAM
14/06/03 20:46:20 WARN scheduler.TaskSetManager: Lost TID 1 (task 0.0:1)
14/06/03 20:46:20 WARN scheduler.TaskSetManager: Loss was due to java.lang.OutOfMemoryError
java.lang.OutOfMemoryError: Java heap space

我试图给它更多的内存,但仍然是同样的问题。有谁知道如何处理这个?谢谢。

【问题讨论】:

  • 你试过setMaster("local[4]") 吗?那是本地模式。看起来您的从站配置错误。示例文件非常小,无法生成此错误。也不要忽视显而易见的事情:你的机器上有足够的空闲内存吗?
  • 你是如何启动本地集群的?
  • @maasg 嘿。我只是启动集群(奇怪,更改 IP 并且启动脚本有效)。现在,我正在尝试使用您的解决方案。我将内存更改为一个小数字,但仍然面临问题。比我将master设置为local[4],它有效。但是我要做的是使用spark URL设置master,因为我可以在本地测试并方便地部署到集群。我说的对吗?
  • 你在 master 旁边部署了多少个 worker?他们有多少内存?
  • @maasg 我只在我的机器上使用一名工人。它有默认内存(因为我没有更改spark-env.sh),即系统内存减去1GB

标签: scala out-of-memory apache-spark


【解决方案1】:

这是在黑暗中拍摄的,因为我需要知道集群配置才能查明问题,但很可能是在以下几行中:

spark.executor.memory 是执行程序所需的内存量。这是一个应用程序设置。另一方面,如果您在独立集群中运行(当您使用主 url 时),worker 可用的内存由 env var 定义:SPARK_WORKER_MEMORY。如下:spark.executor.memory < SPARK_WORKER_MEMORY

鉴于您正在处理一个几 Kb 的文件,请尝试将 spark.executor.memory 降低到 ~100Mb 左右。提示是降低spark.executor.memory 设置,而不是增加它。

【讨论】:

    猜你喜欢
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-22
    相关资源
    最近更新 更多