我有一个数据流管道(Java 1.9.0),它从GCS读取数据然后输出到GroupBy变换。
我已经在生产中运行这条管道几个月而没有任何问题。但今天管道开始耗费两倍的时间。我读取了6亿行进入管道并通过转换步骤X.先前步骤X将以200k /秒的速度处理行,但现在我注意到在经过步骤X的5.75亿行后,性能急剧下降到大约5K /秒。
我在步骤X中添加了日志记录,以查看当> 5.75亿行已经通过转换时,我的代码是否在管道末端花费了更多时间,但我看到管道处理200k /时的时间是一致的秒
答案 0 :(得分:0)
由于异常缓慢的BigQuery导入花了一个多小时,这个作业失败了,如果在某些情况下太慢,可能会导致作业失败的服务端错误:我们正在调查这个错误。
尝试使用--experiments=enable_custom_bigquery_sink
运行您的作业或将SDK更新为2.0+ - 这可以解决问题。
我还注意到这个工作的管道结构似乎要比它应该复杂得多(它使用了大量类似的管道步骤,我相信许多类似的步骤可以压缩成一个工序)。
我建议在StackOverflow上发布一个问题,粗略地描述你想要完成什么,并询问用Beam / Dataflow表达它的简单方法是什么。
特别是,我怀疑TextIO.readAll()
转换会对你有很大的帮助(可以在HEAD或2.2中提供,应尽快发布) - 请参阅https://github.com/apache/beam/blob/master/sdks/java/core/src/main/java/org/apache/beam/sdk/io/TextIO.java - 以及可能的BigQuery中的DynamicDestinations支持(自2.0起可用)。