写入BigQuery时处理卡住

时间:2019-02-15 20:05:36

标签: java google-bigquery google-cloud-dataflow

我正在使用云数据流将数据从发布/订阅消息导入到BigQuery表中。我正在使用DynamicDestinations,因为这些消息可以放在不同的表中。

我最近注意到该过程开始消耗所有资源,并且显示该过程被卡住的消息开始显示:

Processing stuck in step Write Avros to BigQuery Table/StreamingInserts/StreamingWriteTables/StreamingWrite for at least 26h45m00s 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)

当前,只需取消管道并重新启动它似乎可以暂时解决问题,但我似乎无法查明进程卡住的原因。

管道正在使用Beam-runners-google-cloud-dataflow-java版本2.8.0和google-cloud-bigquery版本1.56.0

2 个答案:

答案 0 :(得分:1)

此日志消息可能看起来很吓人,但不表示有问题。该消息试图传达的是您的管道已经执行了相同的操作一段时间了。

这不一定是问题:您的文件可能足够大,需要一段时间才能写入。如果您遇到有关正在查看这些消息的问题,请考虑使用哪种管道,以及认为它可能有一些缓慢的步骤是否有意义。


对于您来说,您的管道已经写了26小时,因此这肯定是一个问题。我相信问题与旧版Beam中的库引入的死锁有关。在较新的版本(例如2.15.0)中,这应该不是问题。

答案 1 :(得分:0)

我可能迟到了聚会。但这可能会帮助某人。 我也遇到了类似的错误,在Beam 2.22版中也遇到了类似的错误。 但是事实证明,实际上这不是问题所在,在引发异常之前,有一些错误已在INFO中以静默方式传递。

BigQuery insertAll error, retrying, Not found: Dataset <projectname>:<datasetname>

由于错误,管道继续运行数天。

修复以上错误后,一切正常。因此,您可能会有其他令人无法原谅的例外悄悄地蔓延。

真实的故事!