gpt4 book ai didi

java - Apache NiFi - OutOfMemory 错误 : GC overhead limit exceeded on SplitText processor

转载 作者:搜寻专家 更新时间:2023-11-01 02:21:49 25 4
gpt4 key购买 nike

我正在尝试使用 NiFi 使用 HDF 1.2 处理大型 CSV 文件(每个文件可能有数十亿条记录)。我已经实现了我的流程,对于小文件一切正常。

问题是,如果我尝试将文件大小增加到 100MB(1M 记录),我会从 SplitTextjava.lang.OutOfMemoryError: GC overhead limit exceeded > 负责将文件拆分为单个记录的处理器。我已经搜索过了,这基本上意味着垃圾收集器在没有获得太多堆空间的情况下执行了太长时间。我希望这意味着生成太多流文件的速度太快了。

我该如何解决这个问题?我试过更改 nifi 关于最大堆空间和其他内存相关属性的配置,但似乎没有任何效果。

现在我添加了一个行数为 1K 的中间 SplitText,这让我可以避免错误,但我不认为这是传入文件大小何时会变大的可靠解决方案变得可能远不止于此,恐怕我会从处理器那里得到相同的行为。

欢迎任何建议!谢谢

最佳答案

错误的原因是当拆分行数为 1 的 1M 记录时,您正在创建等同于 1M Java 对象的 1M 流文件。总的来说,使用两个 SplitText 处理器的方法很常见,可以避免同时创建所有对象。您可能会在第一次拆分时使用更大的拆分大小,例如 10k。对于 10 亿条记录,我想知道第三个级别是否有意义,从 1B 到 10M,然后 10M 到 10K,然后 10K 到 1,但我必须使用它。

需要考虑的其他一些事情是将默认堆大小从 512MB 增加,您可能已经这样做了,还要确定是否真的需要拆分为 1 行。如果不了解有关流程的任何其他信息,很难说,但在很多情况下,如果您想将每一行传送到某个地方,您可能会有一个处理器读取一个大的分隔文件并将每一行流式传输到目的地。例如,这就是 PutKafka 和 PutSplunk 的工作方式,它们可以获取一个 1M 行的文件并将每一行流式传输到目的地。

关于java - Apache NiFi - OutOfMemory 错误 : GC overhead limit exceeded on SplitText processor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38653745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com