分享

GC overhead limit exceeded错误请教

11.png

这是个什么错误,数据量稍微大大点就出错了。很容易OOM
怎么优化参数都不行。

已有(8)人评论

跳转到指定楼层
easthome001 发表于 2017-1-13 15:23:04
楼主都是怎么优化的。
产生这个问题,主要是Worker上面分配的任务执行数据时所需要的内存不够,直接导致内存溢出了

可以尝试下面三个方案
A、相同资源下,增加partition数可以减少内存问题。 原因如下:通过增加partition数,每个task要处理的数据少了,同一时间内,所有正在运行的task要处理的数量少了很多,所有Executor占用的内存也变小了。这可以缓解数据倾斜以及内存不足的压力。

B、关注shuffle read 阶段的并行数。例如reduce,group 之类的函数,其实他们都有第二个参数,并行度(partition数),只是大家一般都不设置。不过出了问题再设置一下,也不错。

C、给一个Executor 核数设置的太多,也就意味着同一时刻,在该Executor 的内存压力会更大,GC也会更频繁。我一般会控制在3个左右。然后通过提高Executor数量来保持资源的总量不变。


上面只是三个方法,问题的根本原因只要解决内存问题即可
回复

使用道具 举报

einhep 发表于 2017-1-13 15:26:37
除了worker内存不够,另外的原因,可能是drive内存不够
可以在在spark-submit中指定 --driver-memory memSize参数来设定driver的jvm内存大小,可以通过spark-submit --help查看其他可以设置的参数。

eg:

./spark-submit \
  --master spark://7070 \
  --class $MAIN_CLASS \
  --executor-memory 3G \
  --total-executor-cores 10 \
  --driver-memory 2g \
  --name $APP_NAME \
  --conf "spark.executor.extraJavaOptions=-XX:+PrintGCDetails -XX:+PrintGCTimeStamps" \
  "$SPARK_APP_JAR"

回复

使用道具 举报

lanyangkj 发表于 2017-1-13 17:33:59
einhep 发表于 2017-1-13 15:26
除了worker内存不够,另外的原因,可能是drive内存不够
可以在在spark-submit中指定 --driver-memory memS ...

谢谢你的回答,不是这个问题!
回复

使用道具 举报

w517424787 发表于 2017-1-14 16:22:44
你这个肯定得找出是哪个算子造成的内存溢出,这样才好解决!
回复

使用道具 举报

lanyangkj 发表于 2017-1-23 17:56:47
以上回答都算正确

正解是: 数据倾斜了!
回复

使用道具 举报

easthome001 发表于 2017-1-23 18:18:36
lanyangkj 发表于 2017-1-23 17:56
以上回答都算正确

正解是: 数据倾斜了!

还没回家过年
回复

使用道具 举报

easthome001 发表于 2017-1-23 18:19:27
数据倾斜楼主怎么弄的。重新负载?
回复

使用道具 举报

lanyangkj 发表于 2017-2-7 17:41:23
easthome001 发表于 2017-1-23 18:19
数据倾斜楼主怎么弄的。重新负载?

你在分区的时候,要合理。凡是不均匀的都可以叫倾斜,但在资源有限情况,而且分的极其不合理时候就会出现内存溢出的异常啦。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条