Google云数据流中的Google JDBC驱动程序的ClassNotFoundException

时间:2017-09-27 13:10:07

标签: java mysql jdbc google-cloud-platform google-cloud-dataproc

我正在尝试从谷歌云数据流上运行的作业连接到谷歌云sql。我没有授权从外部网络访问云sql实例。由于我的dataproc集群与cloud sql在同一个项目中,我希望它允许连接。

我已按照文档连接到云sql(https://cloud.google.com/appengine/docs/standard/java/cloud-sql/)。但是这个文档是用于从GAE连接到云sql。不过我尝试了这些步骤。但似乎com.mysql.jdbc.GoogleDriver在数据处理环境中不可用。因此我得到ClassNotFoundException这个班。

我在哪里可以获得此套餐。我将它包含在uber jar中并尝试在dataproc集群中运行。

2 个答案:

答案 0 :(得分:0)

执行some reading后,听起来GoogleDriver仅在AppEngine应用程序的上下文中可用。在AppEngine之外,使用模式略有不同。从第一个链接:

String jdbcUrl = String.format(
    "jdbc:mysql://google/%s?cloudSqlInstance=%s&"
        + "socketFactory=com.google.cloud.sql.mysql.SocketFactory",
    databaseName,
    instanceConnectionName);

Connection connection = DriverManager.getConnection(jdbcUrl, username, password);

答案 1 :(得分:0)

要解决此问题,您需要将带有JDBC驱动程序的jar添加到Spark Driver类路径:https://spark.apache.org/docs/latest/sql-programming-guide.html#jdbc-to-other-databases

为此,您需要将此jar上传到GCS,在--jars参数中指定它的路径(因此Dataproc会将其分发到群集中的所有节点)并使用{{将它添加到Spark Driver类路径通过Dataproc提交Spark作业时的参数:

--properties