内存不足错误 - Talend插入/更新作业

时间:2017-07-12 13:54:40

标签: talend

我的工作如下所示。 tmysqlinput_1包含需要在tmysqloutput中更新/插入的行。 tmysqlinput_2与tmysqloutput是同一个表。我通过内部联接在tmap中加入tmysqlinput_1和tmysqlinput_2。但是,当我在tmysqinput_1中放置一些测试行时,我知道这些测试行将导致更新分支,并运行该作业,我得到错误线程中的异常"线程0" java.lang.OutOfMemoryError:超出GC开销限制

我可以知道为什么插件没有发生这种情况但发生了更新?

Job with update and insert branches

由于 瑞斯

3 个答案:

答案 0 :(得分:0)

这取决于从数据库下载到您的Talend作业的数据量。

由于处理是标准的ETL处理,因此所有数据都将被加载到Talend作业中,从而消耗内存。根据您的行布局(行数x列数x列的数据类型),这将占用更多或更少的RAM。

因此,在这种情况下,我认为查找成本非常高,并且会导致内存不足。

解决方法的一种方法是将处理更改为ELT组件,将整个处理设置为数据库而不是Talend作业。

另一种方法是,根据用例,使用tMySQLOutput中的“插入忽略”或“插入或更新”。

答案 1 :(得分:0)

您可以通过在tmap中为查找设置选择临时选项true来在磁盘上执行此连接,并在tmap设置中提供临时目标路径

答案 2 :(得分:-2)

只需将 -Xmx1024M 添加到 Talend=> 运行/调试