2016-03-29 6 views
5

Ich versuche, meine nicht funktionierende Apache Spark und Netlib-Setup zu beheben, und ich weiß nicht, was ich als nächstes tun soll.Spark netlib-java BLAS

Hier einige Informationen:

  • Spark-1.3.1 (aber auch 1.5.1 versucht)
  • Mesos Cluster mit 3 Knoten
  • Ubuntu Trusty auf jedem Knoten und installiert folgende BLAS Paket

    $ dpkg -l | grep 'blas\|atlas\|lapack' 
    ii libopenblas-base     0.2.8-6ubuntu1     amd64  Optimized BLAS (linear algebra) library based on GotoBLAS2 
    
    $ update-alternatives --get-selections | grep 'blas\|lapack' 
    libblas.so.3     auto  /usr/lib/openblas-base/libblas.so.3 
    

ich habe ein Probengefäß zum Testen gebaut wenn netlib-java können diese Bibliotheken erkennen, mit folgenden Code:

object Main extends App { 
    println(com.github.fommil.netlib.BLAS.getInstance().getClass().getName()) 
    println(com.github.fommil.netlib.LAPACK.getInstance().getClass().getName()) 
} 

Wenn ich diesen Code ausführen i Antwort erhalten folgende:

$ java -jar artifacts/BLAStest-assembly-1.0.jar 
Mar 29, 2016 3:43:33 PM com.github.fommil.netlib.BLAS <clinit> 
WARNING: Failed to load implementation from: com.github.fommil.netlib.NativeSystemBLAS 
Mar 29, 2016 3:43:33 PM com.github.fommil.jni.JniLoader liberalLoad 
INFO: successfully loaded /tmp/jniloader6790966128222263615netlib-native_ref-linux-x86_64.so 
com.github.fommil.netlib.NativeRefBLAS 
Mar 29, 2016 3:43:33 PM com.github.fommil.netlib.LAPACK <clinit> 
WARNING: Failed to load implementation from: com.github.fommil.netlib.NativeSystemLAPACK 
Mar 29, 2016 3:43:33 PM com.github.fommil.jni.JniLoader load 
INFO: already loaded netlib-native_ref-linux-x86_64.so 
com.github.fommil.netlib.NativeRefLAPACK 

So scheint es hier ganz gut zu arbeiten. Aber Spark kann die Bibliotheken nicht erkennen. Ich habe diese Java-Abhängigkeit zu meiner Montage

com.github.fommil.netlib:all:1.1.2 

auch wenn ich einen Funken Shell mit diesem Paket zu starten versuchen jar hinzugefügt es nicht funktioniert.

spark-shell --packages com.github.fommil.netlib:all:1.1.2 

Antwort

3

Es sieht aus wie Ihre netlib-Java-Implementierung die NativeRefBLAS wird geladen, aber nicht die NativeSystemBLAS. Dies bedeutet, dass Sie die Aufnahme von "com.github.fommil.netlib: all" ordnungsgemäß durchführen, da Sie ohne die nicht-native F2J-Implementierung arbeiten würden. Das Problem besteht darin, dass Sie das vom System bereitgestellte BLAS (OpenBLAS) anstelle der Referenzimplementierung verwenden möchten, die mit netlib-java geliefert wurde. Es geht wahrscheinlich nur darum, die richtigen Shared Libraries an einem Ort zu finden, der für Ihre Spark Executors sichtbar ist.

Sie sagten, dass Sie libblas.so.3 verbunden, aber wie in der netlib-java readme beschrieben, müssen Sie auch die libblas.so konfigurieren, liblapack.so und liblapack.so.3:

sudo apt-get install libatlas3-base libopenblas-base 
sudo update-alternatives --config libblas.so 
sudo update-alternatives --config libblas.so.3 
sudo update-alternatives --config liblapack.so 
sudo update-alternatives --config liblapack.so.3 
+0

Dank für die Antwort. Für libblas.so oder liblapack.so wurden keine Alternativen gefunden. Ich weiß nicht, ob das schon eine Ursache sein könnte. Trotzdem verlinkt mein kleines Tool jetzt auf NativeSystemBLAS. Aber Spark Shell und jeder Funke-Job ist immer noch mit der F2J-Implementierung verbunden und ich kann nicht herausfinden, worin der Unterschied besteht: / – wobu

Verwandte Themen