Apache Flink:如何创建并行 JDBC InputFormat?
Apache Flink: How can I create a parallel JDBC InputFormat?
有一个名为 flink-jdbc
的模块,它只支持基于 JDBC InputFormat
的非并行元组类型。
为了对 JDBC
使用并行 InputFormat
,似乎需要通过实现接口来自定义:org.apache.flink.core.io.InputSplit
.
所以在我的例子中,我如何自定义实现 JdbcInputSplit
以从数据库并行查询数据?
Apache Flink 不提供并行 JDBC InputFormat。所以你需要自己实现一个。您可以使用 non-parallel JDBC InputFormat 作为起点。
为了并行查询数据库,您需要将查询拆分为多个查询,覆盖结果集的 non-overlapping(最好是 equally-sized)部分。这些较小的查询中的每一个都将包装在 InputSplit 中并传递给输入格式的并行实例。
拆分查询是具有挑战性的部分,因为它取决于查询和数据。所以你需要一些元信息来提出好的拆分。您可能希望将此委托给输入格式的用户,并请求一组查询而不是单个查询。您还应该检查查询的数据库是否比单个查询更好地处理并行请求。
有一个名为 flink-jdbc
的模块,它只支持基于 JDBC InputFormat
的非并行元组类型。
为了对 JDBC
使用并行 InputFormat
,似乎需要通过实现接口来自定义:org.apache.flink.core.io.InputSplit
.
所以在我的例子中,我如何自定义实现 JdbcInputSplit
以从数据库并行查询数据?
Apache Flink 不提供并行 JDBC InputFormat。所以你需要自己实现一个。您可以使用 non-parallel JDBC InputFormat 作为起点。
为了并行查询数据库,您需要将查询拆分为多个查询,覆盖结果集的 non-overlapping(最好是 equally-sized)部分。这些较小的查询中的每一个都将包装在 InputSplit 中并传递给输入格式的并行实例。
拆分查询是具有挑战性的部分,因为它取决于查询和数据。所以你需要一些元信息来提出好的拆分。您可能希望将此委托给输入格式的用户,并请求一组查询而不是单个查询。您还应该检查查询的数据库是否比单个查询更好地处理并行请求。