【发布时间】:2023-03-15 03:40:01
【问题描述】:
我有一个应用程序,它通过 RemoteExecutionEnvironment scala API 将 Apache Flink 作业分派到 AWS Elastic MapReduce YARN 集群。
这些作业使用 JNI 通过 C 库运行部分计算。在开发过程中,我只是在RichCrossFunction 的open() 方法中调用System.loadLibrary() 来加载这个JNI 库。这在LocalExecutionEnvironment 中运行良好。
现在我要转到RemoteExecutionEnvironment,这似乎不再有效。看起来 Flink 每次调度作业时都在使用新的 ClassLoader,而我在计算节点上收到 Native library already loaded in another classloader 错误。
一些谷歌搜索告诉我,这是 Tomcat 应用程序的常见问题,Tomcat 常见问题解答中提供了解决方案:http://wiki.apache.org/tomcat/HowTo#I.27m_encountering_classloader_problems_when_using_JNI_under_Tomcat
是否有适用于 Flink 或 YARN 的类似解决方案?
此外,是否可以避免每次作业排队时都重新提交 JAR?我总是在这个集群上使用同一个 jar,所以这是不必要的开销......
【问题讨论】:
标签: java scala hadoop apache-flink