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













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

Hi,


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


Best,
Weihua





On Tue, Aug 22, 2023 at 5:12 PM 周坤 <18679131...@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, 可以执行通过,但是如此违背了动态编译的初衷;

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

回复