从Apache Flink中的SQL数据库读取DataSet时找不到JDBC驱动程序

时间:2016-11-10 12:46:34

标签: java maven jdbc apache-flink

在他们的documentation sites上关注Apache Flink的初学者Java教程之后,我想尝试对我自己的数据进行一些转换。但是,我在从网络服务器上运行的 Microsoft SQL数据库收集输入时遇到问题。

关于possible sources for DataSets的部分中的示例包含一个看起来像我需要的部分,其中使用带有JDBCInputFormat的env.createInput(...)构建DataSet。所以我为Flink JDBC添加了Maven依赖

<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-jdbc_2.11</artifactId>
    <version>0.10.2</version>
</dependency>

并重新编码给定的代码以适合我自己的数据库,如下所示:

// create and configure input format
JDBCInputFormat inputFormat = JDBCInputFormat.buildJDBCInputFormat()
    .setDrivername("org.apache.derby.jdbc.EmbeddedDriver")
    .setDBUrl(sqlserver)
    .setUsername(username)
    .setPassword(password)
    .setQuery(query)
    .finish();

// create and configure type information for DataSet
TupleTypeInfo typeInformation = new TupleTypeInfo(Tuple2.class, STRING_TYPE_INFO, INT_TYPE_INFO);

// Read data from a relational database using the JDBC input format
DataSet<Tuple2<String, Integer>> dbData = environment.createInput(inputFormat, typeInformation);

服务器地址,用户名和密码与我使用JDBC的另一个Java程序相同。查询是两列上的简单SELECT,一列包含String值,另一列包含其他整数。

运行程序时,我得到一个 ClassNotFoundException ,引用所选的驱动程序:JDBC-Class not found. - org.apache.derby.jdbc.EmbeddedDriver at org.apache.flink.api.java.io.jdbc.JDBCInputFormat.open

现在,我似乎在这里缺少一些导入,但我无法弄清楚哪些(以及在哪里获得它们),因为我期望Flink JDBC支持这个最小的例子。 JDBCInputFormat Javadoc中也给出了相同的驱动程序名称。我尝试手动添加JDBC 4.2,但是没有用。

我需要添加或更改哪些内容才能找到驱动程序?此外,除了Javadoc之外,还有一些关于Flink JDBC及其用法的官方资料吗?我甚至很难找到有关Flink和SQL源代码的教程。

1 个答案:

答案 0 :(得分:1)

  1. 如果要从Microsoft SQL Server数据库中读取数据,则应使用SQL Server的JDBC驱动程序,而不是Apache Derby的JDBC驱动程序。 JDBC驱动程序通常包含在DBMS分发/安装中。也许Microsoft还在网站上提供相应的JAR文件作为下载。

  2. 必须将驱动程序添加到类路径中。有两种选择:1)将它捆绑在你的应用程序JAR中,即将它包含在fat jar中或2)将其添加到Apache Flink的./lib文件夹中(注意,它必须添加到所有文件夹中)群集的Flink安装。