本地Jupyter Notebook访问远端Spark集群连接报错该如何解决
问题排查与解决步骤
本地运行master为local时正常,说明本地PySpark基础环境无故障,连接远程集群失败可按以下顺序排查:
1. 基础网络连通性校验
- 先在本地终端执行
telnet X.X.X.123 7077确认端口连通性,注意除了7077 Spark Master通信端口外,还要确认服务器安全组/防火墙同时开放了8080(Master WebUI端口)、worker节点的通信端口范围(默认是1024-65535,也可在Spark配置中指定固定端口段) - 检查Spark Master节点的
spark-env.sh配置,确认SPARK_MASTER_HOST参数绑定的是你访问的公网/内网IP,而非127.0.0.1,若绑定回环地址,外部机器无法连接
2. 版本一致性校验
- 必须保证本地安装的PySpark版本和服务器上部署的Spark集群版本完全一致,大版本小版本都不能有差异,版本不匹配是Py4J报错和空指针异常的最常见诱因
- 同时校验本地Java版本和服务器集群的Java版本一致性,推荐统一使用JDK8或者JDK11,避免版本兼容问题
3. Spark配置修正
- 你给出的两种代码写法本身无语法问题,第一种写法注意要提前导入
SparkSession,修正后的完整写法参考:
from pyspark import SparkContext, SparkConf from pyspark.sql import SparkSession conf = SparkConf().setAppName('SparkApp').setMaster('spark://X.X.X.123:7077') sc = SparkContext(conf=conf) spark = SparkSession(sc)
- 如果还是连接失败,可以在构造SparkConf时增加配置,指定Driver的可访问IP,避免Spark默认绑定回环地址导致Master回调Driver失败:
conf = SparkConf().setAppName('SparkApp')\ .setMaster('spark://X.X.X.123:7077')\ .set('spark.driver.host', '你本地机器的可被Spark集群访问的IP地址')
4. 非核心告警忽略
你看到的Unable to load native-hadoop library告警属于非核心警告,不影响Spark基础运行,不需要特殊处理,解决连接问题后即可正常执行任务。
内容的提问来源于stack exchange,提问作者Patrick Amaral
相关产品推荐
相关产品推荐

