如何在Jupyter Notebook中配置启动PySpark集群模式(Spark3.1.2)
误区澄清
PySpark完全支持集群模式运行,网传无法运行的说法是错误的,通常这类异常都是环境配置不一致、Python版本不匹配、网络端口未开放等问题导致的运行失败,而非PySpark本身不支持集群部署。
前置集群校验
修改代码前先确认以下集群状态正常:
- 3台虚拟机的Spark Standalone集群已完成部署,主节点执行
sbin/start-all.sh后,访问主节点默认8080端口的WebUI,可以看到3个Worker节点都已正常注册 - 所有节点(包括运行Jupyter Notebook的机器)的Python大版本完全一致,例如统一使用Python 3.8系列,避免版本差异导致序列化失败
- 所有节点都已安装代码中用到的第三方Python依赖,且依赖版本保持统一
- 若用到Hadoop存储,需确保Hadoop集群正常运行,所有节点的
HADOOP_CONF_DIR环境变量配置正确
启动代码修改方案
你原来的单机模式启动代码核心是将master参数设为local[*],修改为集群模式只需调整master地址并补充必要的资源配置即可,参考代码如下:
from pyspark.sql import SparkSession spark = SparkSession.builder \ # 替换为你自己的Spark主节点IP,Standalone模式默认通信端口为7077 .master("spark://你的Spark主节点IP:7077") \ .appName("PySpark集群测试") \ # 以下资源配置可根据你的虚拟机硬件配置灵活调整 .config("spark.driver.memory", "2g") \ .config("spark.executor.cores", "2") \ .config("spark.executor.memory", "4g") \ .config("spark.executor.instances", "3") \ # 统一所有节点的Python执行路径,避免找不到Python解释器 .config("spark.pyspark.python", "python3") \ .getOrCreate()
集群运行验证
启动会话后执行以下代码确认配置生效:
# 输出当前运行的master地址,确认输出为你配置的spark://主节点IP:7077 print(spark.sparkContext.master) # 提交并行计算任务,会自动分发到多个Worker节点执行 rdd = spark.sparkContext.parallelize(range(10000), 10) print(rdd.sum())
运行后访问Spark主节点WebUI,在Running Applications列表中可以看到当前任务,点击进入任务详情页,能看到Executor分布在3台虚拟机节点上即为配置成功。
常见异常排查
- 任务提交后长时间无响应:检查主节点7077端口、Worker节点通信端口是否在防火墙放开,确认所有节点网络互通
- 提示Python版本不匹配:统一运行Jupyter的Driver端和所有Worker节点的Python版本
- 第三方依赖导入失败:所有Worker节点都需要安装对应版本的依赖,也可以通过conda打包Python环境后分发到集群使用
内容的提问来源于stack exchange,提问作者ABDELOUAHAB AMINE TAFAT
相关产品推荐
相关产品推荐

