Mysql 并行运行大数据的Pentaho表输入步骤
我对Pentaho比较陌生。我正在做一项35个并行转换的工作,每个转换都从MySQL数据库中读取大约100万数据,并存储到另一个数据库(MSSQL)中 但它在几分钟内失败,并显示:Mysql 并行运行大数据的Pentaho表输入步骤,mysql,pentaho,transformation,kettle,pentaho-spoon,Mysql,Pentaho,Transformation,Kettle,Pentaho Spoon,我对Pentaho比较陌生。我正在做一项35个并行转换的工作,每个转换都从MySQL数据库中读取大约100万数据,并存储到另一个数据库(MSSQL)中 但它在几分钟内失败,并显示:java.lang.OutOfMemoryError:GC开销限制超过了 我想知道如何简化这个过程,是否有任何方法可以以批处理方式读取数据,或者在转换中使用循环,以便在每次转换中以块(比如5000)的形式读取数据 另外,在并行运行这么多转换时,从表中读取大型数据的最佳方法是什么。以及“行集中行的Nr”值如何影响海量数据
java.lang.OutOfMemoryError:GC开销限制超过了
我想知道如何简化这个过程,是否有任何方法可以以批处理方式读取数据,或者在转换中使用循环,以便在每次转换中以块(比如5000)的形式读取数据
另外,在并行运行这么多转换时,从表中读取大型数据的最佳方法是什么。以及“行集中行的Nr”值如何影响海量数据的性能
我尝试了论坛上的一些东西,但没有得到任何明显的改进
请让我知道,如果我可以分享更多的细节更好的解释
提前谢谢 我过去曾在类似的场景中使用过PDI,但使用的数据库不同 对于直接的表拷贝或简单的行级转换,我从未遇到过内存问题。一个很大的区别是,我使用了一个转换,其中有20个表输入,每个表输入连接到它们自己的表输出。这样的话,开销可能会更低 据我所知,转换中的每个跃点表示一个行缓冲区,默认情况下最多可容纳10k行。这些在度量中作为步骤的输入/输出缓冲区可见,并保存在内存中。这意味着行越大,步骤越多,需要的内存就越多 对于最基本的情况(表输入->表输出),您将有一个10k行缓冲区。如果行的平均值为100字节,则需要超过。。。1 MB。 如果有11个步骤(10个缓冲区)和32kb的行大小,那么如果所有缓冲区都已满,则可能需要超过3.2GB的空间 还有一些特殊情况下的步骤,需要在开始输出行之前保留很多行甚至所有行。分组方式、排序、阻塞步骤都是示例。其中一些具有将中间数据写入磁盘的能力,而另一些则没有。避免这些批量操作,或者特别注意它们的数据流以优化它 如果目标数据库跟不上(这是一种常见的情况,因为写入成本更高),所有缓冲区都会很快填满。同时向数据库写入如此多的转换也可能会影响性能 优化此类操作有很多方面,因此我无法一一列出,但这些方面在过去为我解决了一些问题:
- 增加每次提交的行数,这可能会提高目标数据库的吞吐量
- 增加Java堆(启动文件中的-Xmx选项)
- 在源数据库中进行排序
- 如果数据库擅长分组,就在数据库中进行分组(MySQL给了我糟糕的结果)
- 如果在表输出之前有许多步骤,并且缓冲区已满,请拆分转换。将文本文件输出替换为表输出,因为这些输出通常是闪电般的快。在第二个转换中,您只将文本文件输入和表输出放在一起
- 增加每次提交的行数,这可能会提高目标数据库的吞吐量
- 增加Java堆(启动文件中的-Xmx选项)
- 在源数据库中进行排序
- 如果数据库擅长分组,就在数据库中进行分组(MySQL给了我糟糕的结果)
- 如果在表输出之前有许多步骤,并且缓冲区已满,请拆分转换。将文本文件输出替换为表输出,因为这些输出通常是闪电般的快。在第二个转换中,您只将文本文件输入和表输出放在一起