2017-02-08 51 views
0

我的數據流的管道的功能,以便:雲數據流流持續未能插入

Read from Pubsub 
Transform data into rows 
Write the rows to bigquery 

上,有時數據傳遞哪些未能插入。沒關係,我知道這個失敗的原因。但是數據流不斷試圖一遍又一遍地插入這些數據。我想限制重試的次數,因爲它會用不相關的信息膨脹工作日誌。因此,當重複出現相同的錯誤時,要解決問題時非常困難。

當本地運行的管道,我得到:

no evaluator registered for Read(PubsubSource) 

我很想能夠在本地測試管道。但似乎數據流並不支持PubSub的這個選項。

要清除錯誤,我除了取消管道並在Google雲上運行新作業之外別無選擇。其中花費時間&錢。有沒有辦法限制錯誤?有沒有辦法在本地測試我的管道?有沒有更好的方法來調試管道?

Dataflow UI

職位編號:2017-02-08_09_18_15-3168619427405502955

+0

除了異常處理外,目前沒有辦法限制錯誤。請參閱此處底部的註釋:https://cloud.google.com/dataflow/pipelines/troubleshooting-your-pipeline#detecting-an-exception-in-worker-code它將無限期地嘗試重新運行您的代碼。我不認爲有一種方法可以在本地測試Pub/Sub,如果您查看他們通常從CSV文件中讀取本地運行數據的示例。 –

+1

假設,發生異常時Dataflow是否可以確認Pubsub消息?從我所知道的情況來看,除非Pubsub消息被成功處理,否則Cloud Dataflow將不會確認消息。 –

+0

這可能完全取決於您期待和想要處理的異常類型。作爲一個例子,你可以看看這個博客文章https://cloud.google.com/blog/big-data/2016/01/handling-invalid-inputs-in-dataflow在我的情況下,我收到並解析來自Pub/Sub的JSON消息,如果轉換失敗,我會捕獲並記錄有效負載以供以後分析。 –

回答

2

要使用無限數據集在本地運行的管道,上@巴勃羅的建議使用InProcessPipelineRunner

 dataflowOptions.setRunner(InProcessPipelineRunner.class); 

在本地運行程序使我能夠處理異常錯誤並快速優化工作流程。