7

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

在 hadoop 中,-files 可以像这样将 xxx.so 文件分发给从属服务器:

[hadoop@Master ~]$ hadoop jar JniTest3.jar -files /home/hadoop/Documents/java/jni1/bin/libFakeSegmentForJni.so FakeSegmentForJni.TestFakeSegmentForJni input output

有什么方法可以像 spark 中的 hadoop 一样调用我的 hq_Image_Process.so 吗?我将不胜感激任何帮助。

4

2 回答 2

16

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

export SPARK_LIBRARY_PATH=/path/to/native/library

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

export SPARK_PRINT_LAUNCH_COMMAND=1

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

Spark Command:
/path/to/java -cp <long list of jars> -Djava.library.path=/path/to/native/library <etc>
========================================
于 2014-01-15T15:10:22.913 回答
0

接受答案的解决方案适用于较旧的(<1.0)Spark 版本。

您需要在spark-defaults.conf.

spark.driver.extraLibraryPath   /path/to/native/library
spark.executor.extraLibraryPath /path/to/native/library

属性键记录在 Spark 文档的配置部分

于 2021-03-25T09:37:35.323 回答