无法通过更新标志更新数据流作业

时间:2016-07-30 03:55:12

标签: java streaming google-cloud-platform google-cloud-dataflow

我正在尝试通过将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 管道步骤。

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要查看Updating an Existing Pipeline

防止兼容性中断:

  • 在不提供映射的情况下更改管道图
  • 更改步骤的侧输入
  • 更改编码器的步骤。
  • 您已从管道中删除了“有状态”操作
  • 您正试图在不同的地理区域中运行替换作业。

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