You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何查询本地Apache Spark UI对应的TCP端口?

如何在lsof -p PID失效时查询Spark Shell的UI端口

我懂你遇到的问题了,当你通过jps -lm | grep -i spark能找到Spark进程,但用lsof -p <PID>却查不到UI的TCP端口时,可以试试下面这些靠谱的方法:

1. 先看Spark Shell的控制台日志

Spark Shell启动时,会直接在控制台打印UI的访问地址,找类似这样的行就行:

Spark Web UI available at http://localhost:4040
要是日志滚屏太多看不到,就去Spark默认的日志目录$SPARK_HOME/logs看看——找文件名里包含你Spark进程ID的日志文件,搜索"Spark Web UI available"就能定位到具体端口。

2. 在Spark Shell里直接查询端口

不用依赖外部工具,直接问Spark本身就行!在Scala版本的Spark Shell里,执行这行代码:

sc.uiWebUrl.get

它会返回完整的UI地址(比如http://localhost:4040),里面就有你要找的端口。如果是PySpark,对应的Python命令是:

sc.uiWebUrl

3. 检查Spark的配置文件

Spark UI默认用4040端口,如果这个端口被占用,它会自动尝试4041、4042……直到找到可用的端口。你可以打开$SPARK_HOME/conf/spark-defaults.conf配置文件,看看有没有配置spark.ui.port属性——如果有,那就是默认的起始端口;如果没有,Spark就会从4040开始自动递增。

4. 用netstatss命令扫描监听端口

如果上面的方法都不行,直接在系统里找端口就行。用netstat(旧系统)或者ss(现代Linux):

# 使用netstat
netstat -tlnp | grep -E ':(404[0-9]+)'

# 使用ss
ss -tlnp | grep -E ':(404[0-9]+)'

这些命令会列出所有正在监听的TCP端口,404开头的端口基本就是Spark UI的了,输出里还会显示对应的进程ID,能确认是不是你的Spark实例。

至于为什么lsof查不到?有时候Spark UI的端口是由主进程的子线程绑定的,lsof可能没法立刻捕获到——尤其是你刚启动Spark就跑命令的情况。或者你可能需要提升权限(试试在lsof前加sudo)。不管怎样,上面的方法肯定能帮你找到端口。


内容的提问来源于stack exchange,提问作者More Than Five

火山引擎 最新活动