数据流管道-“处理在步骤<STEP_NAME>中停留了至少<TIME>,而没有在状态完成中输出或完成...”

Cai*_*iva 8 google-cloud-dataflow apache-beam

我的团队开发的数据流管道突然开始卡住,停止处理事件。他们的工作日志充满警告消息,指出一个特定步骤被卡住了。奇怪的是,失败的步骤是不同的,一个是BigQuery输出,另一个是Cloud Storage输出。

以下是我们收到的日志消息:

对于BigQuery输出:

Processing stuck in step <STEP_NAME>/StreamingInserts/StreamingWriteTables/StreamingWrite for at least <TIME> without outputting or completing in state finish
  at sun.misc.Unsafe.park(Native Method)
  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
  at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429)
  at java.util.concurrent.FutureTask.get(FutureTask.java:191)
  at org.apache.beam.sdk.io.gcp.bigquery.BigQueryServicesImpl$DatasetServiceImpl.insertAll(BigQueryServicesImpl.java:765)
  at org.apache.beam.sdk.io.gcp.bigquery.BigQueryServicesImpl$DatasetServiceImpl.insertAll(BigQueryServicesImpl.java:829)
  at org.apache.beam.sdk.io.gcp.bigquery.StreamingWriteFn.flushRows(StreamingWriteFn.java:131)
  at org.apache.beam.sdk.io.gcp.bigquery.StreamingWriteFn.finishBundle(StreamingWriteFn.java:103)
  at org.apache.beam.sdk.io.gcp.bigquery.StreamingWriteFn$DoFnInvoker.invokeFinishBundle(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

对于云存储输出:

Processing stuck in step <STEP_NAME>/WriteFiles/WriteShardedBundlesToTempFiles/WriteShardsIntoTempFiles for at least <TIME> without outputting or completing in state process
  at sun.misc.Unsafe.park(Native Method)
  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
  at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429)
  at java.util.concurrent.FutureTask.get(FutureTask.java:191)
  at com.google.cloud.hadoop.util.AbstractGoogleAsyncWriteChannel.waitForCompletionAndThrowIfUploadFailed(AbstractGoogleAsyncWriteChannel.java:421)
  at com.google.cloud.hadoop.util.AbstractGoogleAsyncWriteChannel.close(AbstractGoogleAsyncWriteChannel.java:287)
  at org.apache.beam.sdk.io.FileBasedSink$Writer.close(FileBasedSink.java:1007)
  at org.apache.beam.sdk.io.WriteFiles$WriteShardsIntoTempFilesFn.processElement(WriteFiles.java:726)
  at org.apache.beam.sdk.io.WriteFiles$WriteShardsIntoTempFilesFn$DoFnInvoker.invokeProcessElement(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

所有应用程序都已被排干并重新部署,但是一段时间(3到4个小时)后发生了相同的事情。其中一些已经运行了40多个天,而他们突然进入了代码库,而没有对代码进行任何更改。

我想寻求帮助以了解此问题的原因。这些是存在这些问题的某些Dataflow作业的以下ID:

卡在BigQuery输出中:2019-03-04_04_46_31-3901977107649726570

卡在云存储输出中:2019-03-04_07_50_00-10623118563101608836

Pab*_*blo 5

这些Processing stuck消息并不一定意味着您的管道实际上已卡住。这些消息由执行相同操作超过 5 分钟的工作人员记录。

通常,这仅表示操作缓慢:外部 RPC,或等待外部进程(在对 BigQuery 执行加载或查询作业时非常常见)。

如果您看到此类消息在您的管道中经常发生,或者数量越来越多(5m10m50m1h等),那么它可能表示卡住了 - 但如果您偶尔在管道中看到它,则无需担心。


值得考虑的是,在旧版本的 Beam(从 2.5.0 到 2.8.0)中,用作默认安全提供程序的 Conscrypt 库存在死锁问题。从Beam 2.9.0 开始,Conscrypt 不再是默认的安全提供者

另一种选择是降级到 Beam 2.4.0,其中 conscrypt 也不是默认提供程序。

  • 我已经尝试了 Beam 2.11 甚至 2.12,但我的数据流工作仍然卡住了。根据作业的不同,处理可能会在出现足够多的错误后完全停止或在一段时间后重新启动。我一直无法找到一种模式,但在高容量时段,错误肯定会更频繁地发生。 (3认同)