无法通过更新标志更新Dataflow作业

无法通过更新标志更新Dataflow作业

问题描述:

我正在尝试通过将DataflowPipelineOptions中的setUpdate标志设置为true来更新DataFlow作业。我有一个函数用名称检查现有作业,如果作业不存在,我将setUpdate标志设置为false,否则为true。这意味着第一次部署作业时,setUpdate标志设置为false,所有后续部署将标志设置为true。无法通过更新标志更新Dataflow作业

options.setUpdate(jobExists(options)); 

管道代码如下:

pipeline 
    .apply("Read", pubsubDownload) 
    .apply("Window", Window.into(FixedWindows.of(WINDOW_DURATION))) 
    .apply("Extract", ParDo.of(new Extract())) 
    .apply("Count", ApproximateUnique.perKey(0.06)) 
    .apply("View As Map", View.asMap()); //<-- ****Fails here 

注:我只是想测试更新标志,以便没有改变部署中的代码的任何部分。只是想测试那个国旗设法用新的替换旧的工作。

但是这不起作用。我可以第一次成功部署这项工作。当我尝试再次部署作业时,出现以下错误:

工作流程失败。原因:(9a8ccc4f2e36c2d6):新作业与2016-07-29_08_07_42-9397818075052889951不兼容。原始作业尚未中止。,(9a8ccc4f2e36c371):阶段视图为Map/StreamingViewAsMap/Combine.Globally/Combine.PerKey/GroupByKey已更改的方式与更新不兼容。

View.asMap函数不可更新?根据文档,SideInput是可更新的。作为错误状态,如果查看不可更新和SideInput需要查看,该文档具有虚假信息。

请注意,这项工作没有View.asMap管道步骤。

谢谢!

+0

你能否详细说明你在原有工作与新工作之间的管道变化? –

+0

@BenChambers没有变化。我想测试更新标志,所以我部署了一次,并且第二次部署了,而没有触及任何代码。我更新了原始问题以反映更新失败的确切位置。 – Mayumi

+0

我们正在调查。 – jkff

您需要检查Updating an Existing Pipeline

防止兼容性符:

  • 更改流水线图形而不提供的映射
  • 用于步骤
  • 改变编码器为一个步骤更改侧输入。
  • 您已从管线中删除“有状态”操作
  • 您正试图在不同的地理区域中运行替换作业。

您可以在StackDriver Logging中搜索示例“没有稳定的唯一名称”。也许一些ParDo是匿名的。

+0

以上所有内容均未中断。我没有在部署中更新代码。请看看编辑原始问题。 – Mayumi