Spark 到 JDBC:Py4JJavaError - 连接已启动,但没有一个提供者

Posted

技术标签:

【中文标题】Spark 到 JDBC:Py4JJavaError - 连接已启动,但没有一个提供者【英文标题】:Spark to JDBC: Py4JJavaError - Connection initiated but no exactly one provider 【发布时间】:2021-03-24 19:13:44 【问题描述】:

我正在解决通过 JDBC 连接使用 Kerberos 身份验证在 PySpark 中写入数据帧时收到的错误,该连接使用 keytab 和数据库属性参数中的主体。

使用 Kerberos 凭据通过 JDBC 成功启动连接,因为我没有收到告诉 GSS 启动失败的错误,但我得到:

Illegal Argument Exception: requirement failed: JDBC connection     initiated but not exactly one provider found which can handle it. Found        active providers:

我运行的代码是:

df_spark.write.jdbc(url=db_props[‘url’], table=‘schema.table’,   mode=‘overwrite’, properties=db_props)

经过仔细检查,非法参数异常是一个 Py4JJavaError,源自 py4j 中的 java_gateway.py 模块。我找不到有关该错误的更多信息。如果有人看到或知道发生了什么,感谢您的帮助!

【问题讨论】:

这些“活跃的提供者”是什么?也许您的 CLASSPATH 中有 几个 JDBC 驱动程序,或者其他什么。 【参考方案1】:

这是一个笼统的问题,所以这是一个笼统的答案:

不错,但是旧文章:https://datamountaineer.com/2016/01/15/spark-jdbc-sql-server-kerberos/ 用于 Spark 3.1 - https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html 甚至是关于 JDBC 中 Kerberos 的拉取请求:https://github.com/apache/spark/pull/24421

请尝试学习一些东西,尝试一些东西,然后提出更具体的问题。

【讨论】:

感谢您的帮助。我能够通过将 keytab 和 principal 添加到 .write.JDBC 的 db 属性参数来启动 GSS。但是,我现在得到一个 IllegalArgumentException:要求失败:JDBC 连接已启动,但未找到一个连接提供程序。找到提供者:” 不错!您可以将这些行添加到带有代码和错误的原始问题中。它将创建一个适合 *** 的好问题。希望有人能回答

以上是关于Spark 到 JDBC:Py4JJavaError - 连接已启动,但没有一个提供者的主要内容,如果未能解决你的问题,请参考以下文章

通过 JDBC 将数组从 spark 数据帧输入到 postgreSQL

使用 Dataframes 从 Informix 到 Spark 的 JDBC

无法在 ipython 中正确创建 spark 上下文以链接到 MySQL - com.mysql.jdbc.Driver

Spark 到 JDBC:Py4JJavaError - 连接已启动,但没有一个提供者

将 Spark 与 Flask 与 JDBC 一起使用

spark - jdbc升级版数据源