内存不足:Apache Beam 流作业

时间:2021-07-13 12:48:26

标签: google-cloud-dataflow apache-beam

我有一个从 Pub/Sub 读取的管道,然后使用 1 分钟的窗口并获取每个键的最新元素并将该元素插入到 BigQuery。代码非常简单。

由于 WriteToBigQuery 内的批处理对我不起作用,它始终为 1,因此我决定在该步骤之前使用 BatchElements,然后使用 FlatMap 将批处理展平并存储事件到 BigQuery。有了这个,插入是分批完成的,我猜这是因为正在创建包。代码如下:

    tagged_events[table]
                | f"Reshuffle to {table}" >> Reshuffle()
                | f"Batch  {table} elements"
                >> BatchElements(
                    min_batch_size=BIGQUERY_INSERT_MAX_BATCH_SIZE, max_batch_size=BIGQUERY_INSERT_MAX_BATCH_SIZE
                )
                | f"Flatten batch of {table}" >> FlatMap(flatten_list)
                | f"Write to {table}"
                >> WriteToBigQuery(
                    table=f"{self.project}:{self.dataset}.{table}",
                    create_disposition=BigQueryDisposition.CREATE_NEVER,
                    write_disposition=BigQueryDisposition.WRITE_APPEND,
                    insert_retry_strategy=RetryStrategy.RETRY_NEVER,
                    ignore_insert_ids=True,
                    batch_size=BIGQUERY_INSERT_MAX_BATCH_SIZE,
                )

BIGQUERY_INSERT_MAX_BATCH_SIZE 是 500。几天后,作业收到 OOM 错误,并终止了线束进程。我们正在使用 n2-standard-4 机器来完成这项工作,最大工人数为 20。 降低批量大小会对此有帮助吗?或者我还能做些什么来避免这个问题?

0 个答案:

没有答案