【问题标题】:Pentaho GC overhead in "Text File Input" with large file带有大文件的“文本文件输入”中的 Pentaho GC 开销
【发布时间】:2021-03-06 01:33:49
【问题描述】:

我有点卡在这里。我需要阅读一个非常大的 CSV 文件(42.000 行,180 列)。 CSV 有一个标题。

每次 “文本文件输入” 步骤尝试加载此文件时,由于堆空间不足和 GC 以 98% 的 CPU 工作,一段时间后 Pentaho 完成处理。

当我阅读以下文件时(小得多):

我每行都得到这个结果:

如何使用 “文本文件输入” 步骤读取较大的 CSV 文件,而不占用太多内存空间?每次都可以小批量读取吗?

我知道“CSV输入”这一步可以读取成批的行,但是结果不一样:

使用此步骤是否可以得到类似“文本文件输入”的结果?

更多数据:

  • 我在 JVM 中使用具有 Xms2048m y Xmx6144m 值的 Pentaho 8.1。我不能走得更远。
  • CSV 列和名称是动态的。

谢谢!!!

PD 1:CSV file (partial) PD 2:Transformation

【问题讨论】:

  • 由于您的配置是固定的“JVM 中的 Xms2048m y Xmx6144m 值”,因此现在您有 2 个选项。一个是查看NIO 缓冲区大小,另一个是并行运行。无论如何。还。您在转换的其他步骤中可能存在一些问题,从而导致此问题。你能用你的 CSV 文件分享你的转换吗?
  • @Runa 感谢您的回复。我添加了转换和简化的 CSV 文件。转换有一个 JS 步骤,在 CSV 文件中标记一些行,并且也使用大量内存。
  • 感谢您的文件。我个人处理包含大约 2000 万行的 csv 文件。好的。我会看看你的转变并回复你。
  • 谢谢你,@Runa!非常感谢您的帮助。

标签: memory memory-leaks pentaho


【解决方案1】:

您需要使用“CSV 文件输入”而不是“文本文件输入”。并且还需要配置以下选项

  1. NIO缓冲区大小设置为50000左右(指定读取缓冲区的大小,一次从源读取的字节数。)
  2. 选中并行运行选项。另外,更改起始副本数为 3/5 [右键单击 CSV 文件输入步骤]

我已使用您的文件(50000 行)运行您的转换,配置为 [-Xms2048m" "-Xmx3072m" "-XX:MaxPermSize=256m]。而且我还删除了您的 JS 步骤以进行测试。另外我不知道你为什么在这里使用笛卡尔加入?但发现它工作正常。 HERE.

【讨论】:

  • !最后,我解决了这个问题。 Java Script 步骤有三个变量,它们是常量。所以只有改变才能解决内存的过度使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多