Google DataFlow更新运行中管道作业未生效问题咨询
Dataflow 作业更新问题解答
一、更新操作遗漏的核心步骤
你当前的操作没有覆盖自定义模板更新作业的必填要求,所以会生成独立新作业而非替换原有运行中作业,遗漏点如下:
- 参数传递位置错误:
--update、--jobName是作业提交阶段的参数,如果你使用自定义模板流程,这两个参数不能写在管道代码里传给生成模板阶段的pipeline.run(),必须在执行gcloud命令运行模板的时候传入。生成模板阶段调用pipeline.run()只是输出模板文件到存储,不会和Dataflow上已运行的作业产生交互,传更新参数完全不生效。 - 必填参数缺失/不匹配:
- 必须传入
--gcs-location参数指定你新生成的自定义模板的存储路径 - 必须传入
--region参数,取值和原有运行作业的区域完全一致,区域不匹配时Dataflow会直接判定为创建新作业 - 必须完整传入原有作业启动时的所有必填运行参数,缺省任何必填参数都会导致更新逻辑不触发,转而创建独立新作业
- 必须传入
- 未校验旧作业状态:更新操作要求原有作业必须处于
Running状态,如果旧作业处于draining、cancelling、failed、succeeded状态,即使传入更新参数也只会创建新作业。
自定义模板更新作业的正确命令格式参考:
gcloud dataflow jobs run <原作业名称> \ --gcs-location=<新模板的存储路径> \ --region=<旧作业所属区域> \ --update \ <原作业启动时传入的所有自定义运行参数>
二、官方文档中“launch a new job(启动新作业)”的定义
文档里更新流程提到的“启动新作业”,指的是携带更新参数向Dataflow服务提交作业实例、替换原有运行作业的最终提交动作,对应不同运行模式指代不同:
- 如果你是不使用模板、本地直接运行管道代码提交作业的模式,这个动作就是传入正确更新参数后调用
pipeline.run()的操作; - 如果你是使用自定义模板/经典模板的运行模式,这个动作就是执行
gcloud dataflow jobs run命令提交作业的操作,不包含本地调用pipeline.run()生成模板的步骤。
内容的提问来源于stack exchange,提问作者uri2563
相关产品推荐
相关产品推荐

