Flink on k8s 中,Jar 任务 avatica-core 依赖和 flink-table jar 冲突问题

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Flink on k8s 中,Jar 任务 avatica-core 依赖和 flink-table jar 冲突问题

LakeShen
Hi 社区,

我现在正在迁移任务到 k8s ,目前版本为 Flink 1.6 版本,k8s 上面作业运行模式为 standalone per job.

现在遇到一个问题,业务方 Flink jar 任务使用了 org.apache.calcite.avatica 依赖,也就是下面依赖:
<dependency>
            <groupId>org.apache.calcite.avatica</groupId>
            <artifactId>avatica-core</artifactId>
            <version>${avatica.version}</version>
        </dependency>

但是这个依赖其实在 flink-table 模块中,也有这个依赖:


由于 flink on k8s  standalone per job 模式,会把 Flink 任务 jar 包放入到 flink 本身的lib 包中,我在任务启动的时候,就会报:
Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.calcite.avatica.ConnectionPropertiesImpl 错误。

按照我的理解,由于 Flink jar 任务包中有 avatica-core 依赖,同时在 flink lib 目录下面,flink-table_2.11-1.6-RELEASE.jar 中也有这个依赖,这两个都在 lib 目录下,然后就出现了类冲突问题。

请问怎么解决这个问题呢,非常期待你的回复。

Best,
LakeShen
 

Reply | Threaded
Open this post in threaded view
|

Re: Flink on k8s 中,Jar 任务 avatica-core 依赖和 flink-table jar 冲突问题

Congxian Qiu
Hi

你的图挂了,如果单纯想解决 jar 包冲突的问题,那么 maven shade plugin[1] 或许对你有用

[1]
https://maven.apache.org/plugins/maven-shade-plugin/examples/class-relocation.html
Best,
Congxian


LakeShen <[hidden email]> 于2020年7月16日周四 下午6:03写道:

> Hi 社区,
>
> 我现在正在迁移任务到 k8s ,目前版本为 Flink 1.6 版本,k8s 上面作业运行模式为 standalone per job.
>
> 现在遇到一个问题,业务方 Flink jar 任务使用了 org.apache.calcite.avatica 依赖,也就是下面依赖:
> <dependency>
>             <groupId>org.apache.calcite.avatica</groupId>
>             <artifactId>avatica-core</artifactId>
>             <version>${avatica.version}</version>
>         </dependency>
>
> 但是这个依赖其实在 flink-table 模块中,也有这个依赖:
> [image: image.png]
>
> 由于 flink on k8s  standalone per job 模式,会把 Flink 任务 jar 包放入到 flink 本身的lib
> 包中,我在任务启动的时候,就会报:
> Caused by: java.lang.NoClassDefFoundError: Could not initialize class
> org.apache.calcite.avatica.ConnectionPropertiesImpl 错误。
>
> 按照我的理解,由于 Flink jar 任务包中有 avatica-core 依赖,同时在 flink lib
> 目录下面,flink-table_2.11-1.6-RELEASE.jar 中也有这个依赖,这两个都在 lib 目录下,然后就出现了类冲突问题。
>
> 请问怎么解决这个问题呢,非常期待你的回复。
>
> Best,
> LakeShen
>
>
>
Reply | Threaded
Open this post in threaded view
|

Re: Flink on k8s 中,Jar 任务 avatica-core 依赖和 flink-table jar 冲突问题

LakeShen
嗯嗯,Congxian,感谢你的回复,我通过 Maven Shaded 解决问题😁。

Congxian Qiu <[hidden email]> 于2020年7月16日周四 下午8:19写道:

