2014-01-14 15 views
5

Ich möchte Jni verwenden, um meine C++ - Bibliothek in Spark aufzurufen. Wenn ich mein Programm starte, zeigt es, dass java.lang.UnsatisfiedLinkError: kein hq_Image_Process in java.library.path, so offensichtlich kann das Programm meine hq_Image_Process.so nicht finden.wie jni in funken zu verwenden?

In hadoop, -Dateien können die xxx.so Datei an die Slaves wie folgt verteilen:

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

Gibt es Möglichkeiten, um meine hq_Image_Process.so wie Hadoop in Funken zu nennen? Ich würde jede Hilfe zu schätzen wissen.

Antwort

14

Zunächst muss die native Bibliothek auf allen Worker-Knoten vorinstalliert sein.

export SPARK_LIBRARY_PATH=/path/to/native/library 

SPARK_PRINT_LAUNCH_COMMAND Umgebungsvariable verwendet werden könnte es zu diagnostizieren: Pfad zu dieser Bibliothek muss in spark-env.sh angegeben werden

export SPARK_PRINT_LAUNCH_COMMAND=1 

Wenn alles richtig eingestellt ist, werden Sie sehen eine Ausgabe wie folgt aus:

Spark Command: 
/path/to/java -cp <long list of jars> -Djava.library.path=/path/to/native/library <etc> 
======================================== 
+3

Hallo Wildfire, ich verteilte meine libxxx.so nach/usr/lib auf jedem Knoten. Es scheint, alles ist jetzt in Ordnung. Danke ~ – hequn8128

+0

Gern geschehen :) – Wildfire

+0

nützliche Info, wenn ich ein Modell wieder verteilen muss – javadba