Spark提交Yarn集群堆内存过大报错,求配置调整指导
解决Spark Submit中Driver内存过大导致的JVM启动失败问题
这个错误我碰到过好多次,本质是你指定的--driver-memory 10g超出了当前环境允许的内存上限,结合你用的yarn-cluster模式,主要从这几个方向排查解决:
1. 先确认JVM位数是否拖后腿
32位的JVM最大堆内存通常撑死也就4G左右,根本没法支持10G的配置。先跑个命令确认:
java -version
如果输出里看不到64-Bit字样,那赶紧换成64位JDK,这是解决大内存配置的前提。
2. 调整Yarn集群的容器内存限制
在yarn-cluster模式下,Driver是跑在Yarn分配的容器里的,Yarn默认的单个容器最大内存可能只有8G(8192MB),你设10G自然超了。需要修改Yarn的核心配置文件yarn-site.xml:
- 找到
yarn.scheduler.maximum-allocation-mb:这个参数控制单个容器能申请的最大内存,把它改成至少10240(对应10G),建议留些余量设成12288(12G)。 - 同步检查
yarn.nodemanager.resource.memory-mb:这个是NodeManager节点总共能分配的内存总量,必须大于等于上面的最大值,否则前者的设置不生效。
修改完配置后,一定要重启Yarn的ResourceManager和NodeManager服务,不然配置不会生效。
3. 合理设置Spark的Driver内存参数
就算Yarn放开了限制,也别直接卡着上限设10g——JVM还需要一部分非堆内存(比如元空间、栈内存),留些余量更稳妥。把spark-submit命令里的--driver-memory改成9g试试:
spark-submit --master yarn-cluster --num-executors 7 --driver-memory 9g --executor-memory 16g --executor-cores 5
4. 验证配置是否生效
重启Yarn后,打开Yarn的WebUI(默认地址是http://你的ResourceManager主机名:8088),在"Cluster Metrics"里查看"Maximum Allocation per Container",确认已经是你修改后的数值,再提交任务就没问题了。
内容的提问来源于stack exchange,提问作者Bill
相关产品推荐
相关产品推荐

