1

我正在嘗試通過將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

回答

1

您需要檢查Updating an Existing Pipeline

防止兼容性符:

  • 更改流水線圖形而不提供的映射
  • 用於步驟
  • 改變編碼器爲一個步驟更改側輸入。
  • 您已從管線中刪除「有狀態」操作
  • 您正試圖在不同的地理區域中運行替換作業。

您可以在StackDriver Logging中搜索示例「沒有穩定的唯一名稱」。也許一些ParDo是匿名的。

+0

以上所有內容均未中斷。我沒有在部署中更新代碼。請看看編輯原始問題。 – Mayumi