2016-10-03 13 views
8

Uruchamiamy polecenie z przesłaniem iskry na skrypcie Pythona, który używa Sparka do równoległego wykrywania obiektów w Pythonie za pomocą Caffe. Sam skrypt działa idealnie dobrze, jeśli jest uruchamiany w skrypcie tylko w języku Python, ale zwraca błąd importu podczas używania go z kodem Spark. Wiem, że kod iskrowy nie jest problemem, ponieważ działa doskonale na moim komputerze domowym, ale nie działa dobrze na AWS. Nie jestem pewien, czy w jakiś sposób ma to związek ze zmiennymi środowiskowymi, to tak, jakby ich nie wykrył.Problemy z iskrami z importowaniem w języku Python

Te zmienne środowiskowe są ustawione:

SPARK_HOME=/opt/spark/spark-2.0.0-bin-hadoop2.7 
PATH=$SPARK_HOME/bin:$PATH 
PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH 
PYTHONPATH=/opt/caffe/python:${PYTHONPATH} 

Błąd:

16/10/03 01:36:21 WARN TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, 172.31.50.167): org.apache.spark.api.python.PythonException: Traceback (most recent call last): 
File "/opt/spark/spark-2.0.0-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/worker.py", line 161, in main 
    func, profiler, deserializer, serializer = read_command(pickleSer, infile) 
File "/opt/spark/spark-2.0.0-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/worker.py", line 54, in read_command 
    command = serializer._read_with_length(file) 
File "/opt/spark/spark-2.0.0-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/serializers.py", line 164, in _read_with_length 
    return self.loads(obj) 
File "/opt/spark/spark-2.0.0-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/serializers.py", line 422, in loads 
    return pickle.loads(obj) 
File "/opt/spark/spark-2.0.0-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/cloudpickle.py", line 664, in subimport 
    __import__(name) 
ImportError: ('No module named caffe', <function subimport at 0x7efc34a68b90>, ('caffe',)) 

Czy ktoś wie, dlaczego miałoby to być problemem?

Ten pakiet od Yahoo zarządza tym, co próbujemy zrobić, wysyłając Caffe jako zależność od słoika, a następnie używa go ponownie w Pythonie. Ale nie znalazłem żadnych zasobów, jak go zbudować i sami go zaimportować.

https://github.com/yahoo/CaffeOnSpark

+0

Może możesz spróbować załadować pakiet Pythona używając '.egg' zgodnie z sugestią [tutaj] (http: //stackoverflow.com/questions/24686474/shipping-python-modules-in-pyspark-to-other-nodes) –

+0

Próbowałem, że nie działa. Mam googleed, że najwyraźniej muszę wyeksportować go jako pakiet JAR, ale nie wiem jak go zbudować, a następnie zaimportować go do Pythona. – alfredox

+0

Jeśli zbudowałeś caffe ze źródła, czy próbowałeś ręcznie dodać biblioteki caffe do 'LD_LIBRARY_PATH'? Czy próbowałeś importować caffe z terminala Pythona? – ar7

Odpowiedz

4

Prawdopodobnie nie zebraliśmy Caffè obwolut Python w środowisku AWS. Z powodów, które całkowicie mnie omijają (i kilku innych, https://github.com/BVLC/caffe/issues/2440) pycaffe nie jest dostępny jako pakiet pypi, a sam musisz go skompilować. Powinieneś postępować zgodnie z instrukcjami kompilacji/instrukcji tutaj lub zautomatyzować je za pomocą rozszerzeń e-mail, jeśli jesteś w środowisku AWS EB: http://caffe.berkeleyvision.org/installation.html#python

+0

Mam, nawet uruchomiłem polecenie ipython, a następnie "importowałem caffe" i działało dobrze. W rzeczywistości mogę uruchomić czysty skrypt Pythona samodzielnie w każdym węźle, a wszystkie one importują caffe doskonale i wykonują wszystkie przetwarzanie. To tylko w trybie klastrowym, że z jakiegoś powodu ignoruje wszystkie env vars i nie chce odebrać caffe. – alfredox

+0

@alfredox: gdzie uruchamiasz ipython, który możesz zaimportować caffe? – 2ps

+0

W węzłach roboczych jako użytkownik "ubuntu". Więc masz swojego mistrza, a następnie robotnicy łączą się z mistrzem, tworząc gromadę. Uruchomiłem to na każdym węźle roboczym i wszystko działa poprawnie. To tak, jakby pracownicy otrzymywali zadania od mistrza, aby uruchomić ten skrypt, uruchamiają to zadanie w jakimś kontenerze, który nie daje im dostępu do reszty systemu plików, takiego jak ścieżka opt/caffe, aby odpowiednio zaimportuj tę bibliotekę do Pythona. – alfredox

Powiązane problemy