Spark Standalone模式下仅Driver执行任务的原因求助
Worker节点资源未被正确识别
即便配置指定了1个executor,若Worker节点实际可用CPU核数、内存不满足任务要求,Spark会无法启动executor。查看Worker节点的spark-worker.log日志,排查是否存在资源不足的报错,例如内存不足导致executor进程无法启动。提交命令的部署模式错误
确认提交命令的master地址是否正确,是否误将--master指定为local[*]而非spark://xxx:7077。使用local模式时,任务只会在Driver进程内执行,不会启动独立的executor进程。自定义Shuffle管理器的类加载问题
检查自定义Shuffle管理器的类是否已正确打包到应用jar包中,或者Worker节点的classpath是否缺少相关依赖类。若executor启动时无法加载该类,可能导致Spark fallback到本地执行逻辑,仅Driver实例化Shuffle管理器。提交任务时可通过--jars参数指定依赖包,确保Worker端能加载到相关类。Worker节点配置存在隐藏差异
对比两台机器的spark-env.sh、spark-defaults.conf配置文件,检查是否存在spark.executor.instances被强制设为0、spark.local.dir权限不足等情况——这些配置问题会导致executor无法正常启动。网络连通性问题
Standalone模式下Driver需与Worker/executor通信,若目标机器防火墙或安全组阻止了7077端口、executor随机端口,会导致Driver无法连接Worker,只能本地执行任务。可通过telnet测试Driver与Worker之间的端口连通性。Spark版本不一致
确认两台机器的Spark版本完全一致,小版本差异可能导致内部API不兼容,进而引发Shuffle管理器无法在executor端初始化的问题。
内容的提问来源于stack exchange,提问作者Brave

