如何在Eclipse环境中的spark中设置堆大小



我正试图在Eclipse中使用spark运行以下简单代码:

import org.apache.spark.sql.SQLContext
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
object jsonreader {  
  def main(args: Array[String]): Unit = {
    println("Hello, world!")
    val conf = new SparkConf()
      .setAppName("TestJsonReader")
      .setMaster("local")
      .set("spark.driver.memory", "3g") 
    val sc = new SparkContext(conf)
    val sqlContext = new SQLContext(sc)
    val df = sqlContext.read.format("json").load("text.json")
    df.printSchema()
    df.show   
  }
}

然而,我得到以下错误:

16/08/18 18:05:28 ERROR SparkContext: Error initializing SparkContext.
java.lang.IllegalArgumentException: System memory 259522560 must be at least 471859200. Please increase heap size using the --driver-memory option or spark.driver.memory in Spark configuration.

我学习了不同的教程,比如:如何设置Apache Spark Executor内存。大多数时候,我要么使用--driver-memory选项(Eclipse不可能(,要么修改spark配置,但没有相应的文件。

有人知道如何在Eclipse环境中解决这个问题吗?

在Eclipse中,转到运行>运行配置…>Arguments>VM Arguments并设置最大堆大小,如-Xmx512m

我也遇到了这个问题,这就是我解决它的方法。我认为这可能会有所帮助。

val conf: SparkConf = new SparkConf().setMaster("local[4]").setAppName("TestJsonReader").set("spark.driver.host", "localhost")
conf.set("spark.testing.memory", "2147480000")

将脚本修改为conf.set("spark.testing.memory","2147480000"(后,我的工作很好

完成以下代码:

import scala.math.random
import org.apache.spark._
object SparkPi {
  def main(args: Array[String]) {
    val conf: SparkConf = new SparkConf().setMaster("local").setAppName("Spark Pi").set("spark.driver.host", "localhost")
     conf.set("spark.testing.memory", "2147480000")         // if you face any memory issues

    val spark = new SparkContext(conf)
    val slices = if (args.length > 0) args(0).toInt else 2
    val n = math.min(100000L * slices, Int.MaxValue).toInt // avoid overflow
    val count = spark.parallelize(1 until n, slices).map { i =>
      val x = random * 2 - 1
      val y = random * 2 - 1
      if (x * x + y * y < 1) 1 else 0
    }.reduce(_ + _)
    println("Pi is roughly " + 4.0 * count / n)
    spark.stop()
  }
}

第2步

Run it as “Scala Application”

第3步创建JAR文件和执行:

bin/spark-submit --class SparkPi --master local SparkPi.jar

在我的案例中,mvn停止了对项目的打包,但出现了相同的异常(java.lang.IllegalArgumentException: System memory 259522560 must be at least 471859200.(。

我通过更改VM堆大小export MAVEN_OPTS="-Xms1024m -Xmx4096m -XX:PermSize=1024m"的设置开始调试这个问题。它不起作用。。

然后我尝试将spark.driver.memory选项添加到spark config中,该选项等于1g[SparkConfig.set("spark.driver.memory","1g")]。

最后,我的java安装不知怎么搞砸了。我重新安装了JDK(到一个新版本(,并且必须重新设置JAVA_HOME路径,然后一切都在终端上工作。

如果要升级,则要使用Netbeans/Intellij/Eclipse,需要在其中的每一个中配置JDK设置,以指向Java开发工具包的新安装。

我添加了.set("spark.testing.memory","2147480000"(;这允许我运行代码
SparkConf conf = new SparkConf().setAppName("Text").setMaster("local").set("spark.testing.memory", "2147480000");
        JavaSparkContext sparkContxt = new JavaSparkContext(conf);
        SQLContext sqlContext = new SQLContext(sparkContxt);

您可以通过编辑"${spark_HOME}/conf/"中的"spark-defaults.conf"文件来设置"spark.driver.memory"选项。默认情况下,"${spark_HOME}/conf/"目录中没有名为"spark-default.conf"的文件,但有一个文件"spark-defaults.conf.template",您可以使用以下命令创建"spark-faults.conf"文件:

cp spark-defaults.conf.template spark-defaults.conf

然后,编辑它:

# Example:
# spark.master                     spark://master:7077
# spark.eventLog.enabled           true
# spark.eventLog.dir               hdfs://namenode:8021/directory
# spark.serializer                 org.apache.spark.serializer.KryoSerializer
# spark.driver.memory              5g
# spark.executor.extraJavaOptions  -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"

spark.driver.memory              3g

如果您在本地运行,您还需要增加spark.testing.memory

spark.driver.memory,571859200spark.testing.memory,2147480000

最新更新