背景
今天同事找我帮忙看一个 Flink 的问题,现象是前几天还能提交的客户端,就在今天突然提交不了作业了,报错提示大概如下(公司的东西涉密)
Caused by: org.apache.flink.api.common.InvalidProgramException: The LocalStreamEnvironment cannot be used when submitting a program through a client, or running in a TestEnvironment context.
at org.apache.flink.streaming.api.environment.LocalStreamEnvironment.(LocalStreamEnvironment.java:68)
at org.apache.flink.streaming.api.environment.LocalStreamEnvironment.(LocalStreamEnvironment.java:58)
at org.apache.flink.streaming.api.environment.StreamExecutionEnvironment.createLocalEnvironment(StreamExecutionEnvironment.java:1626)
at org.apache.flink.streaming.api.environment.StreamExecutionEnvironment.createLocalEnvironment(StreamExecutionEnvironment.java:1612)
问题定位思路
由于我个人的 Flink 源码还不是很熟悉,于是拿到这个报错我的第一反应是不是哪个配置项配置错了,于是就问同事,是不是最近有什么变更,得到的答案是没有。
既然这样只能开始定位了,我想着既然配置错了走了 LocalStreamEnvironment 这个分支,那这个配置项的值或者 value 里面一定会存在相关的关键字的。于是,我就在 Flink 的配置文件 flink-con.yml
里面找了一遍,发现没有相关配置,那就说明不是配置项的问题(来来回回检查了好几次)。
找不到和哪个配置项有关,那怎么办呢?
没办法只能对着同事给我的堆栈,和我的 Flink 源码看一下了,于是就开始了找代码的旅程。在找代码的时候发现堆栈里面的代码行数和我代码里面的不一致。我就像我是不是看错代码分支了。经过的我的层层确认,发现我没意拿错代码,于是我就找了我们 maven 仓库里面的哪个 jar 包,反编译看了下,结果代码仓库里面的 jar 反编译的代码行数和我代码仓里面的能对的上。
定位到这儿,就想着是不是环境上的包会不会有问题呢?于是就去 Flink 客户端目录的 lib 下面看了一眼,发现有个 flink-streaming-java
的包的版本不是我们部门给出去的版本,我就想到 flink 一般所有的依赖的 class 都会在 flink-dist
这个胖包里面,会不会和外面这个不是我们部门给出去的包有关系呢?
于是就让同事把这个未知的包移动到其他地方去。重试了一把,作业可以正常提交了。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于