嗨,关于这个话题已经有很多问题了,解决方案始终是:
- 通过SBT程序集包含驱动程序
- 使用 Spark-submit 的选项 --packages即时加载它们
我在这里设置了一个最小的例子:https://github.com/geoHeil/sparkJDBCHowTo,尝试了两种方法,但没有一种方法对我有用。获取java.sql.SQLException: No suitable driver
这是修复:Apache Spark:JDBC连接不起作用添加prop.put("driver", "org.postgresql.Driver")
工作正常。
奇怪的是,连接似乎不稳定,例如,在蜂巢上下文中,它只能工作 1 次中的 2 次。
这很简单。若要连接到外部数据库以将数据检索到 Spark 数据帧中,需要额外的jar
文件。
例如,对于MySQL,JDBC驱动程序是必需的。下载驱动程序包,并在可从群集中的每个节点访问的路径中提取mysql-connector-java-x.yy.zz-bin.jar
。最好是共享文件系统上的路径。例如,对于Pouta虚拟集群,这样的路径将在/shared_data
下,这里我使用/shared_data/thirdparty_jars/
。
通过从终端直接提交 Spark 作业,可以指定–driver-class-path
参数,指向应提供给具有作业的工作人员的额外罐子。但是,这不适用于此方法,因此我们必须在spark-defaults.conf
文件中(通常在/opt/spark/conf
目录中)为前端和工作节点配置这些路径。
放置取决于您使用的服务器的任何jar
:
spark.driver.extraClassPath /"your-path"/mysql-connector-java-5.1.35-bin.jar
spark.executor.extraClassPath /"your-path"/mysql-connector-java-5.1.35-bin.jar