Closed bajrachar closed 2 years ago
The problem is that both supported dtype-next FFI bindings - JNA and JDK-17 failed. libpython-clj works with the JNA bindings so what happened is the system failed to generate them. Is this jar run in a security context that disables aspects of the JVM that JNA needs to load?
What is the output if your main function calls (tech.v3.datatype.ffi/set-ffi-impl! :jna)
before libpython-clj's initialize!
function or any require-python calls?
Thank you for your quick response. I added the set-ffi-impl! call before initialize! --> I am not getting any additional messages - but just the same error as before [I have pasted it at the end of the comment]. I did also realize that hadoop jar uses it's own classpath -- do you think the issue is because a jar is not in the classpath or not included in the uberjar?
Full Stack Trace:
Syntax error compiling at (tech/v3/datatype/ffi/mmodel.clj:1:1).
at clojure.lang.Compiler.load(Compiler.java:7648)
at clojure.lang.RT.loadResourceScript(RT.java:381)
at clojure.lang.RT.loadResourceScript(RT.java:372)
at clojure.lang.RT.load(RT.java:459)
at clojure.lang.RT.load(RT.java:424)
at clojure.core$load$fn6839.invoke(core.clj:6126)
at clojure.core$load.invokeStatic(core.clj:6125)
at clojure.core$load.doInvoke(core.clj:6109)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invokeStatic(core.clj:5908)
at clojure.core$load_one.invoke(core.clj:5903)
at clojure.core$load_lib$fn6780.invoke(core.clj:5948)
at clojure.core$load_lib.invokeStatic(core.clj:5947)
at clojure.core$load_lib.doInvoke(core.clj:5928)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invokeStatic(core.clj:667)
at clojure.core$load_libs.invokeStatic(core.clj:5985)
at clojure.core$load_libs.doInvoke(core.clj:5969)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invokeStatic(core.clj:667)
at clojure.core$require.invokeStatic(core.clj:6007)
at clojure.core$require.doInvoke(core.clj:6007)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invokeStatic(core.clj:665)
at clojure.core$serialized_require.invokeStatic(core.clj:6079)
at clojure.core$requiring_resolve.invokeStatic(core.clj:6088)
at clojure.core$requiring_resolve.invoke(core.clj:6082)
at tech.v3.datatype.ffi$set_ffi_implBANG.invokeStatic(ffi.clj:287)
at tech.v3.datatype.ffi$set_ffi_implBANG.invoke(ffi.clj:281)
at tech.v3.datatype.ffi$ffi_impl$fn5589$fn__5590.invoke(ffi.clj:302)
at tech.v3.datatype.ffi$ffi_impl$fn5589.invoke(ffi.clj:301)
at tech.v3.datatype.ffi$ffi_impl.invokeStatic(ffi.clj:296)
at tech.v3.datatype.ffi$ffi_impl.invoke(ffi.clj:291)
at tech.v3.datatype.ffi$find_library$fn5600.invoke(ffi.clj:322)
at clojure.core$filter$fn5893.invoke(core.clj:2821)
at clojure.lang.LazySeq.sval(LazySeq.java:42)
at clojure.lang.LazySeq.seq(LazySeq.java:51)
at clojure.lang.LazySeq.first(LazySeq.java:73)
at clojure.lang.RT.first(RT.java:692)
at clojure.core$first5384.invokeStatic(core.clj:55)
at clojure.core$first5384.invoke(core.clj:55)
at tech.v3.datatype.ffi$find_library.invokeStatic(ffi.clj:325)
at tech.v3.datatype.ffi$find_library.invoke(ffi.clj:310)
at clojure.core$map$fn5866.invoke(core.clj:2755)
at clojure.lang.LazySeq.sval(LazySeq.java:42)
at clojure.lang.LazySeq.seq(LazySeq.java:51)
at clojure.lang.RT.seq(RT.java:535)
at clojure.core$seq5402.invokeStatic(core.clj:137)
at clojure.core$filter$fn5893.invoke(core.clj:2809)
at clojure.lang.LazySeq.sval(LazySeq.java:42)
at clojure.lang.LazySeq.seq(LazySeq.java:51)
at clojure.lang.LazySeq.first(LazySeq.java:73)
at clojure.lang.RT.first(RT.java:692)
at clojure.core$first5384.invokeStatic(core.clj:55)
at clojure.core$first5384.invoke(core.clj:55)
at libpython_clj2.python$initializeBANG.invokeStatic(python.clj:86)
at libpython_clj2.python$initializeBANG.doInvoke(python.clj:46)
at clojure.lang.RestFn.invoke(RestFn.java:397)
at libpython_clj2.metadata__init.load(Unknown Source)
at libpython_clj2.metadatainit.
I am able to reproduce the issue on a tesser hadoop demo project by adding libpython-clj to dependencies and calling initialize! from core.clj
The issue is that JNA isn't loading and we need to figure out why this is. What is the JVM version the hadoop system? JNA itself unpacks native libraries (libffi) and loads them so perhaps this unpack/load pathway isn't working. We haven't had issues with using JNA from uberjars but we haven't tried it from hadoop like this.
Is it possible set-ffi-impl! is throwing an exception that is being swallowed?
Hmm or another likely scenario is that insn is failing because the version of org.asm is too old. What if, in addition to your libpython-clj dependencies you include [org.ow2.asm/asm "9.0"]
? Or if you can print the dependencies what version of org.ow2.asm is being used in the uberjar?
set-ffi-impl! call seems to be throwing following exception - [wonder if this gives any clue?]
Exception in thread "main" java.lang.NoSuchFieldError: ACC_OPEN
at insn.utilinit.load(Unknown Source)
at insn.utilinit.
Yes, my previous guess is the first problem we need to work around.
There are two possible pathways.
Before getting into details of 2. we should be sure that 1. won't work as no one has asked for 2 yet and thus I don't have a nice paved way to make it happen.
Hadoop does seem to have dependency on older version of org.ow2.asm --> [from https://github.com/apache/hadoop/blob/trunk/hadoop-project/pom.xml] :
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>5.0.4</version>
</dependency>
Yes so can you override that for your hadoop installation?
Yes so can you override that for your hadoop installation?
@cnuernber - I will give it go and let you know how it worked out.
just a thought - every node on the cluster with Hadoop needs to have the same libraries and executables. Is this the case in your situation?
On Feb 26, 2022, at 18:42, bajrachar @.***> wrote:
Thank you for your quick response. I added the set-ffi-impl! call before initialize! --> I am not getting any additional messages - but just the same error as before [I have pasted it at the end of the comment]. I did also realize that hadoop jar uses it's own classpath -- do you think the issue is because a jar is not in the classpath or not included in the uberjar?
Full Stack Trace: Syntax error compiling at (tech/v3/datatype/ffi/mmodel.clj:1:1). at clojure.lang.Compiler.load(Compiler.java:7648) at clojure.lang.RT.loadResourceScript(RT.java:381) at clojure.lang.RT.loadResourceScript(RT.java:372) at clojure.lang.RT.load(RT.java:459) at clojure.lang.RT.load(RT.java:424) at clojure.core$load$fn6839.invoke(core.clj:6126) at clojure.core$load.invokeStatic(core.clj:6125) at clojure.core$load.doInvoke(core.clj:6109) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invokeStatic(core.clj:5908) at clojure.core$load_one.invoke(core.clj:5903) at clojure.core$load_lib$fn6780.invoke(core.clj:5948) at clojure.core$load_lib.invokeStatic(core.clj:5947) at clojure.core$load_lib.doInvoke(core.clj:5928) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invokeStatic(core.clj:667) at clojure.core$load_libs.invokeStatic(core.clj:5985) at clojure.core$load_libs.doInvoke(core.clj:5969) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invokeStatic(core.clj:667) at clojure.core$require.invokeStatic(core.clj:6007) at clojure.core$require.doInvoke(core.clj:6007) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invokeStatic(core.clj:665) at clojure.core$serialized_require.invokeStatic(core.clj:6079) at clojure.core$requiring_resolve.invokeStatic(core.clj:6088) at clojure.core$requiring_resolve.invoke(core.clj:6082) at tech.v3.datatype.ffi$set_ffi_implBANG.invokeStatic(ffi.clj:287) at tech.v3.datatype.ffi$set_ffi_implBANG.invoke(ffi.clj:281) at tech.v3.datatype.ffi$ffi_impl$fn5589$fn__5590.invoke(ffi.clj:302) at tech.v3.datatype.ffi$ffi_impl$fn5589.invoke(ffi.clj:301) at tech.v3.datatype.ffi$ffi_impl.invokeStatic(ffi.clj:296) at tech.v3.datatype.ffi$ffi_impl.invoke(ffi.clj:291) at tech.v3.datatype.ffi$find_library$fn5600.invoke(ffi.clj:322) at clojure.core$filter$fn5893.invoke(core.clj:2821) at clojure.lang.LazySeq.sval(LazySeq.java:42) at clojure.lang.LazySeq.seq(LazySeq.java:51) at clojure.lang.LazySeq.first(LazySeq.java:73) at clojure.lang.RT.first(RT.java:692) at clojure.core$first5384.invokeStatic(core.clj:55) at clojure.core$first5384.invoke(core.clj:55) at tech.v3.datatype.ffi$find_library.invokeStatic(ffi.clj:325) at tech.v3.datatype.ffi$find_library.invoke(ffi.clj:310) at clojure.core$map$fn5866.invoke(core.clj:2755) at clojure.lang.LazySeq.sval(LazySeq.java:42) at clojure.lang.LazySeq.seq(LazySeq.java:51) at clojure.lang.RT.seq(RT.java:535) at clojure.core$seq5402.invokeStatic(core.clj:137) at clojure.core$filter$fn5893.invoke(core.clj:2809) at clojure.lang.LazySeq.sval(LazySeq.java:42) at clojure.lang.LazySeq.seq(LazySeq.java:51) at clojure.lang.LazySeq.first(LazySeq.java:73) at clojure.lang.RT.first(RT.java:692) at clojure.core$first5384.invokeStatic(core.clj:55) at clojure.core$first5384.invoke(core.clj:55) at libpython_clj2.python$initializeBANG.invokeStatic(python.clj:86) at libpython_clj2.python$initializeBANG.doInvoke(python.clj:46) at clojure.lang.RestFn.invoke(RestFn.java:397) at libpython_clj2.metadata__init.load(Unknown Source) at libpython_clj2.metadatainit.(Unknown Source) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:374) at clojure.lang.RT.classForName(RT.java:2211) at clojure.lang.RT.classForName(RT.java:2220) at clojure.lang.RT.loadClassForName(RT.java:2239) at clojure.lang.RT.load(RT.java:449) at clojure.lang.RT.load(RT.java:424) at clojure.core$load$fn6839.invoke(core.clj:6126) at clojure.core$load.invokeStatic(core.clj:6125) at clojure.core$load.doInvoke(core.clj:6109) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invokeStatic(core.clj:5908) at clojure.core$load_one.invoke(core.clj:5903) at clojure.core$load_lib$fn__6780.invoke(core.clj:5948) at clojure.core$load_lib.invokeStatic(core.clj:5947) at clojure.core$load_lib.doInvoke(core.clj:5928) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invokeStatic(core.clj:667) at clojure.core$load_libs.invokeStatic(core.clj:5985) at clojure.core$load_libs.doInvoke(core.clj:5969) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invokeStatic(core.clj:667) at clojure.core$require.invokeStatic(core.clj:6007) at clojure.core$require.doInvoke(core.clj:6007) at clojure.lang.RestFn.invoke(RestFn.java:482) at libpython_clj2.require$loading6721auto__512.invoke(require.clj:1) at libpython_clj2.requireinit.load(Unknown Source) at libpython_clj2.requireinit.(Unknown Source) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:374) at clojure.lang.RT.classForName(RT.java:2211) at clojure.lang.RT.classForName(RT.java:2220) at clojure.lang.RT.loadClassForName(RT.java:2239) at clojure.lang.RT.load(RT.java:449) at clojure.lang.RT.load(RT.java:424) at clojure.core$load$fn6839.invoke(core.clj:6126) at clojure.core$load.invokeStatic(core.clj:6125) at clojure.core$load.doInvoke(core.clj:6109) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invokeStatic(core.clj:5908) at clojure.core$load_one.invoke(core.clj:5903) at clojure.core$load_lib$fn6780.invoke(core.clj:5948) at clojure.core$load_lib.invokeStatic(core.clj:5947) at clojure.core$load_lib.doInvoke(core.clj:5928) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invokeStatic(core.clj:667) at clojure.core$load_libs.invokeStatic(core.clj:5985) at clojure.core$load_libs.doInvoke(core.clj:5969) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invokeStatic(core.clj:667) at clojure.core$require.invokeStatic(core.clj:6007) at clojure.core$require.doInvoke(core.clj:6007) at clojure.lang.RestFn.invoke(RestFn.java:457) at bionlp.biobert$loading6721auto__510.invoke(biobert.clj:1) at bionlp.biobertinit.load(Unknown Source) at bionlp.biobertinit.(Unknown Source) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:374) at clojure.lang.RT.classForName(RT.java:2211) at clojure.lang.RT.classForName(RT.java:2220) at clojure.lang.RT.loadClassForName(RT.java:2239) at clojure.lang.RT.load(RT.java:449) at clojure.lang.RT.load(RT.java:424) at clojure.core$load$fn6839.invoke(core.clj:6126) at clojure.core$load.invokeStatic(core.clj:6125) at clojure.core$load.doInvoke(core.clj:6109) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invokeStatic(core.clj:5908) at clojure.core$load_one.invoke(core.clj:5903) at clojure.core$load_lib$fn6780.invoke(core.clj:5948) at clojure.core$load_lib.invokeStatic(core.clj:5947) at clojure.core$load_lib.doInvoke(core.clj:5928) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invokeStatic(core.clj:667) at clojure.core$load_libs.invokeStatic(core.clj:5985) at clojure.core$load_libs.doInvoke(core.clj:5969) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invokeStatic(core.clj:667) at clojure.core$require.invokeStatic(core.clj:6007) at clojure.core$require.doInvoke(core.clj:6007) at clojure.lang.RestFn.invoke(RestFn.java:619) at hadoop_clj.core$loading6721auto____171.invoke(core.clj:1) at hadoop_clj.coreinit.load(Unknown Source) at hadoop_clj.coreinit.(Unknown Source) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:374) at clojure.lang.RT.classForName(RT.java:2211) at clojure.lang.RT.classForName(RT.java:2220) at clojure.lang.RT.loadClassForName(RT.java:2239) at clojure.lang.RT.load(RT.java:449) at clojure.lang.RT.load(RT.java:424) at clojure.core$load$fn6839.invoke(core.clj:6126) at clojure.core$load.invokeStatic(core.clj:6125) at clojure.core$load.doInvoke(core.clj:6109) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.lang.Var.invoke(Var.java:384) at clojure.lang.Util.loadWithClass(Util.java:251) at hadoop_clj.core.(Unknown Source) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:374) at org.apache.hadoop.util.RunJar.run(RunJar.java:316) at org.apache.hadoop.util.RunJar.main(RunJar.java:236) Caused by: java.lang.NoClassDefFoundError: Could not initialize class tech.v3.datatype.ffi.baseinit at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:374) at clojure.lang.RT.classForName(RT.java:2211) at clojure.lang.RT.classForName(RT.java:2220) at clojure.lang.RT.loadClassForName(RT.java:2239) at clojure.lang.RT.load(RT.java:449) at clojure.lang.RT.load(RT.java:424) at clojure.core$load$fn6839.invoke(core.clj:6126) at clojure.core$load.invokeStatic(core.clj:6125) at clojure.core$load.doInvoke(core.clj:6109) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invokeStatic(core.clj:5908) at clojure.core$load_one.invoke(core.clj:5903) at clojure.core$load_lib$fn6780.invoke(core.clj:5948) at clojure.core$load_lib.invokeStatic(core.clj:5947) at clojure.core$load_lib.doInvoke(core.clj:5928) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invokeStatic(core.clj:667) at clojure.core$load_libs.invokeStatic(core.clj:5985) at clojure.core$load_libs.doInvoke(core.clj:5969) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invokeStatic(core.clj:667) at clojure.core$require.invokeStatic(core.clj:6007) at clojure.core$require.doInvoke(core.clj:6007) at clojure.lang.RestFn.invoke(RestFn.java:482) at tech.v3.datatype.ffi.mmodel$eval155$loading6721auto__156.invoke(mmodel.clj:1) at tech.v3.datatype.ffi.mmodel$eval155.invokeStatic(mmodel.clj:1) at tech.v3.datatype.ffi.mmodel$eval155.invoke(mmodel.clj:1) at clojure.lang.Compiler.eval(Compiler.java:7177) at clojure.lang.Compiler.eval(Compiler.java:7166) at clojure.lang.Compiler.load(Compiler.java:7636) ... 161 more Exception in thread "main" java.lang.ExceptionInInitializerError at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:374) at clojure.lang.RT.classForName(RT.java:2211) at clojure.lang.RT.classForName(RT.java:2220) at clojure.lang.RT.loadClassForName(RT.java:2239) at clojure.lang.RT.load(RT.java:449) at clojure.lang.RT.load(RT.java:424) at clojure.core$load$fn6839.invoke(core.clj:6126) at clojure.core$load.invokeStatic(core.clj:6125) at clojure.core$load.doInvoke(core.clj:6109) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invokeStatic(core.clj:5908) at clojure.core$load_one.invoke(core.clj:5903) at clojure.core$load_lib$fn__6780.invoke(core.clj:5948) at clojure.core$load_lib.invokeStatic(core.clj:5947) at clojure.core$load_lib.doInvoke(core.clj:5928) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invokeStatic(core.clj:667) at clojure.core$load_libs.invokeStatic(core.clj:5985) at clojure.core$load_libs.doInvoke(core.clj:5969) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invokeStatic(core.clj:667) at clojure.core$require.invokeStatic(core.clj:6007) at clojure.core$require.doInvoke(core.clj:6007) at clojure.lang.RestFn.invoke(RestFn.java:482) at libpython_clj2.require$loading6721auto__512.invoke(require.clj:1) at libpython_clj2.requireinit.load(Unknown Source) at libpython_clj2.requireinit.(Unknown Source) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:374) at clojure.lang.RT.classForName(RT.java:2211) at clojure.lang.RT.classForName(RT.java:2220) at clojure.lang.RT.loadClassForName(RT.java:2239) at clojure.lang.RT.load(RT.java:449) at clojure.lang.RT.load(RT.java:424) at clojure.core$load$fn6839.invoke(core.clj:6126) at clojure.core$load.invokeStatic(core.clj:6125) at clojure.core$load.doInvoke(core.clj:6109) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invokeStatic(core.clj:5908) at clojure.core$load_one.invoke(core.clj:5903) at clojure.core$load_lib$fn6780.invoke(core.clj:5948) at clojure.core$load_lib.invokeStatic(core.clj:5947) at clojure.core$load_lib.doInvoke(core.clj:5928) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invokeStatic(core.clj:667) at clojure.core$load_libs.invokeStatic(core.clj:5985) at clojure.core$load_libs.doInvoke(core.clj:5969) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invokeStatic(core.clj:667) at clojure.core$require.invokeStatic(core.clj:6007) at clojure.core$require.doInvoke(core.clj:6007) at clojure.lang.RestFn.invoke(RestFn.java:457) at bionlp.biobert$loading6721auto__510.invoke(biobert.clj:1) at bionlp.biobertinit.load(Unknown Source) at bionlp.biobertinit.(Unknown Source) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:374) at clojure.lang.RT.classForName(RT.java:2211) at clojure.lang.RT.classForName(RT.java:2220) at clojure.lang.RT.loadClassForName(RT.java:2239) at clojure.lang.RT.load(RT.java:449) at clojure.lang.RT.load(RT.java:424) at clojure.core$load$fn6839.invoke(core.clj:6126) at clojure.core$load.invokeStatic(core.clj:6125) at clojure.core$load.doInvoke(core.clj:6109) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invokeStatic(core.clj:5908) at clojure.core$load_one.invoke(core.clj:5903) at clojure.core$load_lib$fn6780.invoke(core.clj:5948) at clojure.core$load_lib.invokeStatic(core.clj:5947) at clojure.core$load_lib.doInvoke(core.clj:5928) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invokeStatic(core.clj:667) at clojure.core$load_libs.invokeStatic(core.clj:5985) at clojure.core$load_libs.doInvoke(core.clj:5969) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invokeStatic(core.clj:667) at clojure.core$require.invokeStatic(core.clj:6007) at clojure.core$require.doInvoke(core.clj:6007) at clojure.lang.RestFn.invoke(RestFn.java:619) at hadoop_clj.core$loading6721auto____171.invoke(core.clj:1) at hadoop_clj.coreinit.load(Unknown Source) at hadoop_clj.coreinit.(Unknown Source) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:374) at clojure.lang.RT.classForName(RT.java:2211) at clojure.lang.RT.classForName(RT.java:2220) at clojure.lang.RT.loadClassForName(RT.java:2239) at clojure.lang.RT.load(RT.java:449) at clojure.lang.RT.load(RT.java:424) at clojure.core$load$fn6839.invoke(core.clj:6126) at clojure.core$load.invokeStatic(core.clj:6125) at clojure.core$load.doInvoke(core.clj:6109) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.lang.Var.invoke(Var.java:384) at clojure.lang.Util.loadWithClass(Util.java:251) at hadoop_clj.core.(Unknown Source) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:374) at org.apache.hadoop.util.RunJar.run(RunJar.java:316) at org.apache.hadoop.util.RunJar.main(RunJar.java:236) Caused by: java.lang.Exception: Failed to find a valid python library! at libpython_clj2.python$initializeBANG.invokeStatic(python.clj:87) at libpython_clj2.python$initializeBANG.doInvoke(python.clj:46) at clojure.lang.RestFn.invoke(RestFn.java:397) at libpython_clj2.metadata__init.load(Unknown Source) at libpython_clj2.metadata__init.(Unknown Source) ... 102 more
— Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android. You are receiving this because you are subscribed to this thread.
@cnuernber - Many thanks for your feedback in debugging this issue. The hadoop source compiled with updated org.ow2.asm:asm library seems to be able to find the python library just fine.
@aaelony -- Thanks for making that observation. I believe you're correct - I will need to distribute the compiled source to all the nodes in the cluster.
My pleasure, glad it works for you now!
I am trying to run a python model inside a hadoop MapReduce task -- so basically a libpython-clj interface within a clj uberjar. When testing within a REPL --> libpython seems to find the python libraries just fine however when run via the hadoop cli it cannot -->
hadoop jar target/hadoop-clj-0.1.0-SNAPSHOT-standalone.jar tmp test.xml
2022-02-27 00:43:32,724 INFO HSQLDB742713B661.ENGINE: dataFileCache open start 2022-02-27 00:43:35,518 INFO python.info: Detecting startup info 2022-02-27 00:43:35,799 INFO libpython-clj2.python: Startup info {:lib-version "3.7", :java-library-path-addendum "/home/ravi/.pyenv/versions/3.7.5/lib", :exec-prefix "/home/ravi/.pyenv/versions/3.7.5", :executable "/home/ravi/.pyenv/versions/3.7.5/bin/python3", :libnames ("python3.7m" "python3.7"), :prefix "/home/ravi/.pyenv/versions/3.7.5", :base-prefix "/home/ravi/.pyenv/versions/3.7.5", :libname "python3.7m", :base-exec-prefix "/home/ravi/.pyenv/versions/3.7.5", :python-home "/home/ravi/.pyenv/versions/3.7.5", :version [3 7 5], :platform "linux"} 2022-02-27 00:43:35,799 INFO libpython-clj2.python: Prefixing java library path: /home/ravi/.pyenv/versions/3.7.5/lib 2022-02-27 00:43:35,885 ERROR datatype.ffi: Failed to find a suitable FFI implementation. Attempted both :jdk and :jna -- call set-ffi-impl! from the repl to see specific failure. Syntax error compiling at (tech/v3/datatype/ffi/mmodel.clj:1:1). at clojure.lang.Compiler.load(Compiler.java:7648) at clojure.lang.RT.loadResourceScript(RT.java:381) at clojure.lang.RT.loadResourceScript(RT.java:372) at clojure.lang.RT.load(RT.java:459) at clojure.lang.RT.load(RT.java:424) at clojure.core$load$fn6839.invoke(core.clj:6126) at clojure.core$load.invokeStatic(core.clj:6125) at clojure.core$load.doInvoke(core.clj:6109) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.core$load_one.invokeStatic(core.clj:5908) at clojure.core$load_one.invoke(core.clj:5903) at clojure.core$load_lib$fn6780.invoke(core.clj:5948) at clojure.core$load_lib.invokeStatic(core.clj:5947) at clojure.core$load_lib.doInvoke(core.clj:5928) at clojure.lang.RestFn.applyTo(RestFn.java:142) at clojure.core$apply.invokeStatic(core.clj:667) at clojure.core$load_libs.invokeStatic(core.clj:5985) at clojure.core$load_libs.doInvoke(core.clj:5969) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invokeStatic(core.clj:667) at clojure.core$require.invokeStatic(core.clj:6007) at clojure.core$require.doInvoke(core.clj:6007) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core$apply.invokeStatic(core.clj:665) at clojure.core$serialized_require.invokeStatic(core.clj:6079) at clojure.core$requiring_resolve.invokeStatic(core.clj:6088) at clojure.core$requiring_resolve.invoke(core.clj:6082) at tech.v3.datatype.ffi$set_ffi_implBANG.invokeStatic(ffi.clj:287) at tech.v3.datatype.ffi$set_ffi_implBANG.invoke(ffi.clj:281) at tech.v3.datatype.ffi$ffi_impl$fn5589$fn__5590.invoke(ffi.clj:302) at tech.v3.datatype.ffi$ffi_impl$fn5589.invoke(ffi.clj:301) at tech.v3.datatype.ffi$ffi_impl.invokeStatic(ffi.clj:296) at tech.v3.datatype.ffi$ffi_impl.invoke(ffi.clj:291) at tech.v3.datatype.ffi$find_library$fn__5600.invoke(ffi.clj:322)