在他们的文档站点上学习了Apache Flink的初学者Java教程之后,我想在我自己的数据上尝试一些转换。然而,我有麻烦收集输入从我的微软SQL数据库运行在网络中的服务器上。
关于数据集可能来源的部分中的示例包含一个看起来像我需要的部分,其中使用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);
服务器地址、用户名和密码与我的另一个Java程序相同,我只使用JDBC。查询是对两列的简单SELECT,一列包含String值,另一列包含integer。
当运行程序时,我得到一个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源码的教程。
-
如果希望从Microsoft SQL Server数据库读取数据,则应该使用SQL Server的JDBC驱动程序,而不是Apache Derby的JDBC驱动程序。JDBC驱动程序通常包含在DBMS发行版/安装中。也许微软还提供了相应的JAR文件作为网站下载。
-
驱动程序必须添加到你的类路径中。有两种选择:1)将它捆绑在你的应用程序JAR中,也就是说,将它添加到fat JAR中;2)将它添加到Apache Flink的
./lib
文件夹中(注意,它必须添加到集群的所有Flink安装中。