Flink: Could not find any factory for identifier kafka/jdbc/hive implements DynamicTableFactory 根治方法
运行 Flink 应用或执行 Flink SQL 时会经常遇到下面的错误:org.apache.flink.table.api.ValidationException: Could not find any factory for identifier kafka jdbc hive hudi mysql-cdc that implements ‘org.apache.flink.table.factories.DynamicTableFactory’ in the classpath.
运行 flink 应用或执行 flink sql 时会经常遇到下面的错误:
其中 identifier 可以是 kafka, jdbc, hive, hudi 等等,并且这一问题往往有伴随着一种很“诡异”的表现:
- 如果程序打包成 uber-jar,所有相关 connector jar 包的 class 都在里面,此问题一定会出现
- 如果单独将相关 connector 的 jar 包部署到
${flink_home}/lib
目录下,问题就不会出现
导致这一问题的根源并非相关 connector 的 jar 包没有添加到程序依赖中,或者在打成 uber-jar 的过程中丢失了 class 文件,而是因为一个更隐秘的原因:java 的 service provider interface (spi)机制。
在 flink 的 table api & sql 框架下,各类 connector 和 format 需要提供 org.apache.flink.table.factories.dynamictablefactory
这一接口的具体实现,从而把自己“注册”或者说“嵌入”到 flink 运行环境中,而这需要在生成的 jar 包中往 meta-inf/services/
目录下添加一个与接口类同名的文件,并
相关文章:
-
-
Prompt Builder是Salesforce中的一项新功能,是增强客户参与度和销售额的强大工具,也将在Spring‘24中发布,允许创建Prompt来生成个性化内容。…
-
本文通过案例方式详解-Flink-Checkpoint机制。…
-
我们平常开发的Java应用系统时没有状态的。Stom的实现方式。微服务架构将系统拆解成不同的独立服务模块,每个模块分别使用各自独立的数据库,这种模式解决了业务系统拓展的问题,但是也…
-
-
交叉编译是一种将软件在操作系统上进行编译,但在另一种不同的操作系统或架构上运行的技术。本文将使用Ubuntu作为主机操作系统,并将OpenCV编译为在另一个目标平台上运行的库。经过…
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论