在写入BigQuery Apache beam v2.0时,GroupByKey中的元素累积子任务

时间:2017-05-25 22:26:55

标签: google-cloud-dataflow apache-beam

我正在实现一个Dataflow管道,该管道从Pubsub读取消息,并使用Apache Beam SDK 2.0.0 for Java将TableRows写入BigQuery(BQ)。

这是代码的相关部分:

 tableRowPCollection
            .apply(BigQueryIO.writeTableRows().to(this.tableId)
                .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_NEVER)
                .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND));

此代码在Dataflow管道中生成一组任务。其中一个任务是GroupByKey。此任务正在累积管道中的元素,如此打印屏幕中所示: GBK elements accumulation image. 阅读文档后,我怀疑这个问题与Window配置有关。但是我找不到修改Window配置的方法,因为它是由 Window.Assign 在重新洗牌任务中创建的隐式创建的。

有没有办法设置窗口参数和/或将触发器附加到这个隐式 Window ,还是应该创建自己的在BQ中插入TableRow的DoFn?

提前致谢!

[更新]

我离开管道大约运行一天,然后GroupByKey子任务变得更快,进出的元素数量相互接近(有时是相同的)。此外,我还注意到Watermark更接近当前日期并且增长更快。那么"问题"解决了。​​

1 个答案:

答案 0 :(得分:0)

BigQuery接收器中的Reshuffle没有引入任何等待。相反,它用于创建要写入BigQuery的行的批处理。来自GroupByKey的元素数量较少,因为每个输出元素代表一批(或组)输入元素。

您应该能够看到作为ExpandIterable输出的元素总数(Reshuffle的输出)。