排查 apache 光束管道导入错误 [BoundedSource 对象大于允许的限制]

Posted

技术标签:

【中文标题】排查 apache 光束管道导入错误 [BoundedSource 对象大于允许的限制]【英文标题】:Troubleshooting apache beam pipeline import errors [BoundedSource objects is larger than the allowable limit] 【发布时间】:2018-02-06 17:00:27 【问题描述】:

我有一堆文本文件 (~1M) 存储在谷歌云存储上。当我将这些文件读入 Google Cloud DataFlow 管道进行处理时,我总是收到以下错误:

Total size of the BoundedSource objects returned by BoundedSource.split() operation is larger than the allowable limit

故障排除页面显示:

如果您通过 TextIO、AvroIO 或其他基于文件的源从大量文件中读取,您可能会遇到此错误。具体限制取决于源的详细信息(例如,在 AvroIO.Read 中嵌入架构将允许更少的文件),但它在一个管道中大约有数万个文件。

这是否意味着我必须将文件拆分成更小的批次,而不是一次全部导入?

我正在使用数据流 python sdk 来开发管道。

【问题讨论】:

我不知道为什么人们投票结束这个问题。这是人们在使用 Apache Beam 编程时经常遇到的一个非常合理的问题。 【参考方案1】:

将文件分批是一种合理的解决方法 - 例如使用多个 ReadFromText 转换或使用多个管道读取它们。我认为在 1M 文件级别,第一种方法行不通。最好使用新功能:

读取大量文件的最佳方法是使用ReadAllFromText。它没有可扩展性限制(尽管如果您的文件数量非常少,它的性能会更差)。

它将在 Beam 2.2.0 中提供,但如果您愿意使用快照构建,它已经在 HEAD 提供。

有关 Java 版本,另请参阅 How can I improve performance of TextIO or AvroIO when reading a very large number of files?。

【讨论】:

这似乎不适用于 Cloud Storage。 Beam 在此处使用 Create PColl 对其进行测试:github.com/kasakun/GAE-Data-Flow/blob/… 但我找不到与 Google Cloud 的用法。任何示例都会有所帮助。

以上是关于排查 apache 光束管道导入错误 [BoundedSource 对象大于允许的限制]的主要内容,如果未能解决你的问题,请参考以下文章

异常:org.apache.catalina.connector.ClientAbortException : java.io.IOException: 断开的管道发现与排查(JVM线上问题排查之五)

异常:org.apache.catalina.connector.ClientAbortException : java.io.IOException: 断开的管道发现与排查(JVM线上问题排查之五)

异常:org.apache.catalina.connector.ClientAbortException : java.io.IOException: 断开的管道发现与排查(JVM线上问题排查之五)

异常:org.apache.catalina.connector.ClientAbortException : java.io.IOException: 断开的管道发现与排查(JVM线上问题排查之五)

在 GCP Dataflow 上的 python apache 光束中使用 scipy

在 apache 梁管道 Python 中跳过步骤