clj-python / libpython-clj

Python bindings for Clojure
Eclipse Public License 2.0
1.05k stars 68 forks source link

libpython-clj inside hadoop jar -- failing to find valid python library #199

Closed bajrachar closed 2 years ago

bajrachar commented 2 years ago

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)

cnuernber commented 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?

bajrachar commented 2 years ago

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

bajrachar commented 2 years ago

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

cnuernber commented 2 years ago

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?

cnuernber commented 2 years ago

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?

bajrachar commented 2 years ago

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.(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 insn.core$loading6721auto__11675.invoke(core.clj:1) at insn.coreinit.load(Unknown Source) at insn.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$fn__6839.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 tech.v3.datatype.ffi.base$loading6721auto__11673.invoke(base.clj:1) at tech.v3.datatype.ffi.baseinit.load(Unknown Source) at tech.v3.datatype.ffi.baseinit.(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 tech.v3.datatype.ffi.jna$loading6721auto__11671.invoke(jna.clj:1) at tech.v3.datatype.ffi.jnainit.load(Unknown Source) at tech.v3.datatype.ffi.jnainit.(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.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:352) at tech.v3.datatype.ffi$set_ffi_implBANG.invoke(ffi.clj:345) at hadoop_test_clj.coreinit.load(Unknown Source) at hadoop_test_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_test_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)

cnuernber commented 2 years ago

Yes, my previous guess is the first problem we need to work around.

There are two possible pathways.

  1. We can fix the org.asm dependency. If doing what I suggested above in your uberjar build does not fix the issue then the loading hadoop process has an out-of-date org.asm dependency. Either way you can work to update the org.asm dependency. This is the easiest pathway assuming you have control over the hadoop process which you may not have.
  2. We can eliminate the dependency on insn and use it only to generate bindings during your uberjar build. I use insn to dynamically generate FFI bindings between the FFI definition and the particular FFI system in use - JNA in this case. This is the harder cause but will work when we don't have control over the hadoop process.

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.

bajrachar commented 2 years ago

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>
cnuernber commented 2 years ago

Yes so can you override that for your hadoop installation?

bajrachar commented 2 years ago

Yes so can you override that for your hadoop installation?

@cnuernber - I will give it go and let you know how it worked out.

aaelony commented 2 years ago

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.

bajrachar commented 2 years ago

@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.

cnuernber commented 2 years ago

My pleasure, glad it works for you now!