Hi Mike,

do you run Flink locally or in a cluster? You have to make sure that VM argument -Djava.library.path is set for all Flink JVMs. Job Manager and Task Managers might run in separate JVMs. Make also sure that the library is accessible from all node. I don't know what happens if the file is accessed by multiple processes/threads at the same time. It might also important where you put the static { ... } loading. It should be in the Function, because these classes get deserialized on the TaskManager.

I hope this helps.

Timo


Am 17.07.17 um 21:30 schrieb Mike Accola:
I am new Flink user just trying to learn a little bit.  I am trying to
incorporate an existing C++ library into a new Flink application.  I am
seeing some strange behavior when trying to link in the native (C++)
library using java via JNI.
I am running this on Linux (RHEL6) I can run my application once without error. Sometimes it will run
successfully a 2nd or 3rd time.  However, eventually on a subsequent run,
I get an exception about the the native library not being found:
java.lang.UnsatisfiedLinkError: no dummy2native in java.library.path
         at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
         at java.lang.Runtime.loadLibrary0(Runtime.java:870)
         at java.lang.System.loadLibrary(System.java:1122)
         at com.att.flink.tdata.spss.TinyLoader.loadNative(Dummy2.java:10)
For debugging purposes for now, my native library does not have any
external references.  It really contains 1 method that essentially does
nothing.
The behavior seems to indicate that there is some kind of cleanup being
done that "unloads" the native library.  I suspect this is somehow related
to Flink's implementation of its library cache manager, but I have not
been able to prove this yet.
A few more details: - I have a c++ library libdummy2native.so that contains a method that can
be invoked via JNI.
- I have a jar containing a class, called Dummy2.  The Dummy2 constructor
will invoke the JNI method.
- The libdummy2native.so library is invoked with System.loadLibrary() like
this:
      static {System.loadLibrary("dummy2native"); }
- In my simple Flink application, I have extended the ProcessFunction
class.  Within this class, I have overriden processElement method that
declares a Dummy2 object.
- The Dummy2 class can be called and invoked without error when used in a
standalone java program.
Any thoughts or ideas on what to try next would be appreciated. Initially,
I'd be happy to be able to just explain this behavior.  I will worry about
fixing it afterwards.
Thanks.





Reply via email to