升级到Beam 2.30.0后Cloud Build触发Dataflow Flex工作流报错如何修复
问题原因
Beam 2.30.0版本调整了Dataflow运行器的自定义容器支持逻辑:未显式启用Dataflow Runner v2时,不允许使用自定义SDK容器镜像,这是触发报错的核心原因,和你使用的入口执行器是python还是cloud-sdk无关。
另外你可以先核对下报错中的镜像名gcr.io/datascience-projects/pipeline:latestRun是否符合预期,若你原本的镜像标签是latest,需要检查变量替换逻辑是否出现了字符拼接错误,把无关的Run后缀拼到了镜像标签上。
修复方案
方案一(推荐,适配Flex模板场景)
直接在YAML配置的args列表中追加启用Runner v2的参数即可,其余原有配置不需要改动:
- name: gcr.io/$PROJECT_ID/$_IMAGE entrypoint: python args: - /dataflow/template/main.py - --runner=DataflowRunner - --experiments=use_runner_v2 # 新增这一行即可 - --project=$PROJECT_ID - --region=$_REGION - --job_name=$_JOB_NAME - --temp_location=$_TEMP_LOCATION - --sdk_container_image=gcr.io/$PROJECT_ID/$_IMAGE - --disk_size_gb=50 - --year=2018 - --quarter=QTR1 - --fmpkey=$_FMPKEY - --setup_file=/dataflow/template/setup.py
Dataflow Runner v2是当前官方主推的运行器版本,对自定义容器、流式任务特性的支持都更完善,没有特殊兼容性问题优先选这个方案。
方案二(适配无自定义依赖场景)
如果你暂时无法启用Runner v2,且你的pipeline没有自定义依赖,可以移除--sdk_container_image参数,Dataflow会自动拉取对应Beam版本的官方SDK镜像运行任务,该方案不适合需要打包自定义依赖的Flex模板场景。
补充说明
不需要调整entrypoint为cloud-sdk,当前的python入口配置没有问题,不会导致该报错。
内容的提问来源于stack exchange,提问作者user1068378
相关产品推荐
相关产品推荐

