您的位置:首页 > 其它

spark-OutOfMemory:GC overhead limit exceeded 解决,timelimitexceeded

2016-03-26 21:13 344 查看
今天准备跑自己的spark程序,但是运行过程中遇到了OutOfMemory:GC overhead limit exceeded的错误。

原以为是数据集太大,google了一番,以为是内存不够了,但是在webui一看其实数据集好像也不是很大,但是还是尝试提高了内存配置,通过提高
spark.executor.memory
spark.shuffle.memoryFraction
,降低
spark.storage.memoryFraction
,来提高机器可用的堆空间。

再次运行发现,问题依旧。在苦恼中找到Spark User Mailing List的一个问答帖,有人和我遇到了同样的问题。在帖子里发现了一个新的解释:executor core数量太多,导致了多个core之间争夺gc时间以及资源(应该主要是内存资源),最后导致大部分的时间都花在了gc上。

根据他的建议,我把core数量从4调到了1(也是挺极端的,真是为了成功运行,我拼了),方法是:由于我是spark standalone集群模式,所以直接编辑conf/spark-env.sh中的
SPARK_EXECUTOR_CORES


运行,成功了。

真是不可思议,本来并行是为了提高速度和效率,但是这里却反而导致了运行失败。具体原因其实还不清楚,关于jvm的gc我也不甚了解,甚至也是今天我才尝试设置spark的其他环境参数,还是要多加学习啊!

本文转自http://www.bkjia.com/yjs/990042.html,所有权利归原作者所有。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  内存 spark GC