排查 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线上问题排查之五)