石小疯 发表于 2024-7-13 09:58:45

Flink: Could not find any factory for identifier kafka/jdbc/hive imple

运行 Flink 应用或执行 Flink SQL 时会经常碰到下面的错误:
   org.apache.flink.table.api.ValidationException: Could not find any factory for identifier ‘???’ that implements ‘org.apache.flink.table.factories.DynamicTableFactory’ in the classpath.
其中 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/目次下添加一个与接口类同名的文件,并

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Flink: Could not find any factory for identifier kafka/jdbc/hive imple