更新时间:2024-09-30 GMT+08:00
Spark任务由于内存不够,作业卡住
用户问题
Spark提交作业内存不足导致任务长时间处于pending状态或者运行中内存溢出。
问题现象
使用Spark提交作业后,长期卡住不动。反复运行作业后报错,内容如下:
Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Aborting TaskSet 3.0 because task 0 (partition 0) cannot run anywhere due to node and executor blacklist. Blacklisting behavior can be configured via spark.blacklist.*.
原因分析
内存不足导致Spark提交的作业任务长时间处于pending状态。
处理步骤
- 登录MRS Console页面,在现有集群中,选择集群名称,在“节点信息”页面,查看当前集群的节点规格。
- 提高nodemanager进程所持有的集群资源。
MRS Manager界面操作:
- 登录MRS Manager页面,选择“服务管理 > Yarn > 服务配置”。
- 在“参数类别”中选择“全部配置”,然后在搜索框中搜索yarn.nodemanager.resource.memory-mb,查看该参数值。建议配置成节点物理内存总量的75%-90%。
FusionInsight Manager界面操作:
- 登录FusionInsight Manager。选择“集群 > 服务 > Yarn”。
- 单击“配置”,选择“全部配置”。然后在搜索框中搜索yarn.nodemanager.resource.memory-mb,查看该参数值。建议配置成节点物理内存总量的75%-90%。
- 修改Spark的服务配置。
MRS Manager界面操作:
- 登录MRS Manager页面,选择“服务管理”>“Spark” >“服务配置”。
- 在“参数类别”中选择“全部配置”,然后在搜索框中搜索spark.driver.memory和spark.executor.memory
根据作业的需要调大或者调小该值,具体以提交的Spark作业的复杂度和内存需要为参考(一般调大)。
FusionInsight Manager界面操作:
- 登录FusionInsight Manager。选择“集群 > 服务 > Spark”。
- 单击“配置”,选择“全部配置”。然后在搜索框中搜索spark.driver.memory和spark.executor.memory,根据作业的需要调大或者调小该值,具体以提交的Spark作业的复杂度和内存需要为参考(一般调大)。
- 如果使用到SparkJDBC作业,搜索并修改SPARK_EXECUTOR_MEMORY和SPARK_DRIVER_MEMORY两个参数取值,具体以提交的Spark作业的复杂度和内存需要为参考(一般调大)。
- 如果对核数有要求,可以搜索并修改spark.driver.cores和spark.executor.cores的核数取值。
- Spark依赖内存做计算,如果以上还是不能满足任务的提交需要,建议扩容集群。
父主题: 使用Spark