2014-01-14 42 views
5

我想用jni在spark中調用我的C++ lib。當我運行我的程序時,它顯示java.lang.UnsatisfiedLinkError:java.library.path中沒有hq_Image_Process,所以顯然程序找不到我的hq_Image_Process.so。如何在火花中使用jni?

在Hadoop中,-files可以xxx.so文件分發到這樣的奴隸:

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

有什麼方法叫我hq_Image_Process.so像火花Hadoop的? 我將不勝感激任何幫助。

回答

14

首先,本機庫必須預先安裝在所有工作節點上。路徑到磁帶庫必須在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> 
======================================== 
+3

hi wildfire,我將libxxx.so分發到每個節點上的/ usr/lib。現在看起來一切正常。謝謝〜 – hequn8128

+0

不客氣:) – Wildfire

+0

有用的信息,如果我需要再次分配一個模型 – javadba