> Hi
>
> 你的图挂了,如果单纯想解决 jar 包冲突的问题,那么 maven shade plugin[1] 或许对你有用
>
> [1]
>
> https://maven.apache.org/plugins/maven-shade-plugin/examples/class-relocation.html
> Best,
> Congxian
>
>
> LakeShen <[hidden email]> 于2020年7月16日周四 下午6:03写道:
>
> > Hi 社区,
> >
> > 我现在正在迁移任务到 k8s ,目前版本为 Flink 1.6 版本,k8s 上面作业运行模式为 standalone per job.
> >
> > 现在遇到一个问题,业务方 Flink jar 任务使用了 org.apache.calcite.avatica 依赖,也就是下面依赖:
> > <dependency>
> >             <groupId>org.apache.calcite.avatica</groupId>
> >             <artifactId>avatica-core</artifactId>
> >             <version>${avatica.version}</version>
> >         </dependency>
> >
> > 但是这个依赖其实在 flink-table 模块中,也有这个依赖:
> > [image: image.png]
> >
> > 由于 flink on k8s  standalone per job 模式,会把 Flink 任务 jar 包放入到 flink 本身的lib
> > 包中,我在任务启动的时候,就会报:
> > Caused by: java.lang.NoClassDefFoundError: Could not initialize class
> > org.apache.calcite.avatica.ConnectionPropertiesImpl 错误。
> >
> > 按照我的理解,由于 Flink jar 任务包中有 avatica-core 依赖,同时在 flink lib
> > 目录下面,flink-table_2.11-1.6-RELEASE.jar 中也有这个依赖,这两个都在 lib 目录下,然后就出现了类冲突问题。
> >
> > 请问怎么解决这个问题呢,非常期待你的回复。
> >
> > Best,
> > LakeShen
> >
> >
> >
>
Reply | Threaded
Open this post in threaded view
|

Re: Flink on k8s 中,Jar 任务 avatica-core 依赖和 flink-table jar 冲突问题

Yang Wang
Flink从1.10开始是支持用user classloader来加载用户jar的,包括Standalone perjob
你需要将jar包放到$FLINK_HOME/usrlib目录下,如果放到lib下就会用框架的classloader
来加载


Best,
Yang

LakeShen <[hidden email]> 于2020年7月17日周五 上午10:02写道:

> 嗯嗯,Congxian,感谢你的回复,我通过 Maven Shaded 解决问题😁。
>
> Congxian Qiu <[hidden email]> 于2020年7月16日周四 下午8:19写道:
>
> > Hi
> >
> > 你的图挂了,如果单纯想解决 jar 包冲突的问题,那么 maven shade plugin[1] 或许对你有用
> >
> > [1]
> >
> >
> https://maven.apache.org/plugins/maven-shade-plugin/examples/class-relocation.html
> > Best,
> > Congxian
> >
> >
> > LakeShen <[hidden email]> 于2020年7月16日周四 下午6:03写道:
> >
> > > Hi 社区,
> > >
> > > 我现在正在迁移任务到 k8s ,目前版本为 Flink 1.6 版本,k8s 上面作业运行模式为 standalone per job.
> > >
> > > 现在遇到一个问题,业务方 Flink jar 任务使用了 org.apache.calcite.avatica 依赖,也就是下面依赖:
> > > <dependency>
> > >             <groupId>org.apache.calcite.avatica</groupId>
> > >             <artifactId>avatica-core</artifactId>
> > >             <version>${avatica.version}</version>
> > >         </dependency>
> > >
> > > 但是这个依赖其实在 flink-table 模块中,也有这个依赖:
> > > [image: image.png]
> > >
> > > 由于 flink on k8s  standalone per job 模式,会把 Flink 任务 jar 包放入到 flink
> 本身的lib
> > > 包中,我在任务启动的时候,就会报:
> > > Caused by: java.lang.NoClassDefFoundError: Could not initialize class
> > > org.apache.calcite.avatica.ConnectionPropertiesImpl 错误。
> > >
> > > 按照我的理解,由于 Flink jar 任务包中有 avatica-core 依赖,同时在 flink lib
> > > 目录下面,flink-table_2.11-1.6-RELEASE.jar 中也有这个依赖,这两个都在 lib
> 目录下,然后就出现了类冲突问题。
> > >
> > > 请问怎么解决这个问题呢,非常期待你的回复。
> > >
> > > Best,
> > > LakeShen
> > >
> > >
> > >
> >
>