You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by 周坤 <18...@163.com> on 2023/08/22 09:11:44 UTC

K8s Appliaction模式无法支持flinkjar中Java动态编译?

你好! 
有一个关于flink K8S apllication模式运行的问题需要解答下;

原本又yarn per模式运行的flink需要切换到K8s apllication模式; 




目前公司环境提供了一个通用的基础flink1.13镜像包;  

usrJar:自己实现一个flink任务, 该任务存在使用 javax.tools.JavaCompiler 动态加载数据库的java类,进行动态编译加载运行;

目前在切换运行的时候会报 需要动态编译的类的依赖找不到;


  

需要动态编译的class文件的依赖在 usrJar中都是存在的,但是启动却包找不到依赖的类;
开始以为是 flink类加载机制导致:  classloader.resolve-order: parent-first , 增加该配置也无效;
后来发现将需要编译的类依赖放入到lib, 可以执行通过,但是如此违背了动态编译的初衷;

对此我感到很困惑? 是什么原因导致,期待能有回复。

Re:Re: Re: K8s Appliaction模式无法支持flinkjar中Java动态编译?

Posted by 周坤 <18...@163.com>.
是的    我的任务的jar包里包含动态编译所有依赖的, 任务的jar是通过 k8s  Apllication模式 userJar 方式进行动态加载的;









在 2023-08-30 12:14:18,"孙路昊" <ha...@gmail.com> 写道:
>依赖的jar包,有编译到启动jar包里面吗
>
>周坤 <18...@163.com>于2023年8月30日 周三11:15写道:
>
>>
>> 你好!在K8s模式中,动态编译缺失运行在UserJar中,启动的时候通过RIch算子的Open方法从第三方拉取原始class文件,然后进行动态编译进行缓存内存中,
>> 按照YARN PER模式该方式是没有问题, 但是在K8s
>> Apllication模式,会找不到原始class文件中的依赖,其实在UserJar中有该文件的类依赖的;
>> 目前发现这个依赖类单独打jar包放在在lib目录下在框架运行时就加载才能找到依赖类,但是又不太符合规范;
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> 在 2023-08-24 10:30:20,"Weihua Hu" <hu...@gmail.com> 写道:
>>
>> Hi,
>>
>>
>> 抱歉我对 JavaCompiler 不是非常了解,我想知道这些动态编译是运行在 UserJar 的 main 方法中吗?以及编译的产物是怎么传递给
>> Flink 的?
>>
>>
>> Best,
>> Weihua
>>
>>
>>
>>
>>
>> On Tue, Aug 22, 2023 at 5:12 PM 周坤 <18...@163.com> wrote:
>>
>> 你好!
>> 有一个关于flink K8S apllication模式运行的问题需要解答下;
>>
>> 原本又yarn per模式运行的flink需要切换到K8s apllication模式;
>>
>>
>>
>>
>> 目前公司环境提供了一个通用的基础flink1.13镜像包;
>>
>> usrJar:自己实现一个flink任务, 该任务存在使用 javax.tools.JavaCompiler
>> 动态加载数据库的java类,进行动态编译加载运行;
>>
>> 目前在切换运行的时候会报 需要动态编译的类的依赖找不到;
>>
>>
>>
>>
>> 需要动态编译的class文件的依赖在 usrJar中都是存在的,但是启动却包找不到依赖的类;
>> 开始以为是 flink类加载机制导致:  classloader.resolve-order: parent-first , 增加该配置也无效;
>> 后来发现将需要编译的类依赖放入到lib, 可以执行通过,但是如此违背了动态编译的初衷;
>>
>> 对此我感到很困惑? 是什么原因导致,期待能有回复。
>>

Re: Re: K8s Appliaction模式无法支持flinkjar中Java动态编译?

Posted by 孙路昊 <ha...@gmail.com>.
依赖的jar包,有编译到启动jar包里面吗

周坤 <18...@163.com>于2023年8月30日 周三11:15写道:

