【问题标题】:How to set heap size in spark within the Eclipse environment?如何在 Eclipse 环境中设置 Spark 中的堆大小?
【发布时间】:2016-12-25 16:03:40
【问题描述】:

我正在尝试在 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.

我遵循了不同的教程,例如:How to set Apache Spark Executor memory。大多数时候,我要么使用--driver-memory 选项(Eclipse 不可能),要么通过修改 spark 配置但没有相应的文件。

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

【问题讨论】:

    标签: eclipse apache-spark heap-memory


    【解决方案1】:

    在 Eclipse 中,转到 Run > Run Configurations...> Arguments > VM arguments 并设置最大堆大小,例如 -Xmx512m

    【讨论】:

      【解决方案2】:

      您可以通过编辑“${SPARK_HOME}/conf/”中的“spark-defaults.conf”文件来设置“spark.driver.memory”选项,默认情况下,没有名为“spark-defaults.conf”的文件"在“${SPARK_HOME}/conf/”目录下,但是有一个文件“spark-defaults.conf.template”,可以使用以下命令创建“spark-defaults.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
      

      【讨论】:

        【解决方案3】:

        在我的情况下,mvn 停止打包项目,但同样例外 (java.lang.IllegalArgumentException: System memory 259522560 must be at least 471859200.)。

        我通过changing the settings for the VM heap sizeexport MAVEN_OPTS="-Xms1024m -Xmx4096m -XX:PermSize=1024m" 开始调试此问题。它没有工作..

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

        最后发现我的 java 安装不知何故搞砸了。我重新安装JDK(更新版本)并不得不再次设置JAVA_HOME路径,然后一切都可以从终端运行。

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            【解决方案5】:

            将脚本修改为 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()
              }
            }
            

            第二步

            Run it as “Scala Application”
            

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

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

            【讨论】:

              【解决方案6】:

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

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

              【讨论】:

                【解决方案7】:

                我添加了 .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);
                

                【讨论】:

                  猜你喜欢
                  • 2010-09-29
                  • 1970-01-01
                  • 2016-04-14
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-07-31
                  • 2012-07-18
                  • 1970-01-01
                  相关资源
                  最近更新 更多