如何通过Spark Connect从笔记本连接树莓派Docker部署的Spark
树莓派Docker版Spark+Spark Connect远程连接简易指南
一、修正Docker Compose配置
你的Spark Connect服务默认只监听容器内部的localhost,外部设备根本连不上,得修改启动命令让它监听容器所有网卡:
找到spark-connect服务的command部分,替换成以下内容:
"/opt/spark/sbin/start-connect-server.sh --jars /opt/spark/jars/spark-connect_2.12-3.5.1.jar --host 0.0.0.0 --port 15002 && tail -f /dev/null"
新增的--host 0.0.0.0让服务对外部开放,--port 15002明确端口(和你配置的端口映射保持一致)。
改完后重启服务:
docker-compose down && docker-compose up -d
二、获取树莓派的局域网IP
在树莓派终端执行以下命令,拿到它的局域网IP(比如192.168.1.100):
hostname -I
注意:不能用localhost,这是你笔记本本地的地址,必须用树莓派的实际IP。
三、本地笔记本连接操作
- 确保本地PySpark版本和Spark服务器完全一致(都是3.5.1),版本不匹配会直接导致连接失败,安装时指定版本:
pip install pyspark==3.5.1
- 修改连接代码,把
localhost替换成树莓派的IP:
from pyspark.sql import SparkSession spark = SparkSession.builder.remote("sc://<树莓派IP>:15002").getOrCreate() # 测试连接是否正常,执行简单命令验证 df = spark.range(10) df.show()
将<树莓派IP>替换成你刚才获取到的实际地址。
四、常见问题排查
- 端口不通:先在笔记本上ping树莓派IP确认网络可达,再用nc工具测试15002端口:
nc -zv <树莓派IP> 15002
如果不通,检查树莓派防火墙(比如ufw)是否开放15002端口,或者通过docker ps查看spark-connect容器的PORTS列,确认是否显示0.0.0.0:15002->15002/tcp。
- 版本不匹配:本地PySpark的主版本和小版本必须和服务器完全一致,哪怕差0.0.1都可能出问题。
- Jar包无需手动挂载:官方
apache/spark:3.5.1镜像已经自带Spark Connect的依赖包,你可以尝试去掉volumes里的jar挂载配置,避免路径错误。
内容的提问来源于stack exchange,提问作者Roan Schuurman
相关产品推荐
相关产品推荐

