Google 当有多个源时,数据流不会一次读取超过 3 个输入压缩文件

Google Dataflow not reading more than 3 input compressed files at once when there are multiple sources

背景:我在 google 存储中存储了 30 个单独的压缩文件中的 30 天数据。我必须将它们写入同一 table 中 30 个不同分区中的 BigQuery table。每个压缩文件大小约为 750MB。

我今天在 Google Dataflow 上对同一个数据集做了 2 个实验。

实验 1:我使用 TextIO 读取每天的压缩文件,应用简单的 ParDo 转换来准备 TableRow 对象,并使用 BigQueryIO 将它们直接写入 BigQuery。所以基本上创建了 30 对平行的未连接源和接收器。但我发现在任何时间点,只有 3 个文件被读取、转换和写入 BigQuery。 Google Dataflow 的 ParDo 转换和 BigQuery 写入速度在任何时间点都在 6000-8000 elements/sec 左右。 因此,在任何时候,30 个中只有 3 个源和汇被处理,这大大减慢了进程。在 90 多分钟内,30 个文件中只有 7 个被写入 table.

的独立 BigQuery 分区

实验2:这里我首先从同一个压缩文件中读取30天的每一天的数据,对这30个PCollections应用ParDo转换并将这30个结果Pcollections存储在一个PCollectionList 对象。所有这 30 个 TextIO 源都被并行读取。 现在我直接使用BigQueryIO将PCollectionList中每天的数据对应的每个PCollection写入BigQuery。所以 30 个接收器被再次并行写入。 我发现在 30 个并行源中,再次只有 3 个源被读取并以大约 20000 elements/sec 的速度应用 ParDo 转换。在写这个问题时已经过了 1 小时,从所有压缩文件中读取甚至还没有完全读取 50% 的文件并且写入 BigQuery table 分区甚至还没有开始。

这些问题似乎只有在 Google Dataflow 读取压缩文件时才会出现。我问了一个关于它从压缩文件中读取速度慢的问题 (),并被告知并行化工作会使读取速度更快,因为只有 1 个工作人员读取一个压缩文件,而多个源将意味着多个工作人员有机会读取多个文件。但这似乎也不起作用。

有什么方法可以加快从多个压缩文件读取并同时写入数据流作业中 BigQuery 中相同 table 的不同分区的整个过程?

每个压缩文件将由一个工作人员读取。可以使用 numWorkers 管道选项增加作业的初始工作人员数量,可以使用 maxNumWorkers 管道选项设置可以扩展到的最大数量。