回复: flink 如何自定义connector
Hi, 在sql-gateway里面,类加载默认是子类优先,每次提交任务都是独立的tableEnvironment,独立的classloader,因此不存在这个问题。 Best, Xinghalo
回复: flink 如何自定义connector
可能的确会存在这个问题。在添加依赖时注意不要将 flink provided 的包打包进去就可以。也可以通过设置 parent-first 来解决这个问题。 在2020年05月28日 11:03,forideal 写道: Hi 111, 关于第二点: `2 配置FLINK_HOME环境变量,自定义的connector放在FLINK_HOME/lib下` 这么做是不是存在如下 `X can't be cast to X ` 隐患 因为把 Connector 放在 lib 中,会有 classloader 的问题,直接的现象就是 X can't be cast to X 问题[1]。当然这只是说可能会发生。比如,我们把 usercode 代码放入 Flink lib 我们会发现,当我们使用 jar 包上传的方式运行任务时,jar 中也包含 lib 中的代码会触发这样的问题。 [1] https://ci.apache.org/projects/flink/flink-docs-release-1.10/monitoring/debugging_classloading.html#x-cannot-be-cast-to-x-exceptions Best forideal 在 2020-05-28 10:16:45,"111" 写道: Hi, 想要在sqlgateway里面使用,那么可以看看下面几个条件: 1 满足SPI的要求,能让flink自动发现实现类 2 配置FLINK_HOME环境变量,自定义的connector放在FLINK_HOME/lib下 3 如果与Hive集成,使用hivecatalog,那么先要注册表 这样就可以使用了。 Best, Xinghalo
Re:回复: flink 如何自定义connector
Hi 111, 关于第二点: `2 配置FLINK_HOME环境变量,自定义的connector放在FLINK_HOME/lib下` 这么做是不是存在如下 `X can't be cast to X ` 隐患 因为把 Connector 放在 lib 中,会有 classloader 的问题,直接的现象就是 X can't be cast to X 问题[1]。当然这只是说可能会发生。比如,我们把 usercode 代码放入 Flink lib 我们会发现,当我们使用 jar 包上传的方式运行任务时,jar 中也包含 lib 中的代码会触发这样的问题。 [1] https://ci.apache.org/projects/flink/flink-docs-release-1.10/monitoring/debugging_classloading.html#x-cannot-be-cast-to-x-exceptions Best forideal 在 2020-05-28 10:16:45,"111" 写道: >Hi, >想要在sqlgateway里面使用,那么可以看看下面几个条件: >1 满足SPI的要求,能让flink自动发现实现类 >2 配置FLINK_HOME环境变量,自定义的connector放在FLINK_HOME/lib下 >3 如果与Hive集成,使用hivecatalog,那么先要注册表 >这样就可以使用了。 >Best, >Xinghalo
回复: flink 如何自定义connector
Hi, 想要在sqlgateway里面使用,那么可以看看下面几个条件: 1 满足SPI的要求,能让flink自动发现实现类 2 配置FLINK_HOME环境变量,自定义的connector放在FLINK_HOME/lib下 3 如果与Hive集成,使用hivecatalog,那么先要注册表 这样就可以使用了。 Best, Xinghalo
回复: flink 如何自定义connector
Hi, 随便开一个jdbc connector之类的,模仿造一个就行: 1 需要有Service loader的描述符文件:resources下面需要有META-INFO.services,里面有TableFactory的实现类声明 2 创建对应的TableFactory实现类,根据source sink实现不同的接口,返回对应的TableSource或者TableSink 3 如果是TableSource,根据剪枝、lookup等特性实现不同的接口 4 如果是TableSink,根据upsert、append、retract实现不同的接口 总之,开一个connector源码,抄一下就行。 Best, Xinghalo