繁体   English   中英

sdk_container_image apache/beam_python3.9_sdk:2.40.0 的数据流错误

[英]dataflow error with sdk_container_image apache/beam_python3.9_sdk:2.40.0

我花了一段时间尝试将自定义容器部署到 Google Cloud Dataflow(在 python 中)。 最终我将我的错误范围缩小到这个最小的例子:

python -m apache_beam.examples.wordcount \
--output gs://<your-ouput-dir> \
--runner=DataflowRunner \
--project=<your-project-id> \
--region us-central1 \
--temp_location=gs://<your-tmp-location> \
--worker_harness_container_image=apache/beam_python3.9_sdk:2.40.0 \
--experiment=use_runner_v2

此作业的许多变体都失败了,总是带有错误日志

Error message from worker: Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/apache_beam/internal/dill_pickler.py", line 285, in loads
    return dill.loads(s)
  File "/usr/local/lib/python3.9/site-packages/dill/_dill.py", line 275, in loads
    return load(file, ignore, **kwds)
  File "/usr/local/lib/python3.9/site-packages/dill/_dill.py", line 270, in load
    return Unpickler(file, ignore=ignore, **kwds).load()
  File "/usr/local/lib/python3.9/site-packages/dill/_dill.py", line 472, in load
    obj = StockUnpickler.load(self)
  File "/usr/local/lib/python3.9/site-packages/dill/_dill.py", line 462, in find_class
    return StockUnpickler.find_class(self, module, name)
AttributeError: Can't get attribute '_create_code' on <module 'dill._dill' from '/usr/local/lib/python3.9/site-packages/dill/_dill.py'>

最终我找到了解决方案:降级 sdk_container_image。 具体来说,这项工作已成功完成

python -m apache_beam.examples.wordcount \
--output gs://<your-ouput-dir> \
--runner=DataflowRunner \
--project=<your-project-id> \
--region us-central1 \
--temp_location=gs://<your-tmp-location> \
--worker_harness_container_image=apache/beam_python3.9_sdk:2.38.0 \
--experiment=use_runner_v2

从这里我能够构建一个自定义工作线束(通过 pip 安装apache-beam[gcp]==2.38.0 ,并从apache/beam_python3.9_sdk:2.38.0 Z05B6053C41A2130AFD6FC3BEZ58BDA 复制/opt/apache/beam中的脚本图片)。 简单地降级有点不满意。 有没有人遇到过这个 StockUnpickler 错误,并在 apache-beam 2.40.0 上找到了解决方法?

在这种情况下存在一个常见问题,您确定您的 Dataflow 作业(虚拟环境)的运行器具有相同版本的 Apache Beam Python,由 ZC5FD214CDD0D2B3B4272E7.40 使用?

运行程序实例化 Dataflow 作业,工作人员使用 Docker 映像。

为了运行良好,运行器使用的版本应该与 Docker 图像中使用的版本相同。

这是一个小细节,但对于 Beam 的最新版本,您可以使用sdk_container_image参数而不是worker_harness_container_image

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM