python - 无法在 Spark 上运行 TensorFlow

标签 python apache-spark tensorflow pyspark

我正在尝试让 TensorFlow 在我的 Spark 集群上运行,以使其并行运行。 一开始,我尝试使用这个 demo原样。

演示在没有 Spark 的情况下运行良好,但在使用 Spark 时,出现以下错误:

16/08/02 10:44:16 INFO DAGScheduler: Job 0 failed: collect at   /home/hdfs/tfspark.py:294, took 1.151383 s
Traceback (most recent call last):
  File "/home/hdfs/tfspark.py", line 294, in <module>
    local_labelled_images = labelled_images.collect()
  File "/usr/hdp/2.4.2.0-258/spark/python/lib/pyspark.zip/pyspark/rdd.py", line 771, in collect
  File "/usr/hdp/2.4.2.0-258/spark/python/lib/py4j-0.9-src.zip/py4j/java_gateway.py", line 813, in __call__
  File "/usr/hdp/2.4.2.0-258/spark/python/lib/py4j-0.9-src.zip/py4j/protocol.py", line 308, in get_return_value
py4j.protocol.Py4JJavaError16/08/02 10:44:17 INFO BlockManagerInfo: Removed broadcast_2_piece0 on localhost:45020 in memory (size: 6.4 KB, free: 419.5 MB)
16/08/02 10:44:17 INFO ContextCleaner: Cleaned accumulator 2
: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 1 times, most recent failure: Lost task 0.0 in stage 0.0 (TID 0, localhost): org.apache.spark.api.python.PythonException: Traceback (most recent call last):
  File "/usr/hdp/2.4.2.0-258/spark/python/lib/pyspark.zip/pyspark/worker.py", line 98, in main
    command = pickleSer._read_with_length(infile)
  File "/usr/hdp/2.4.2.0-258/spark/python/lib/pyspark.zip/pyspark/serializers.py", line 164, in _read_with_length
    return self.loads(obj)
  File "/usr/hdp/2.4.2.0-258/spark/python/lib/pyspark.zip/pyspark/serializers.py", line 422, in loads
    return pickle.loads(obj)
  File "/usr/lib/python2.7/site-packages/six.py", line 118, in __getattr__
    _module = self._resolve()
  File "/usr/lib/python2.7/site-packages/six.py", line 115, in _resolve
    return _import_module(self.mod)
  File "/usr/lib/python2.7/site-packages/six.py", line 118, in __getattr__
    _module = self._resolve()
  File "/usr/lib/python2.7/site-packages/six.py", line 115, in _resolve
    return _import_module(self.mod)
  File "/usr/lib/python2.7/site-packages/six.py", line 118, in __getattr__
    _module = self._resolve()
.
.
.
RuntimeError: maximum recursion depth exceeded

我在使用pyspark 或直接使用spark-submit 时出现同样的错误。

我试图将递归限制增加到 50000(尽管它可能不是根本原因),但没有帮助。

由于错误与 six 包有关,我认为 python 3 可能会修复它,但我还没有尝试,因为它可能需要调整我们的生产环境(如果能避免就更好了)。

python 3 是否应该与 pyspark 一起更好地工作? (我知道它适用于 TensorFlow)

知道如何让它与 python 2 一起工作吗?

我在 RHEL 7.2 和 python 2.7.5 上的 HortonWorks 集群中运行 TensorFlow 0.9.0 Spark 1.6.1。

谢谢

更新:

用 python 3.5 尝试过 - 得到相同的异常。所以显然升级到 python 3 不是可行的解决方法。

最佳答案

我终于意识到根本原因是六个模块本身 - 它与 spark 存在一些兼容性问题,并且无论何时加载都有问题。

因此,为了解决这个问题,我在演示中搜索了 six 包的所有用法,并将它们替换为 python 2 中的等效模块(例如,six.moves.urllib.response 简单地变成了 urllib2)。当删除所有出现的 6 时,该演示可以在 Spark 上完美运行。

关于python - 无法在 Spark 上运行 TensorFlow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38716584/

相关文章:

python - UserWarning : No training configuration found in save file: the model was *not* compiled. 手动编译

当 stroke_width > 2 时,Python wand 绘制多边形而不是矩形

python - 从 Python 执行存储过程

python - 如何在 PySpark shell session 中更新 pyfile?

scala - 如何在 Spark Scala 中使用 mapPartitions?

apache-spark - 为什么DataFrame Row.getAs [Vector]失败?

python - tensorflow GPU错误: InvalidArgumentError: Cannot assign a device for operation 'MatMul'

python - 张量板未在验证集上显示准确性和损失图

python - Django:ContentType.objects.get()抛出 "django.db.utils.ProgrammingError: relation "django_content_type“不存在”

Python for循环遍历一列的所有行