Spark Standalone模式REST API无法访问4040端口,如何查询指定app-id状态
Spark Standalone模式REST API访问问题解答
4040端口连接被拒绝原因
- 4040是单个Spark应用运行时的临时Web UI端口,仅在对应应用的Driver进程存活期间开放,应用运行结束后端口会自动释放。若同时运行多个Spark应用,端口会按4040、4041、4042的顺序递增分配,不属于集群层面的固定REST API入口,你混淆了应用级临时端口和集群固定服务端口。
查询指定app-id应用状态的方案
无需额外配置的运行中应用查询
- Standalone集群Master的默认Web服务端口为8080,你可以直接通过该端口调用标准REST API查询运行中应用的状态,请求格式如下:
无需额外修改配置,只要Master服务正常运行即可调用。http://<Master节点IP/主机名>:8080/api/v1/applications/<你的app-id>
已结束应用查询配置
如果需要查询已经运行完成的应用状态,需要先开启事件日志并启动历史服务器:
- 打开Spark配置文件
spark-defaults.conf,添加以下配置:spark.eventLog.enabled truespark.eventLog.dir hdfs://<namenode-host>:<port>/spark-event-logs(本地路径也可,确保所有节点都有权限访问)
- 启动历史服务器,执行命令:
./sbin/start-history-server.sh - 历史服务器默认端口为18080,查询已结束应用的API请求格式如下:
http://<历史服务器IP/主机名>:18080/api/v1/applications/<你的app-id>
官方REST API说明翻译
Spark提供了 REST API 来公开所有应用的监控指标,支持获取运行中和已结束的应用数据,返回格式为JSON,可用于构建新的可视化服务、告警系统等上层工具。
对于Standalone部署模式的集群,集群运行中应用的指标可以直接通过Master节点的Web服务端点获取,已结束应用的指标需要通过历史服务器的端点获取,两类端点的API路径规范完全一致。
内容的提问来源于stack exchange,提问作者Venkat
相关产品推荐
相关产品推荐

