PySpark on YARN(AKS SQLServer 2019 BDC) AM容器内存溢出问题咨询
问题1:AM容器定义与YARN集群模式下Driver、AM的部署关系
- 报错中提到的AM Container指的是当前Spark应用专属的Application Master容器,不是YARN集群全局的Application Manager:YARN全局的Application Manager是集群常驻服务,不会随单个应用报错销毁,也不会用单个应用的ID做错误标记。
- YARN集群模式(
--deploy-mode cluster)下,Spark Driver和当前应用的Application Master运行在同一个容器中。这个容器的物理内存上限就是spark.driver.memory+spark.driver.memoryOverhead的总和,你当前配置的1664m+384m刚好等于2GB,和报错提示的物理内存用尽数值完全匹配。
问题2:运行时参数调整方案
当前YARN侧AM资源最大占比为0.34,节点最大可分配内存为12288MB,因此单AM容器最大可申请内存上限约为4178MB,调整参数时不要超过该阈值即可,具体可调整的配置如下:
- 优先调整Driver侧内存配置:将
spark.driver.memory调高到3g,spark.driver.memoryOverhead调高到1024m,两者总和为4GB,低于AM最大可分配阈值,足够覆盖当前的物理+虚拟内存溢出需求。注意:PySpark的Python进程内存开销会被计入memoryOverhead部分,而非JVM的driver.memory中,迁移Python代码时必须适当调高memoryOverhead占比,默认384m对Python业务代码来说普遍偏小。
- 若调整Driver内存后仍出现Executor侧OOM,可同步调整Executor配置:将
spark.executor.memory调高到4g,spark.executor.memoryOverhead调高到1024m,同时可将spark.executor.instances调整为2,分散单Executor的计算压力。 - 虚拟内存溢出可选临时规避配置:如果YARN侧没有严格的虚拟内存限制,可添加配置
spark.yarn.driver.memoryOverheadFactor=0.3、spark.yarn.executor.memoryOverheadFactor=0.3,或由YARN管理员关闭虚拟内存检查yarn.nodemanager.vmem-check-enabled=false,该方案优先级最低,优先调整内存额度。
提交任务的参考命令如下:spark-submit --master yarn --deploy-mode cluster --conf spark.driver.memory=3g --conf spark.driver.memoryOverhead=1024m --conf spark.executor.memory=4g --conf spark.executor.memoryOverhead=1024m --conf spark.executor.instances=2 your_pyspark_script.py
内容的提问来源于stack exchange,提问作者Gopinath Rajee
相关产品推荐
相关产品推荐

