Google cloud dataflow 数据流管道-“;处理卡在步骤中<;步骤名称>;至少<;时间>;不输出或完成状态完成…“;

Google cloud dataflow 数据流管道-“;处理卡在步骤中<;步骤名称>;至少<;时间>;不输出或完成状态完成…“;,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我的团队开发的数据流管道突然开始卡住,停止处理我们的事件。他们的员工日志中充满了警告信息,说某个特定步骤被卡住了。奇怪的是,失败的步骤是不同的,一个是BigQuery输出,另一个是云存储输出 以下是我们收到的日志消息: 对于BigQuery输出: Processing stuck in step <STEP_NAME>/StreamingInserts/StreamingWriteTables/StreamingWrite for at least <TIME> with

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

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

对于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)
处理卡在步骤/streaminginsert/StreamingWriteTables/StreamingWrite中至少一段时间,而没有在状态finish中输出或完成
在sun.misc.Unsafe.park(本机方法)
位于java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
位于java.util.concurrent.FutureTask.waitDone(FutureTask.java:429)
位于java.util.concurrent.FutureTask.get(FutureTask.java:191)
位于org.apache.beam.sdk.io.gcp.bigquery.BigQueryServiceSiml$DatasetServiceImpl.insertAll(BigQueryServiceSiml.java:765)
位于org.apache.beam.sdk.io.gcp.bigquery.BigQueryServiceSiml$DatasetServiceImpl.insertAll(BigQueryServiceSiml.java:829)
位于org.apache.beam.sdk.io.gcp.bigquery.StreamingWriteFn.flushRows(StreamingWriteFn.java:131)
位于org.apache.beam.sdk.io.gcp.bigquery.StreamingWriteFn.finishBundle(StreamingWriteFn.java:103)
位于org.apache.beam.sdk.io.gcp.bigquery.StreamingWriteFn$DoFnInvoker.invokeFinishBundle(未知源)
对于云存储输出:

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)
处理卡在步骤/WriteFiles/writeSharedBundleStotempFiles/writeSharedTotempFiles中至少一段时间,而不输出或完成状态进程
在sun.misc.Unsafe.park(本机方法)
位于java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
位于java.util.concurrent.FutureTask.waitDone(FutureTask.java:429)
位于java.util.concurrent.FutureTask.get(FutureTask.java:191)
在com.google.cloud.hadoop.util.AbstractGoogleAsyncWriteChannel.WaitForCompletionAndRowIf上传失败(AbstractGoogleAsyncWriteChannel.java:421)
位于com.google.cloud.hadoop.util.AbstractGoogleAsyncWriteChannel.close(AbstractGoogleAsyncWriteChannel.java:287)
位于org.apache.beam.sdk.io.FileBasedSink$Writer.close(FileBasedSink.java:1007)
位于org.apache.beam.sdk.io.WriteFiles$writeshardsintotempffilesfn.processElement(WriteFiles.java:726)
位于org.apache.beam.sdk.io.WriteFiles$WriteShardsIntoTempFilesFn$DoFnInvoker.invokeproceselement(未知源)
所有的应用程序都已耗尽并重新部署,但过了一段时间(3到4小时),同样的事情发生了。他们中的一些人已经运行了40多天,他们突然进入了这一阶段,代码没有任何变化

我想寻求一些帮助来了解这个问题的原因。 以下是存在这些问题的某些数据流作业的ID:

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


卡在云存储输出中:2019-03-04\u 07\u 50\u 00-10623118563101608836处理卡在消息中的
并不一定意味着您的管道实际被卡在一起。这些消息由执行相同操作超过5分钟的工作人员记录

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

如果您看到这类消息在您的管道中频繁出现,或者数量越来越多(
5m
10m
50m
1h
,等等),那么它可能表示阻塞-但如果您偶尔在管道中看到它,则无需担心


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


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

我也遇到了同样的问题,我发现最常见的情况是因为其中一个作业未能插入BigQuery表或未能将文件保存到CGS bucket中(非常罕见)。负责的线程未捕获异常并一直等待作业。这是ApacheBeam的一个bug,我已经为它创建了一个票证

让我们看看ApacheBeam的人员是否解决了这个问题(这实际上是一个未处理的异常)

到目前为止,我的建议是在插入之前验证数据的约束。因此,请记住以下事项: 1) 最大行大小(目前,流插入为1MB,批处理为100MB) 2) 未出现的所需值应在无法到达作业之前创建死信 3) 如果您有未知字段,请不要忘记启用ignoreUnknownFields选项(否则,它们将使您的工作失效)

我认为你只是在高峰时间有问题,因为更多的“不满意”事件正在到来


希望这能有点帮助,因为我遇到了同样的错误,原因是我创建了一个空的BigQuery表,但没有指定模式。在通过Dataflow加载数据之前,请确保使用架构创建BQ表。

您使用的是哪个版本的Dataflow SDK?我在2.5.0上的多个项目中也遇到了同样的情况。我们正在使用ApacheBeamSDK2.8.0,但我们可能发现了可能也会影响您的问题。Google称“管道可能会因为Conscrypt库的问题而阻塞。如果您看到Stackdriver日志中包含与Conscrypt相关调用的堆栈跟踪出现错误,您可能会受到此问题的影响。要解决此问题,请升级到SDK 2.9.0或降级到SDK 2.4.0。”。我们仍在测试它,但似乎这就是问题所在。我们在2.11.0中遇到了同样的问题