我有一个 Dataflow 作业,它从 pubsub 读取数据并根据时间和文件名将内容写入 GCS,其中文件夹路径基于 YYYY/MM/DD。这允许根据日期在文件夹中生成文件,并使用 apache beamFileIO和Dynamic Destinations.
大约两周前,我注意到未确认消息的异常堆积。重新启动 df 作业后,错误消失了,新文件正在 GCS 中写入。
几天后,写入再次停止,除了这一次,有错误声称处理被卡住了。经过一些可靠的 SO 研究后,我发现这可能是由于 Beam 2.90 之前的死锁问题造成的,因为它使用 Conscrypt 库作为默认安全提供程序。所以,我从 Beam 2.8 升级到 Beam 2.11。
再一次,它起作用了,直到它没有。我更仔细地查看了这个错误,并注意到它有一个 SimpleDateFormat 对象的问题,它不是线程安全的。因此,我转而使用线程安全的 Java.time 和 DateTimeFormatter。它一直有效,直到它没有。但是,这一次,错误略有不同,并没有指向我的代码中的任何内容:错误如下所示。
Processing stuck in step FileIO.Write/WriteFiles/WriteShardedBundlesToTempFiles/WriteShardsIntoTempFiles for at least 05m00s 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 org.apache.beam.vendor.guava.v20_0.com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:469)
at org.apache.beam.vendor.guava.v20_0.com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:76)
at org.apache.beam.runners.dataflow.worker.MetricTrackingWindmillServerStub.getStateData(MetricTrackingWindmillServerStub.java:202)
at org.apache.beam.runners.dataflow.worker.WindmillStateReader.startBatchAndBlock(WindmillStateReader.java:409)
at org.apache.beam.runners.dataflow.worker.WindmillStateReader$WrappedFuture.get(WindmillStateReader.java:311)
at org.apache.beam.runners.dataflow.worker.WindmillStateReader$BagPagingIterable$1.computeNext(WindmillStateReader.java:700)
at org.apache.beam.vendor.guava.v20_0.com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:145)
此错误在作业部署后大约 5 小时开始发生,并且随着时间的推移而增加。写作在 24 小时内显着减慢。我有 60 名工人,我怀疑每次出现错误时都会有一名工人失败,这最终会杀死工作。
慕田峪4524236
饮歌长啸
相关分类