pyspark 与 MariaDB 的连接失败并出现 ClassNotFoundException
Posted
技术标签:
【中文标题】pyspark 与 MariaDB 的连接失败并出现 ClassNotFoundException【英文标题】:pyspark connection to MariaDB fails with ClassNotFoundException 【发布时间】:2021-12-30 08:26:07 【问题描述】:我正在尝试使用 pyspark 从 MariaDB 检索数据。
我使用配置创建了 spark_session 以包含 jdbc jar 文件,但无法解决问题。当前创建会话的代码如下所示。
path = "hdfs://nameservice1/user/PATH/TO/JDBC/mariadb-java-client-2.7.1.jar"
# or path = "/home/PATH/TO/JDBC/mariadb-java-client-2.7.1.jar"
spark = SparkSession.config("spark.jars", path)\
.config("spark.driver.extraClassPath", path)\
.config("spark.executor.extraClassPath", path)\
.enableHiveSupport()
.getOrCreate()
请注意,我已经尝试了所有我知道的配置案例 (检查权限,更改 hdfs 或本地目录,添加或删除配置...)
然后,加载数据的代码是。
sql = "SOME_SQL_TO_RETRIEVE_DATA"
spark = spark.read.format('jdbc').option('dbtable', sql)
.option('url', 'jdbc:mariadb://host:port/db')\
.option("user", SOME_USER)
.option("password", SOME_PASSWORD)
.option("driver", 'org.mariadb.jdbc.Driver')
.load()
但是 java.lang.ClassNotFoundException: org.mariadb.jdbc.Driver
失败
当我使用spark-submit
尝试此操作时,我看到了日志消息。
... INFO SparkContext: Added Jar /PATH/TO/JDBC/mariadb-java-client-2.7.1.jar at spark://SOME_PATH/jars/mariadb-java-client-2.7.1.jar with timestamp SOME_TIMESTAMP
怎么了?
【问题讨论】:
【参考方案1】:对于遇到同样问题的人。
我想通了。 Spark Document 这么说
注意: 在客户端模式下,这个配置不能通过 SparkConf 直接在你的应用程序中设置,因为此时驱动程序 JVM 已经启动。相反,请通过 --driver-class-path 命令行选项或在您的默认属性文件中进行设置。
因此,我在spark-submit
上添加了this document 之后的参数,而不是在python 代码上设置配置。
spark-submit other arguments ... \
--driver-class-path PATH/TO/JDBC/my-jdbc.jar \
--jars PATH/TO/JDBC/my-jdbc.jar \
MY_PYTHON_SCRIPT.py
【讨论】:
以上是关于pyspark 与 MariaDB 的连接失败并出现 ClassNotFoundException的主要内容,如果未能解决你的问题,请参考以下文章
从 PySpark 3.1.2 连接 Oracle DB - Py4JJavaError 失败
使用 PySpark 从 MariaDB 读取查询 [重复]