java - 写入 BigQuery 时处理卡住

标签 java google-bigquery google-cloud-dataflow

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

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

处理卡在步骤 Write Avros to BigQuery Table/StreamingInserts/StreamingWriteTables/StreamingWrite 至少 26h45m00s 没有输出或完成状态 finish at sun.misc.Unsafe.park(Native Method) at java.util.concurrent .locks.LockSupport.park(LockSupport.java:175) 在 java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429) 在 java.util.concurrent.FutureTask.get(FutureTask.java:191) 在 org。 apache.beam.sdk.io.gcp.bigquery.BigQueryServicesImpl$DatasetServiceImpl.insertAll(BigQueryServicesImpl.java:765) 在 org.apache.beam.sdk.io.gcp.bigquery.BigQueryServicesImpl$DatasetServiceImpl.insertAll(BigQueryServicesImpl.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(未知来源)

目前,简单地取消管道并重新启动它似乎可以暂时解决问题,但我似乎无法确定进程卡住的原因。

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

最佳答案

此日志消息可能看起来很可怕,但它并不表示存在问题。此消息试图传达的意思是您的管道已经执行了一段时间相同的操作。

这不一定是个问题:您的文件可能足够大,需要一些时间才能写入。如果您在回答这个问题时担心会看到这些消息,请考虑您的管道类型,以及认为它可能有一些缓慢的步骤是否有意义。


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

关于java - 写入 BigQuery 时处理卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54716332/

相关文章:

java - 您可以通过转换为列表来检查 char 数组是否包含特定的 char 值吗?

java - 为什么我无法将类导入 Eclipse Maven 项目中的 java 文件?

google-cloud-dataflow - GroupByKey 转换的早期结果

R 到 BigQuery 数据上传错误

python - 使用 pyspark 脚本从 bigquery 加载表到 spark 集群

java - 无法创建谷歌云数据流eclipse项目

java - Cloud Spanner 的数据流 : java. lang.IllegalArgumentException:Jetty ALPN/NPN 尚未正确配置

java - 在使用 Java 运行一些 Selenium WebDriver 测试之前清除缓存

Java - 预期为 “"” 但发现未知标记

google-cloud-platform - 在 BIG QUERY 中进行透视时,行数据有空格时会出现错误。字段只能包含字母 数字 下划线 以字母或下划线开头