Chunjun的版本兼容可能会有问题,在我们了解了自定义插件后,在修改源码以应对不同的场景就会得心应手了,针对Chunjun1.12.Release版本说明cuiyaonan2000@163.com
从数据流的角度来看ChunJun,可以理解为不同数据源的数据流通过对应的ChunJun插件处理,变成符合ChunJun数据规范的数据流;脏数据的处理可以理解为脏水流通过污水处理厂,变成符合标准,可以使用的水流,而对不能处理的水流收集起来。----总的来说跟Flink的数据处理一样,只是增加了一个插件的概念用于处理不同的数据源,并生成对应的Flink任务cuiyaonan2000@163.com
插件开发不需要关注任务具体如何调度,只需要关注关键问题:
每个插件应当有以下目录:
以Stream插件为例子,他的插件结构如下图所示:
在chunjun-local-test模块中,官方已经写好了本地测试的LocalTest类,只需更改脚本文件路径,在代码处打上断点即可调试。
如果需要远程调试,那么需要在 flink-conf.yaml 中增加 Flink 的远程调试配置,然后在 idea 中配置”JVM Remote“,在代码块中打断点(这种方法还能调试 Flink 本身的代码)
env.java.opts.jobmanager: -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 env.java.opts.taskmanager: -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5006
只需要修改标记的这两个地方,如果是 HA 集群,需要根据日志修改怎么看日志,怎么修改,自行查资料。
至此,任务 idea 调试流程就这些内容。
从Chunjun的配置文件Json中可以看到任务的分类
以Stream插件为例
插件数据源读取逻辑需要继承BaseRichInputFormat类,BaseRichInputFormat是具体的输入数据的操作,包括open、nextRecord、close,每个插件具体操作自己的数据,InputFormat公共内容都在BaseRichInputFormat,不要随意修改。
创建StreamInputFormat类继承BaseRichInputFormat类,重写其中的必要方法。
- public class StreamInputFormat extends BaseRichInputFormat {
- //创建数据分片
- @Override
- public InputSplit[] createInputSplitsInternal(int minNumSplits) {......}
- //打开数据连接
- @Override
- public void openInternal(InputSplit inputSplit) {......}
- //读取一条数据
- @Override
- public RowData nextRecordInternal(RowData rowData) throws ReadRecordException {......}
- //判断数据是否读取完毕
- @Override
- public boolean reachedEnd() {......}
- //关闭数据连接
- @Override
- protected void closeInternal() {......}
- }
由此可见StreamInputFormat 具体的实施类,但是在调用实现类的方法前还有引导类的创建,具体流程是:StreamSourceFactory-->StreamInputFormatBuilder-->StreamInputFormat 中间会引用StreamConf和StreamColumnConverter 至此一个source就完成了cuiyaonan2000@163.com
1 com.dtstack.chunjun.Main是启动类,首先判断是计算任务,还是同步任务
2 以exeSyncJob为例进入可以看到,这里就是根据我们传入的Json文件内容生成环境变量
3 .将上面解析生成的SyncConf,然后通过反射加载具体的插件调用createSource方法生成DataStream, 注意这里就是重点了根据 我们的json文件的内容,来获取StreamSourceFactory ,然后创建的数据内容是DataStream----从这里开始就是重点了
4 createSource方法中会构建inputformat对象,然后调用createInput方法,将inputformat对象封装至DtInputFormatSourceFunction中。
未完待续~~~