在流启动前访问flink类加载器

ctrmrzij  于 2021-06-21  发布在  Flink
关注(0)|答案(1)|浏览(357)

在我的项目中,我希望在执行流之前访问flink用户类加载器。我已经示例化了我自己的类加载器,以便在流执行之前反序列化类(尽最大努力避免与多个类加载器相关的问题)。
然而,我越是进步,我就越需要编写(糟糕的)代码来避免这个问题。
如果我可以访问flink用户类加载器并使用它,这个问题就可以解决了,但是在“richfunctions”之外我看不到这样做的机制(https://ci.apache.org/projects/flink/flink-docs-stable/api/java/org/apache/flink/api/common/functions/richfunction.html)需要流运行。
如有任何指导,我们将不胜感激

rdlzhqv9

rdlzhqv91#

你可以在flink中使用自己的类加载器。
自己构建图形并向客户机提交类加载器。
代码如下:

final StandaloneClusterClient client;
try {
    client = new StandaloneClusterClient(configuration);
} catch (final Exception e) {
    throw new RuntimeException("Could not establish a connection to the job manager", e);
}

try {
    ClassLoader classLoader = JobWithJars.buildUserCodeClassLoader(
            Collections.<URL>singletonList(uploadedJarUrl),
            Collections.<URL>emptyList(),
            this.getClass().getClassLoader());
    client.runDetached(jobGraph, classLoader);
} catch (final ProgramInvocationException e) {
    throw new RuntimeException("Cannot execute job due to ProgramInvocationException", e);
}

但我仍然想知道为什么你想要自己的类加载器,它可能可以通过其他方式实现。

相关问题