【发布时间】:2016-10-03 03:54:02
【问题描述】:
我们正在 python 脚本上运行 spark-submit 命令,该脚本使用 Spark 在 Python 中使用 Caffe 并行化对象检测。如果在纯 Python 脚本中运行,该脚本本身运行得非常好,但在将其与 Spark 代码一起使用时会返回导入错误。我知道 spark 代码不是问题,因为它在我的家用机器上运行良好,但在 AWS 上运行不佳。我不确定这是否与环境变量有关,就好像它没有检测到它们一样。
设置了这些环境变量:
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}
错误:
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',))
有谁知道为什么会出现这样的问题?
这个来自 Yahoo 的包通过将 Caffe 作为 jar 依赖项提供,然后在 Python 中再次使用它来管理我们正在尝试做的事情。但是我还没有找到任何关于如何自己构建和导入它的资源。
【问题讨论】:
-
也许您可以尝试使用
.egg加载python 包,如建议的here -
试过了,没用。我用谷歌搜索,显然我必须将其导出为 jar 包,但我不知道如何构建它然后将其导入 Python。
-
如果您从源代码构建 caffe,您是否尝试手动将 caffe 库添加到
LD_LIBRARY_PATH?您是否尝试过从 python 终端导入 caffe? -
这可能是由于两个可能的原因:相应的模块,
caffe不在 PYTHONPATH 中,在 spark 模式下运行时(在导入模块之前检查sys.path)以及由于某些原因spark进程没有caffe模块文件的权限(您可以尝试通过例如打开相应文件来检查权限) -
我已经在每个工作节点中打印了 PYTHONPATH,并且它正确设置了 caffe 路径“opt/caffe”,PATH 也是如此。我觉得你的第二个陈述可能是一个线索,我怀疑当工作人员出于某种原因运行任务时,他们没有权限或访问文件系统的其余部分。这可以通过将路径作为参数传递给 LD_LIBRARY_PATH 或其他一些确定任务在哪个用户下运行的 Spark 配置来解决?
标签: python apache-spark pyspark caffe pycaffe