Spark 2.2.0集群模式任务频繁排队且出现REASON_COMMAND_EXECUTOR_FAILED求助
我之前处理过不少Spark 2.x + Mesos集群模式下的这类问题,结合你的描述和日志片段,咱们一步步来排查解决:
排查
REASON_COMMAND_EXECUTOR_FAILED与任务排队问题 首先,REASON_COMMAND_EXECUTOR_FAILED这个错误的核心是Mesos执行器在启动或运行过程中崩溃了,而后续的任务排队大概率是因为调度器在执行器崩溃后没有正确恢复资源请求逻辑,哪怕集群资源充足也无法正常分配。
1. 先挖透执行器崩溃的真实原因
Dispatcher的日志只记录调度层面的动作(比如你看到的Reviving Offers是调度器在尝试重新请求资源),但执行器崩溃的细节全在Mesos Agent节点的本地日志里:
- 日志路径一般是Mesos Agent配置的
--log_dir(默认/var/log/mesos/),找带spark-executor前缀的日志文件 - 常见崩溃原因:
- 环境变量没传对:比如
SPARK_HOME、JAVA_HOME在执行器节点上不存在或配置错误,导致启动脚本找不到依赖 - 节点级资源不足:虽然集群整体资源够,但单个Agent的磁盘满了、内存不够(比如执行器请求的内存超过Agent剩余可用内存)
- 权限问题:执行器运行的用户没有权限访问Spark安装目录、临时目录(比如
/tmp被设置了严格的权限)
- 环境变量没传对:比如
2. 修复崩溃后,解决调度器的资源请求停滞
从你的日志看,调度器一直在尝试Reviving Offers,但可能因为之前的失败残留了无效的资源申请,导致Mesos没发新的Offer。可以试试这些方法:
- 重启Spark Dispatcher:这是最快清除无效状态的方式,重启后调度器会重新和Mesos Master建联,从头处理资源请求
- 检查资源匹配度:去Mesos UI的「Offers」页面,看看有没有因为Spark应用的资源请求(
--executor-memory、--executor-cores)和Agent可用资源不匹配导致Offer被拒绝的情况 - 调整Spark Mesos参数:
- 缩短
spark.mesos.driver.revive-offers.interval:默认5秒,改成2秒左右,让调度器更频繁地主动请求资源 - 开启
spark.mesos.executor.failover:确保执行器失败后,调度器能自动触发新的执行器申请
- 缩短
3. 验证修复效果
提交一个简单的测试应用来验证:
spark-submit --class org.apache.spark.examples.SparkPi \ --master mesos://<你的Mesos Master地址> \ --deploy-mode cluster \ examples/jars/spark-examples_2.11-2.2.0.jar
观察:
- Dispatcher日志不再出现
REASON_COMMAND_EXECUTOR_FAILED - Agent上的执行器日志无报错,能正常启动
- 任务能快速分配资源,不再出现无意义的排队
你提供的日志片段:
18/04/25 10:11:05 INFO MesosClusterScheduler: Reviving Offers.
18/04/25 10:24:23 INFO MesosClusterScheduler: Reviving Offers.
18...
内容的提问来源于stack exchange,提问作者Jais Sebastian
相关产品推荐
相关产品推荐

