在GCP Compute Engine虚拟机上访问Spark Web UI/History Server的方法
访问Spark Web UI/History Server及端口验证方案
一、解决Spark Web UI(4040端口)无法访问的问题
1. 确认Spark应用处于运行状态
4040是Spark Driver的临时UI端口,仅当有Spark应用(如spark-shell、pyspark或提交的作业)正在运行时才会启动监听。先在GCE实例中执行以下命令检查进程:
ps aux | grep spark
如果没有运行中的Spark应用,先启动spark-shell再尝试访问。
2. 修改Spark绑定地址
默认情况下Spark Driver仅绑定localhost,外部无法访问。可以通过两种方式修改:
- 启动应用时临时指定:
spark-shell --conf spark.driver.bindAddress=0.0.0.0 --conf spark.driver.host=<你的实例外部IP> - 永久修改配置文件:
编辑conf/spark-defaults.conf,添加以下两行:spark.driver.bindAddress 0.0.0.0 spark.driver.host <你的实例外部IP>
3. 配置防火墙规则
外部IP拒绝连接
GCE默认防火墙未开放4040端口,需在GCP控制台添加入站防火墙规则:
- 方向:入站
- 目标:选择你的实例对应的网络标签(或所有实例)
- 端口/协议:TCP:4040
- 来源:建议设为你的本地IP(更安全),测试阶段可设为
0.0.0.0/0
内部IP响应超时
- 若从本地访问内部IP:需确保你的本地网络与GCE实例在同一VPC,或通过VPN/Cloud Connect连接,否则本地无法直接访问GCE内部IP。
- 若从同VPC的其他实例访问:检查实例内部防火墙(如iptables)是否放行4040端口:
若无允许规则,执行以下命令添加:sudo iptables -L INPUT -n | grep 4040sudo iptables -A INPUT -p tcp --dport 4040 -j ACCEPT
二、访问Spark History Server
History Server用于查看已完成作业的UI,默认端口18080,需先配置启动:
1. 配置事件日志存储
编辑conf/spark-defaults.conf,添加以下配置(可选择HDFS或本地路径):
spark.eventLog.enabled true spark.eventLog.dir file:///opt/spark/logs # 本地路径示例,需确保路径存在 spark.history.fs.logDirectory file:///opt/spark/logs
若用本地路径,先创建目录并设置权限:
mkdir -p /opt/spark/logs && chown spark:spark /opt/spark/logs
2. 启动History Server
./sbin/start-history-server.sh
若需绑定所有地址(允许外部访问),启动时添加参数:
./sbin/start-history-server.sh --conf spark.history.bindAddress=0.0.0.0
3. 开放防火墙端口
在GCP控制台添加入站防火墙规则,开放TCP:18080端口,之后通过http://<实例外部IP>:18080访问。
三、验证Spark使用的端口
1. 检查进程监听的端口
使用ss或lsof命令查看Spark进程的监听端口:
# 查看所有Java进程(Spark基于Java)的监听端口 sudo ss -tulpn | grep java # 直接检查指定端口(如4040)是否被监听 sudo lsof -i :4040
2. 查看Spark配置中的端口参数
- 查看当前Spark的端口配置:
./bin/spark-shell --help | grep port - 常用端口参数说明:
spark.ui.port:Driver UI默认端口(4040,被占用时自动递增)spark.history.ui.port:History Server默认端口(18080)spark.driver.port:Driver通信端口(默认随机分配)
内容的提问来源于stack exchange,提问作者Matthew
相关产品推荐
相关产品推荐

