之前一直在intellJ里面执行代码,所有的输入命令都是用内置的Edit Configuration写好的,原本以为会没有问题,但是一旦生成jar之后再命令行里面修改就会一直在最后出现GC overhead Limit,如图
然后在网上多方搜寻,终于找到了解决方法,首先执行spark-submit的时候去http://localhost:4040/jobs/
检查自己的内存用的是多大,这里有一个Storage Memory 可以看到自己的memory是多大,一般在IntellJ里面系统会自己设置成大概在900MB左右,但是进入系统本身的命令行就只有大概300MB,所以会一直显示GC overhead Limit. 修改过之后就可以把这个问题解决了。
下面主要是一些如何修改的干货!
1. 首先进入自己的spark的包的位置
2.进入conf 文件夹
3.复制spark-env.sh.template文件,并且修改名称叫做spark-env.sh
3.1 cp spark-env.sh.template spark-env.sh
3.2 vim spark-env.sh
加入下面两个命令
export SPARK_DRIVER_MEMORY=4g
export SPARK_EXECUTOR_MEMORY=4g
4. 之后保存之后再去命令行里面执行scala代码,再去http://localhost:4040/jobs/,检查自己的内存使用情况,如果出现我图一所给出的900MB,就是基本上解决了GC overhead Limit这个问题,但是如果设置完了之后还是不能执行,或者还是报相同的错误,首先不妨可以试试再把内存提高,再不然可以修改一下代码里面有关于shuffle的地方,或者将aggregateByKey, GroupByKey这些需要大量时间和内存的地方优化一下,就可以啦,希望大家都能debug成功!
网友评论