Java 在Apache Flink中从SQL数据库读取数据集时,找不到JDBC驱动程序

Java 在Apache Flink中从SQL数据库读取数据集时,找不到JDBC驱动程序,java,maven,jdbc,apache-flink,Java,Maven,Jdbc,Apache Flink,在学习了ApacheFlink的Java入门教程之后,我想尝试对自己的数据进行一些转换。但是,我在收集网络服务器上运行的Microsoft SQL数据库的输入时遇到问题 关于一节中的示例包含一个类似于我所需要的部分,其中数据集是使用带有JDBCInputFormat的env.createInput(…)构建的。因此,我为Flink JDBC添加了Maven依赖项 <dependency> <groupId>org.apache.flink</groupId&

在学习了ApacheFlink的Java入门教程之后,我想尝试对自己的数据进行一些转换。但是,我在收集网络服务器上运行的Microsoft SQL数据库的输入时遇到问题

关于一节中的示例包含一个类似于我所需要的部分,其中数据集是使用带有JDBCInputFormat的env.createInput(…)构建的。因此,我为Flink JDBC添加了Maven依赖项

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

org.apache.flink
flink-jdbc_2.11
0.10.2
并将给定的代码重新建模以适合我自己的数据库,如下所示:

// 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);
//创建和配置输入格式
JDBCInputFormat inputFormat=JDBCInputFormat.buildJDBCInputFormat()
.setDrivername(“org.apache.derby.jdbc.EmbeddedDriver”)
.setDBUrl(sqlserver)
.setUsername(用户名)
.setPassword(密码)
.setQuery(查询)
.finish();
//创建和配置数据集的类型信息
TupleTypeInfo typeInformation=新的TupleTypeInfo(Tuple2.class,STRING\u TYPE\u INFO,INT\u TYPE\u INFO);
//使用JDBC输入格式从关系数据库读取数据
DataSet dbData=environment.createInput(inputFormat,typeInformation);
服务器地址、用户名和密码与我的另一个Java程序相同,我只使用JDBC。查询是对两列的简单选择,一列包含字符串值,另一列包含整数

当运行程序时,我得到一个ClassNotFoundException引用所选驱动程序:
JDBC类未找到。-org.apache.derby.jdbc.EmbeddedDriver位于org.apache.flink.api.java.io.jdbc.jdbInputFormat.open

现在,我似乎缺少了一些导入,但我不知道是哪一个(以及从哪里获得),因为我希望Flink JDBC支持这个最小的示例。JDBCInputFormat Javadoc中也给出了相同的驱动程序名称。我尝试手动添加JDBC4.2,但没有成功

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

  • 如果要从MicrosoftSQLServer数据库中读取数据,应该使用用于SQLServer的JDBC驱动程序,而不是用于ApacheDerby的驱动程序。JDBC驱动程序通常包含在DBMS分发/安装中。也许微软也会在网站上提供相应的JAR文件作为下载

  • 必须将驱动程序添加到类路径中。有两个选项:1)将其捆绑到应用程序JAR中,即,将其添加到fat JAR中;或2)将其添加到Apache Flink的
    /lib
    文件夹中(注意,必须将其添加到集群的所有Flink安装中)


  • 在一个问题中只允许两个链接,这里是JDBCInputFormat Javadoc:我认为Derby数据库及其驱动程序自JDK 1.7以来就是JVM的一部分。这意味着它在类路径中,不需要任何额外的努力。不是真的吗?感谢您的回答!我已经尝试通过Microsoft手动添加JDBC 4.2 jar文件来实现这一点,但使用了错误的URL(
    com.microsoft.jdbc.sqlserver.SQLServerDriver
    ,而不是
    com.microsoft.sqlserver.jdbc.SQLServerDriver
    ),因此得到了相同的ClassNotFound结果。因为Derby服务器几乎包含了我能找到的所有示例(按照@duffymo所说的,我的JVM应该知道它),我认为这必须是某种标准方法,错误意味着更一般的东西。但是,它使用正确的字符串。对于未来的搜索者:Microsoft JDBC包,包括访问数据库所需的驱动程序,可以在Flink上下载。它只在测试范围内添加Apache Derby依赖项。它不是为flink jdbc依赖项。