
# Spark任务由于内存不足或未添加Jar包导致异常
#### 问题现象
Spark提交作业内存不足或提交作业时未添加Jar包导致任务长时间处于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.*.
```
#### 原因分析
内存不足或提交作业时未添加Jar包，导致Spark提交的作业任务长时间处于pending状态。
#### 处理步骤
1. 检查提交作业时是否添加Jar包。 
   - 是，执行[2]。
   
   - 否，添加Jar包，执行作业正常，**操作结束** 。如果执行作业任务长时间处于pending状态，执行[2]。
   
   
   
   
2. 在MRS控制台页面的现有集群中，选择集群名称，在"节点信息"页面，查看当前集群的节点规格。
3. 提高NodeManager进程所持有的集群资源。 
   MRS Manager界面操作：
   1. 登录MRS Manager页面，选择"服务管理 \> Yarn \> 服务配置"。
   
   2. 在"参数类别"中选择"全部配置"，然后在搜索框中搜索**yarn.nodemanager.resource.memory-mb**，查看该参数值。建议配置成节点物理内存总量的75%-90%。
   
   
   FusionInsight Manager界面操作：
   1. 选择"集群 \> 服务 \> Yarn"。
   
   2. 单击"配置"，选择"全部配置"。然后在搜索框中搜索**yarn.nodemanager.resource.memory-mb**，查看该参数值。建议配置成节点物理内存总量的75%-90%。
   
   
   
   
4. 修改Spark的服务配置。 
   MRS Manager界面操作：
   1. 登录MRS Manager页面，选择"服务管理"\>"Spark" \>"服务配置"。
   
   2. 在"参数类别"中选择"全部配置"，然后在搜索框中搜索**s** **park.driver.memory** 和**spark.executor.memory**
      根据作业的需要调大或者调小该值，具体以提交的Spark作业的复杂度和内存需要为参考（一般调大）。
      
   
   
   FusionInsight Manager界面操作：
   1. 选择"集群 \> 服务 \> Spark"。
   
   2. 单击"配置"，选择"全部配置"。然后在搜索框中搜索**s** **park.driver.memory** 和**spark.executor.memory**，根据作业的需要调大或者调小该值，具体以提交的Spark作业的复杂度和内存需要为参考（一般调大）。
   
   
   ![](https://support.huaweicloud.com/trouble-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - 如果使用到SparkJDBC作业，搜索并修改**SPARK_EXECUTOR_MEMORY** 和**SPARK_DRIVER_MEMORY**两个参数取值，具体以提交的Spark作业的复杂度和内存需要为参考（一般调大）。
   
   - 如果对核数有要求，可以搜索并修改**spark.driver.cores** 和**spark.executor.cores** 的核数取值**。**
    
   
   
5. Spark依赖内存做计算，如果以上还是不能满足任务的提交需要，建议扩容集群。
 
