创建SparkSession时遇RuntimeError:Java网关进程未发送端口号
验证Jar包路径有效性
把相对路径./clickhouse-native-jdbc-shaded-2.6.5.jar替换为绝对路径(比如/home/user/project/clickhouse-native-jdbc-shaded-2.6.5.jar),避免脚本运行工作目录与预期不符导致找不到文件。同时确认该路径下的Jar包确实存在,且当前用户有读取权限。查看Java网关详细日志
在创建SparkSession前添加以下代码开启调试日志:import os os.environ['PYSPARK_DEBUG'] = '1'运行脚本后查看控制台输出的Java进程启动日志,或者到
SPARK_HOME/logs目录下查找对应日志文件,日志中会包含Java进程退出的具体原因(如依赖冲突、Jar包损坏、类加载失败等)。检查Spark与Java版本兼容性
确认Spark版本与JAVA_HOME对应的Java版本匹配:Spark 3.x支持Java 8/11,Spark 2.x支持Java 7/8。若使用了不兼容的Java版本(如Spark 3.x搭配Java 17),会导致Java网关启动失败。简化Jar包加载方式
避免同时使用spark.driver.extraClassPath和PYSPARK_SUBMIT_ARGS的--jars参数,二者选其一测试:
方式1:仅用builder配置spark = SparkSession.builder \ .master('local[1]') \ .appName('recommendation_engine') \ .config('spark.driver.extraClassPath', '/绝对路径/clickhouse-native-jdbc-shaded-2.6.5.jar') \ .getOrCreate()方式2:仅用PYSPARK_SUBMIT_ARGS
import os os.environ['PYSPARK_SUBMIT_ARGS'] = "--jars /绝对路径/clickhouse-native-jdbc-shaded-2.6.5.jar pyspark-shell" spark = SparkSession.builder \ .master('local[1]') \ .appName('recommendation_engine') \ .getOrCreate()注意:
PYSPARK_SUBMIT_ARGS末尾需要加上pyspark-shell,否则可能导致参数解析错误。校验Jar包完整性
重新下载clickhouse-native-jdbc-shaded-2.6.5.jar,对比官方提供的MD5/SHA校验值,确保Jar包未损坏。损坏的Jar包会导致Java进程加载时抛出异常并退出。排除Jar包干扰
暂时注释掉所有与ClickHouse Jar包相关的配置,创建一个最简SparkSession:spark = SparkSession.builder \ .master('local[1]') \ .appName('test') \ .getOrCreate()如果能正常创建,说明问题出在ClickHouse Jar包或其配置上;如果仍报错,则排查Spark基础环境(如SPARK_HOME配置是否正确、Spark安装包是否完整)。
检查临时目录权限
Spark启动时会使用系统临时目录(如/tmp),确认当前用户对该目录有读写权限。权限不足会导致Java网关无法创建临时文件而退出。
内容的提问来源于stack exchange,提问作者Fitzpatrick

