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

标签 java maven jdbc apache-flink

在遵循 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 源代码的教程。

最佳答案

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

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

关于java - 在 Apache Flink 中从 SQL 数据库读取 DataSet 时找不到 JDBC 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40528002/

相关文章:

java - 为什么以下代码会返回错误消息 The type Person is already Defined.类(class)人员有什么问题?

java - 在两个不同的集合中为一个元素保留了多少个实例?

java - 无效的 ISO 8583 header

maven - Tomcat/TomEE 丢失对 catalina.sh 和 server.xml 的更改

maven - 如何让 maven-site-plugin 解析我的多模块 Maven 项目的父 pom.xml?

java - Android - 如何将接口(interface)传递给AsyncTask

java - 使用 Maven 编译 Java 代码时出现 ArrayIndexOutOfBoundsException

java - 创建格式为 "yyyy-mm-dd"的变量 Date

java - 在 JDBC 批处理作业中使用多线程

java - 无法打开 JPA EntityManager 进行事务 [...] 无法为驱动程序类 "null"和 URL "null"获取连接