zoukankan      html  css  js  c++  java
  • JVM申请的memory不够导致无法启动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.

    尝试直接在spark里运行程序的时候,遇到下面这个报错:

    很明显,这是JVM申请的memory不够导致无法启动SparkContext。但是该怎么设呢?

    通过查看spark源码,发现源码是这么写的:

    /**
    * Return the total amount of memory shared between execution and storage, in bytes.
    */
    private def getMaxMemory(conf: SparkConf): Long = {
    val systemMemory = conf.getLong("spark.testing.memory", Runtime.getRuntime.maxMemory)
    val reservedMemory = conf.getLong("spark.testing.reservedMemory",
    if (conf.contains("spark.testing")) 0 else RESERVED_SYSTEM_MEMORY_BYTES)
    val minSystemMemory = reservedMemory * 1.5
    if (systemMemory < minSystemMemory) {
    throw new IllegalArgumentException(s"System memory $systemMemory must " +
    s"be at least $minSystemMemory. Please use a larger heap size.")
    }
    val usableMemory = systemMemory - reservedMemory
    val memoryFraction = conf.getDouble("spark.memory.fraction", 0.75)
    (usableMemory * memoryFraction).toLong
    }


    所以,这里主要是val systemMemory = conf.getLong("spark.testing.memory", Runtime.getRuntime.maxMemory)。

    conf.getLong()的定义和解释是

    getLong(key: String, defaultValue: Long): Long
    Get a parameter as a long, falling back to a default if not set
    所以,我们应该在conf里设置一下spark.testing.memory.

    通过尝试,发现可以有2个地方可以设置

    1. 自己的源代码处,可以在conf之后加上:

        val conf = new SparkConf().setAppName("word count")
        conf.set("spark.testing.memory", "2147480000")//后面的值大于512m即可

    2. 可以在Eclipse的Run Configuration处,有一栏是Arguments,下面有VMarguments,在下面添加下面一行(值也是只要大于512m即可)

    -Dspark.testing.memory=1073741824

    其他的参数,也可以动态地在这里设置,比如-Dspark.master=spark://hostname:7077

    再运行就不会报这个错误了。

  • 相关阅读:
    web服务器-Apache
    nginx优化
    nginx下载限速
    nginx-URL重写
    HDU 5358 First One 求和(序列求和,优化)
    HDU 5360 Hiking 登山 (优先队列,排序)
    HDU 5353 Average 糖果分配(模拟,图)
    UVALive 4128 Steam Roller 蒸汽式压路机(最短路,变形) WA中。。。。。
    HDU 5348 MZL's endless loop 给边定向(欧拉回路,最大流)
    HDU 5344 MZL's xor (水题)
  • 原文地址:https://www.cnblogs.com/AlanWilliamWalker/p/11680933.html
Copyright © 2011-2022 走看看