Spark Standalone集群Client部署模式异常:任务仅在Master执行且UI无应用显示
咱们一步步拆解你的问题:你搭了1主2从的Spark Standalone集群,用Client模式提交Scala版WordCount,结果任务只在Master节点跑,连Master UI里都看不到Driver和应用的影子,本来预期是任务能分发到Worker的Executor上执行,还能在UI里监控。下面是几个核心排查点和解决建议:
1. 先补全你的提交命令
你给出的提交命令明显不完整,缺少应用jar包的路径,正确的spark-submit格式应该是这样的:
./bin/spark-submit --class WordCount --master spark://master-host:7077 --deploy-mode client /绝对路径/到你的wordcount.jar [输入文件路径] [输出结果路径]
如果没指定jar包,Spark没法把任务分发到Worker节点,只能在提交节点(也就是Master)本地执行。另外注意--deploy-mode的规范写法是小写的client(虽然Spark可能兼容大写,但尽量按官方规范来)。
2. 确认Worker节点有可用资源
- 打开Master的UI页面(默认是
http://master-host:8080),检查两个Worker节点的Cores和Memory是否有空闲。如果Worker的资源已经被占满,Spark会自动把任务放到Master本地执行。 - 去Worker节点的日志目录(默认在
SPARK_HOME/work下)看看,有没有连接Master失败、资源不足这类报错信息。
3. 检查Driver的可访问性
Client模式下,Driver是跑在提交节点(Master)上的,Worker节点必须能访问到Driver的地址,才能汇报任务状态、拉取任务。你要确认:
- Master的hostname(
master-host)能被所有Worker节点解析,要是解析有问题,直接换成Master的IP地址试试。 - 可以在提交命令里手动指定
spark.driver.host参数,确保Worker能找到Driver:
--conf spark.driver.host=你的Master节点IP
要是Worker连不上Driver,任务根本没法分发,只能在Master本地跑,UI自然也看不到应用信息。
4. 确认输入文件的存储位置
如果你的WordCount读的是Master本地的文件(比如file:///本地路径/文件.txt),而Worker节点上没有这个文件,Spark会默认把任务放到Driver所在的Master节点执行,不会分发到Worker。要实现分布式执行,要么把文件放到HDFS这类分布式存储里,要么确保所有Worker节点的本地路径都有这个文件。
5. 查看日志找线索
- 提交任务时,看看Master终端里的Driver日志,有没有Executor启动失败、资源申请被拒绝的提示。
- 去Master节点的
SPARK_HOME/logs目录搜你的应用ID,看看有没有应用注册失败的记录。
6. 验证集群网络连通性
在每个Worker节点上,执行telnet master-host 7077和telnet master-host 4040(Driver的默认UI端口),确认这些端口是通的。如果不通,检查防火墙规则,确保Master和Worker之间的这些端口是开放的。
按照上面的步骤逐一排查,大概率能找到问题——最常见的情况就是提交命令缺了jar包,或者Worker没法访问Driver的地址。
内容的提问来源于stack exchange,提问作者Gang

