RemoteExecutionEnvironment
scala APIを使用して、Apache FlinkジョブをAWS Elastic MapReduce YARNクラスターにディスパッチするアプリケーションがあります。Flink YARNクラスタージョブでJNIを使用する
これらのジョブは、JNIを使用して計算の一部をCライブラリで実行します。開発中に私はRichCrossFunction
のopen()
メソッドでSystem.loadLibrary()
コールをこのJNIライブラリをロードするだけです。これはLocalExecutionEnvironment
で問題なく動作しました。
今私はRemoteExecutionEnvironment
に移動していますが、これはもはや機能しません。 Flinkがジョブをディスパッチするたびに新しいClassLoader
を使用していて、計算ノードにNative library already loaded in another classloader
というエラーが表示されているようです。 http://wiki.apache.org/tomcat/HowTo#I.27m_encountering_classloader_problems_when_using_JNI_under_Tomcat
はFLINKまたはYARNために利用可能な同様の解決策はあります:
いくつかのグーグルが、これはTomcatのアプリケーションと共通の問題であり、解決策は、TomcatのFAQで利用可能であることを教えてくれましたか?
さらに、ジョブがキューに登録されるたびにJARを再送信しないようにすることはできますか?私は似た、そしてFLINKの/lib
フォルダに私のJNIの瓶を落とし、私のJNIジャーの静的初期化子でloadLibrary
を呼び出すことによって、問題を修正...