>
> 你好!在K8s模式中,动态编译缺失运行在UserJar中,启动的时候通过RIch算子的Open方法从第三方拉取原始class文件,然后进行动态编译进行缓存内存中,
> 按照YARN PER模式该方式是没有问题, 但是在K8s
> Apllication模式,会找不到原始class文件中的依赖,其实在UserJar中有该文件的类依赖的;
> 目前发现这个依赖类单独打jar包放在在lib目录下在框架运行时就加载才能找到依赖类,但是又不太符合规范;
>
>
>
>
>
>
>
>
>
>
>
>
>
> 在 2023-08-24 10:30:20,"Weihua Hu" <hu...@gmail.com> 写道:
>
> Hi,
>
>
> 抱歉我对 JavaCompiler 不是非常了解,我想知道这些动态编译是运行在 UserJar 的 main 方法中吗?以及编译的产物是怎么传递给
> Flink 的?
>
>
> Best,
> Weihua
>
>
>
>
>
> On Tue, Aug 22, 2023 at 5:12 PM 周坤 <18...@163.com> wrote:
>
> 你好!
> 有一个关于flink K8S apllication模式运行的问题需要解答下;
>
> 原本又yarn per模式运行的flink需要切换到K8s apllication模式;
>
>
>
>
> 目前公司环境提供了一个通用的基础flink1.13镜像包;
>
> usrJar:自己实现一个flink任务, 该任务存在使用 javax.tools.JavaCompiler
> 动态加载数据库的java类,进行动态编译加载运行;
>
> 目前在切换运行的时候会报 需要动态编译的类的依赖找不到;
>
>
>
>
> 需要动态编译的class文件的依赖在 usrJar中都是存在的,但是启动却包找不到依赖的类;
> 开始以为是 flink类加载机制导致:  classloader.resolve-order: parent-first , 增加该配置也无效;
> 后来发现将需要编译的类依赖放入到lib, 可以执行通过,但是如此违背了动态编译的初衷;
>
> 对此我感到很困惑? 是什么原因导致,期待能有回复。
>

Re:Re: K8s Appliaction模式无法支持flinkjar中Java动态编译?

Posted by 周坤 <18...@163.com>.
你好!在K8s模式中,动态编译缺失运行在UserJar中,启动的时候通过RIch算子的Open方法从第三方拉取原始class文件,然后进行动态编译进行缓存内存中,
按照YARN PER模式该方式是没有问题, 但是在K8s Apllication模式,会找不到原始class文件中的依赖,其实在UserJar中有该文件的类依赖的; 目前发现这个依赖类单独打jar包放在在lib目录下在框架运行时就加载才能找到依赖类,但是又不太符合规范;













在 2023-08-24 10:30:20,"Weihua Hu" <hu...@gmail.com> 写道:

Hi,


抱歉我对 JavaCompiler 不是非常了解,我想知道这些动态编译是运行在 UserJar 的 main 方法中吗?以及编译的产物是怎么传递给 Flink 的?


Best,
Weihua





On Tue, Aug 22, 2023 at 5:12 PM 周坤 <18...@163.com> wrote:

你好! 
有一个关于flink K8S apllication模式运行的问题需要解答下;

原本又yarn per模式运行的flink需要切换到K8s apllication模式; 




目前公司环境提供了一个通用的基础flink1.13镜像包;  

usrJar:自己实现一个flink任务, 该任务存在使用 javax.tools.JavaCompiler 动态加载数据库的java类,进行动态编译加载运行;

目前在切换运行的时候会报 需要动态编译的类的依赖找不到;


  

需要动态编译的class文件的依赖在 usrJar中都是存在的,但是启动却包找不到依赖的类;
开始以为是 flink类加载机制导致:  classloader.resolve-order: parent-first , 增加该配置也无效;
后来发现将需要编译的类依赖放入到lib, 可以执行通过,但是如此违背了动态编译的初衷;

对此我感到很困惑? 是什么原因导致,期待能有回复。

Re: K8s Appliaction模式无法支持flinkjar中Java动态编译?

Posted by Weihua Hu <hu...@gmail.com>.
Hi,

抱歉我对 JavaCompiler 不是非常了解,我想知道这些动态编译是运行在 UserJar 的 main 方法中吗?以及编译的产物是怎么传递给
Flink 的?

Best,
Weihua


On Tue, Aug 22, 2023 at 5:12 PM 周坤 <18...@163.com> wrote:

> 你好!
>
> 有一个关于flink K8S apllication模式运行的问题需要解答下;
>
> 原本又yarn per模式运行的flink需要切换到K8s apllication模式;
>
>
>
>
> 目前公司环境提供了一个通用的基础flink1.13镜像包;
>
> usrJar:自己实现一个flink任务, 该任务存在使用 javax.tools.JavaCompiler
> 动态加载数据库的java类,进行动态编译加载运行;
>
> 目前在切换运行的时候会报 需要动态编译的类的依赖找不到;
>
>
>
>
> 需要动态编译的class文件的依赖在 usrJar中都是存在的,但是启动却包找不到依赖的类;
> 开始以为是 flink类加载机制导致:  classloader.resolve-order: parent-first , 增加该配置也无效;
> 后来发现将需要编译的类依赖放入到lib, 可以执行通过,但是如此违背了动态编译的初衷;
>
> 对此我感到很困惑? 是什么原因导致,期待能有回复。
>
>