about云開發

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

打印 上一主題 下一主題

[心得體會] JVM申請的memory不足解決辦法[spark]

[復制鏈接]
跳轉到指定樓層
樓主
報錯內容:

System memory 259522560 must be at least 4.718592E8. Please use a larger heap size.
在Eclipse里開發spark項目,嘗試直接在spark里運行程序的時候,遇到下面這個報錯:
[Bash shell] 純文本查看 復制代碼
ERROR SparkContext: Error initializing SparkContext.

java.lang.IllegalArgumentException: System memory 468189184 must be at least 4.718592E8. Please use a larger heap size.


很明顯,這是JVM申請的memory不夠導致無法啟動SparkContext。但是該怎么設呢?

通過查看spark源碼,發現源碼是這么寫的:

[Bash shell] 純文本查看 復制代碼
/**
   * 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()的定義和解釋是
[Bash shell] 純文本查看 復制代碼
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

再運行就不會報這個錯誤了。

解決:

Window——Preference——Java——Installed JREs——選中一個Jre 后
Edit在Default VM arguments 里加入:-Xmx512M







本帖被以下淘專輯推薦:

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關閉

推薦上一條 /4 下一條

QQ|小黑屋|about云開發-學問論壇|社區 ( 京ICP備12023829號 )

GMT+8, 2020-1-18 19:17 , Processed in 1.156250 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2018 Comsenz Inc.Designed by u179

快速回復 返回頂部 返回列表
梭哈电子游艺 海南飞鱼 北京快中彩 河北快三中奖秘诀 天津麻将微信版代理 有什么手机赚钱的好方法 北单比分直播体育有料 贵州快三 绝对一两两码中特 棋牌游戏大厅 足球指数回查 沙拉店 赚钱 斗牛 大街小巷卖儿童电子琴的怎么赚钱 广西快乐双彩最新公告 真人麻将游戏在线玩 福建麻将十三水玩法