2016-10-03 16 views
8

Chúng tôi đang chạy lệnh spark-submit trên tập lệnh python sử dụng Spark để phát song song đối tượng trong Python bằng cách sử dụng Caffe. Bản thân tập lệnh chạy hoàn toàn tốt nếu chạy trong một tập lệnh chỉ Python, nhưng nó trả về lỗi nhập khi sử dụng nó với mã Spark. Tôi biết mã tia lửa không phải là vấn đề bởi vì nó hoạt động hoàn toàn tốt trên máy nhà của tôi, nhưng nó không hoạt động tốt trên AWS. Tôi không chắc chắn nếu điều này bằng cách nào đó đã làm với các biến môi trường, nó là như thể nó không phát hiện chúng.Các vấn đề về Spark với nhập khẩu bằng Python

Các biến môi trường được thiết lập:

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} 

Lỗi:

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',)) 

Có ai biết tại sao điều này sẽ là một vấn đề?

Gói này từ Yahoo quản lý những gì chúng tôi đang cố gắng thực hiện bằng cách chuyển Caffe thành phụ thuộc jar và sau đó sử dụng lại nó trong Python. Nhưng tôi không tìm thấy bất kỳ tài nguyên nào về cách xây dựng và tự nhập nó.

https://github.com/yahoo/CaffeOnSpark

+0

Có lẽ bạn có thể thử tải gói python bằng cách sử dụng '.gg' như được đề xuất [ở đây] (http: //stackoverflow.com/questions/24686474/shipping-python-modules-in-pyspark-to-other-nodes) –

+0

Đã thử rằng, không hoạt động. Tôi đã googled rằng dường như tôi phải xuất khẩu nó như là một gói jar, nhưng tôi không biết làm thế nào để xây dựng nó và sau đó nhập nó vào Python. – alfredox

+0

Nếu bạn xây dựng caffe từ nguồn, bạn có thử thêm các thư viện caffe vào 'LD_LIBRARY_PATH' theo cách thủ công không? Bạn đã thử nhập khẩu caffe từ một thiết bị đầu cuối python? – ar7

Trả lời

4

Bạn có lẽ đã không được biên dịch những gói python caffe trong môi trường AWS của bạn. Vì những lý do hoàn toàn thoát khỏi tôi (và một số khác, https://github.com/BVLC/caffe/issues/2440) pycaffe không có sẵn như là một gói pypi, và bạn phải tự biên dịch nó. Bạn nên làm theo hướng dẫn biên soạn/thực hiện tại đây hoặc tự động hóa nó bằng cách sử dụng ebextensions nếu bạn đang ở trong môi trường EBS EB: http://caffe.berkeleyvision.org/installation.html#python

+0

Tôi có, tôi thậm chí đã chạy lệnh ipython, và sau đó đã làm "nhập khẩu caffe" và nó đã làm việc tốt. Trong thực tế, tôi có thể chạy kịch bản python tinh khiết đứng một mình trong mỗi nút, và tất cả chúng đều nhập caffe hoàn toàn tốt và xử lý tất cả. Nó chỉ ở chế độ cluster mà vì lý do nào đó nó bỏ qua tất cả các vv env và không muốn nhận caffe. – alfredox

+0

@alfredox: bạn chạy ipython ở đâu để có thể nhập caffe? – 2ps

+0

Trong các nút công nhân là người dùng "ubuntu". Vì vậy, bạn có chủ của bạn, và sau đó các công nhân kết nối với các bậc thầy để tạo thành cụm. Tôi đã chạy trên mỗi nút công nhân và tất cả các công trình tốt. Nó gần như là khi người lao động nhận nhiệm vụ từ chủ để chạy tập lệnh đó họ đang chạy tác vụ bên trong một số loại vùng chứa không cung cấp cho họ quyền truy cập vào phần còn lại của hệ thống tệp chẳng hạn như đường dẫn opt/caffe để nhập thư viện đó bên trong python. – alfredox

Các vấn đề liên quan