如何在火花中使用jni?

heq*_*128 6 java-native-interface java.library.path apache-spark

我想用jni在spark中调用我的c ++ lib.当我运行我的程序时,它显示java.lang.UnsatisfiedLinkError:java.library.path中没有hq_Image_Process,所以显然程序找不到我的hq_Image_Process.so.

在hadoop中,-files可以将xxx.so文件分发给slave,如下所示:

[hadoop@Master ~]$ hadoop jar JniTest3.jar -files /home/hadoop/Documents/java/jni1/bin/libFakeSegmentForJni.so FakeSegmentForJni.TestFakeSegmentForJni input output
Run Code Online (Sandbox Code Playgroud)

有没有办法像火花中的hadoop一样调用我的hq_Image_Process.so?我将不胜感激任何帮助.

Wil*_*ire 15

首先,必须在所有工作节点上预安装本机库.必须在以下位置指定该库的路径spark-env.sh:

export SPARK_LIBRARY_PATH=/path/to/native/library
Run Code Online (Sandbox Code Playgroud)

SPARK_PRINT_LAUNCH_COMMAND 环境变量可能用于诊断它:

export SPARK_PRINT_LAUNCH_COMMAND=1
Run Code Online (Sandbox Code Playgroud)

如果一切设置正确,您将看到如下输出:

Spark Command:
/path/to/java -cp <long list of jars> -Djava.library.path=/path/to/native/library <etc>
========================================
Run Code Online (Sandbox Code Playgroud)

  • 在野火中,我在每个节点上将我的libxxx.so分发给/ usr/lib.现在好像一切都好.谢谢〜 (3认同)
  • 有没有办法自动在所有节点中预安装库? (3认同)