![](/img/trans.png)
[英]In GCP Dataflow/Apache Beam Python SDK, is there a time limit for DoFn.process?
[英]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.