在遵循 documentation sites 上的 Apache Flink 初学者 Java 教程之后我想尝试对自己的数据进行一些转换。但是,我无法从网络服务器上运行的 Microsoft SQL 数据库收集输入。
关于 possible sources for DataSets 部分中的示例包含一个看起来像我需要的部分,其中使用 env.createInput(...) 和 JDBCInputFormat 构建数据集。所以我添加了 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,一列包含字符串值,另一列包含整数。
运行程序时,我收到一个引用所选驱动程序的ClassNotFoundException:未找到 JDBC-Class。 - org.apache.derby.jdbc.EmbeddedDriver 位于 org.apache.flink.api.java.io.jdbc.JDBCInputFormat.open
现在,我似乎在这里缺少一些导入,但我无法弄清楚哪些导入(以及在哪里获取它们),因为我期望 Flink JDBC 支持这个最小的示例。 JDBCInputFormat Javadoc 中也给出了相同的驱动程序名称。我尝试手动添加 JDBC 4.2,但没有成功。
我需要添加或更改什么才能找到驱动程序?此外,除了 Javadoc 之外,是否还有一些有关 Flink JDBC 及其用法的官方 Material ?我什至很难找到有关 Flink 和 SQL 源代码的教程。
最佳答案
如果要从 Microsoft SQL Server 数据库读取数据,则应使用 SQL Server 的 JDBC 驱动程序,而不是 Apache Derby 的驱动程序。 JDBC 驱动程序通常包含在 DBMS 分发/安装中。也许微软还在网站上提供相应的 JAR 文件下载。
驱动程序必须添加到您的类路径中。有两种选择:1)将其捆绑到您的应用程序 JAR 中,即将其添加到 fat jar 中,或者 2)将其添加到 Apache Flink 的
./lib
文件夹中(注意,它必须添加到集群的所有 Flink 安装。
关于java - 在 Apache Flink 中从 SQL 数据库读取 DataSet 时找不到 JDBC 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40528002/