我正在尝试通过将DataflowPipelineOptions中的setUpdate标志设置为true来更新DataFlow作业。我有一个函数,它使用名称检查现有作业,如果作业不存在,我将setUpdate标志设置为false,否则为true。这意味着第一次部署作业时,setUpdate标志设置为false,所有后续部署都将flag设置为true。
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):舞台视图地图/ StreamingViewAsMap / Combine.Globally / Combine.PerKey / GroupByKey已更改为与更新不兼容的方式。
View.asMap 函数是不可更新的?根据文档, SideInput 是可更新的。如错误所述,如果查看不可更新且 SideInput 需要查看,则文档会显示错误信息。
请注意,这不适用于 View.asMap 管道步骤。
谢谢!
答案 0 :(得分:1)
您需要查看Updating an Existing Pipeline
防止兼容性中断:
您可以在StackDriver Logging中搜索“没有稳定的唯一名称”的示例。也许一些ParDo是匿名的。