在 Spark 中找不到适合 jdbc 的驱动程序
No suitable driver found for jdbc in Spark
我正在使用
df.write.mode("append").jdbc("jdbc:mysql://ip:port/database", "table_name", properties)
插入到 MySQL 中的 table。
此外,我在我的代码中添加了 Class.forName("com.mysql.jdbc.Driver")
。
当我提交 Spark 申请时:
spark-submit --class MY_MAIN_CLASS
--master yarn-client
--jars /path/to/mysql-connector-java-5.0.8-bin.jar
--driver-class-path /path/to/mysql-connector-java-5.0.8-bin.jar
MY_APPLICATION.jar
这个 yarn-client 模式适合我。
但是当我使用 yarn-cluster 模式时:
spark-submit --class MY_MAIN_CLASS
--master yarn-cluster
--jars /path/to/mysql-connector-java-5.0.8-bin.jar
--driver-class-path /path/to/mysql-connector-java-5.0.8-bin.jar
MY_APPLICATION.jar
没用。我也尝试设置“--conf”:
spark-submit --class MY_MAIN_CLASS
--master yarn-cluster
--jars /path/to/mysql-connector-java-5.0.8-bin.jar
--driver-class-path /path/to/mysql-connector-java-5.0.8-bin.jar
--conf spark.executor.extraClassPath=/path/to/mysql-connector-java-5.0.8-bin.jar
MY_APPLICATION.jar
但仍然出现 "No suitable driver found for jdbc" 错误。
有 3 种可能的解决方案,
- 您可能希望使用构建管理器(Maven、SBT)组装您的应用程序,因此您不需要在
spark-submit
cli 中添加依赖项。
您可以在 spark-submit
cli 中使用以下选项:
--jars $(echo ./lib/*.jar | tr ' ' ',')
解释: 假设您的所有 jar 都在项目根目录中的 lib
目录中,这将读取所有库并将它们添加到应用程序提交.
您也可以尝试在 SPARK_HOME/conf/spark-default.conf
文件中配置这两个变量:spark.driver.extraClassPath
和 spark.executor.extraClassPath
并将这些变量的值指定为jar 文件。确保工作节点上存在相同的路径。
我尝试了此处显示的建议,但对我不起作用(mysql)。在通过 DriverManager 代码进行调试时,我意识到我需要注册我的驱动程序,因为 "spark-submit" 不会自动发生这种情况。因此我添加了
Driver driver = new Driver();
构造函数向DriverManager注册驱动,解决了我的SQLException问题
我在使用 sparkSession
的 read
函数时必须添加 driver
选项。
.option("driver", "org.postgresql.Driver")
var jdbcDF - sparkSession.read
.option("driver", "org.postgresql.Driver")
.option("url", "jdbc:postgresql://<host>:<port>/<DBName>")
.option("dbtable", "<tableName>")
.option("user", "<user>")
.option("password", "<password>")
.load()
根据您的依赖项的设置方式,您会注意到,当您在 Gradle 中包含类似 compile group: 'org.postgresql', name: 'postgresql', version: '42.2.8'
的内容时,这将在 class 中包含驱动程序 class =16=],这就是您要指示 spark 加载的那个。
我正在使用
df.write.mode("append").jdbc("jdbc:mysql://ip:port/database", "table_name", properties)
插入到 MySQL 中的 table。
此外,我在我的代码中添加了 Class.forName("com.mysql.jdbc.Driver")
。
当我提交 Spark 申请时:
spark-submit --class MY_MAIN_CLASS
--master yarn-client
--jars /path/to/mysql-connector-java-5.0.8-bin.jar
--driver-class-path /path/to/mysql-connector-java-5.0.8-bin.jar
MY_APPLICATION.jar
这个 yarn-client 模式适合我。
但是当我使用 yarn-cluster 模式时:
spark-submit --class MY_MAIN_CLASS
--master yarn-cluster
--jars /path/to/mysql-connector-java-5.0.8-bin.jar
--driver-class-path /path/to/mysql-connector-java-5.0.8-bin.jar
MY_APPLICATION.jar
没用。我也尝试设置“--conf”:
spark-submit --class MY_MAIN_CLASS
--master yarn-cluster
--jars /path/to/mysql-connector-java-5.0.8-bin.jar
--driver-class-path /path/to/mysql-connector-java-5.0.8-bin.jar
--conf spark.executor.extraClassPath=/path/to/mysql-connector-java-5.0.8-bin.jar
MY_APPLICATION.jar
但仍然出现 "No suitable driver found for jdbc" 错误。
有 3 种可能的解决方案,
- 您可能希望使用构建管理器(Maven、SBT)组装您的应用程序,因此您不需要在
spark-submit
cli 中添加依赖项。 您可以在
spark-submit
cli 中使用以下选项:--jars $(echo ./lib/*.jar | tr ' ' ',')
解释: 假设您的所有 jar 都在项目根目录中的
lib
目录中,这将读取所有库并将它们添加到应用程序提交.您也可以尝试在
SPARK_HOME/conf/spark-default.conf
文件中配置这两个变量:spark.driver.extraClassPath
和spark.executor.extraClassPath
并将这些变量的值指定为jar 文件。确保工作节点上存在相同的路径。
我尝试了此处显示的建议,但对我不起作用(mysql)。在通过 DriverManager 代码进行调试时,我意识到我需要注册我的驱动程序,因为 "spark-submit" 不会自动发生这种情况。因此我添加了
Driver driver = new Driver();
构造函数向DriverManager注册驱动,解决了我的SQLException问题
我在使用 sparkSession
的 read
函数时必须添加 driver
选项。
.option("driver", "org.postgresql.Driver")
var jdbcDF - sparkSession.read
.option("driver", "org.postgresql.Driver")
.option("url", "jdbc:postgresql://<host>:<port>/<DBName>")
.option("dbtable", "<tableName>")
.option("user", "<user>")
.option("password", "<password>")
.load()
根据您的依赖项的设置方式,您会注意到,当您在 Gradle 中包含类似 compile group: 'org.postgresql', name: 'postgresql', version: '42.2.8'
的内容时,这将在 class 中包含驱动程序 class =16=],这就是您要指示 spark 加载的那个。