从两个不同的脚本运行相同的Kettle Job问题

时间:2014-01-09 14:09:44

标签: pentaho business-intelligence kettle

是否可以同时多次同时运行水壶作业?

我正在尝试

假设我们同时运行此脚本两次,

sh kitchen.sh -rep="development" -dir="job_directory" -job="job1"

如果我在某个时间点只运行一次,那么数据流就完全正常了。

但是,当我同时运行此命令两次时,它会抛出错误,如:

ERROR 09-01 13:34:13,295 - job1 - Error in step, asking everyone to stop because of:
ERROR 09-01 13:34:13,295 - job1 - org.pentaho.di.core.exception.KettleException: 
java.lang.Exception: Return code 1 received from statement : mkfifo /tmp/fiforeg
Return code 1 received from statement : mkfifo /tmp/fiforeg

    at org.pentaho.di.trans.steps.mysqlbulkloader.MySQLBulkLoader.execute(MySQLBulkLoader.java:140)
    at org.pentaho.di.trans.steps.mysqlbulkloader.MySQLBulkLoader.processRow(MySQLBulkLoader.java:267)
    at org.pentaho.di.trans.step.RunThread.run(RunThread.java:50)
    at java.lang.Thread.run(Thread.java:679)
Caused by: java.lang.Exception: Return code 1 received from statement : mkfifo /tmp/fiforeg
    at org.pentaho.di.trans.steps.mysqlbulkloader.MySQLBulkLoader.execute(MySQLBulkLoader.java:95)
    ... 3 more

同时两次同时运行作业非常重要。为了实现这一点,我可以复制每个作业并在某个时间点运行原始作业和重复作业。但是,从长远来看,这不是一个好方法!

问题:

  1. Pentaho没有保持线程吗?

  2. 我错过了一些选项,还是可以启用一些选项让pentaho为不同的作业实例创建不同的线程?

1 个答案:

答案 0 :(得分:3)

当然,水壶保持着线索。事实上,他们中的很多人。看起来问题是MySQL批量加载器使用FIFO。您有两个名为/ tmp / fiforeg的FIFO实例。运行的第一个实例创建FIFO就好了;第二个然后尝试创建另一个具有相同名称的实例,这会导致错误。

在作业开始时,您需要为该实例生成唯一的FIFO名称。我认为您可以通过在作业开始时添加转换来执行此操作,该转换使用Generate random value步骤生成随机字符串甚至UUID并通过Set variables将其存储在作业中的变量中步骤

然后你可以在MySQL批量加载器的'Fifo文件'字段中使用这个变量。

希望对你有用。我不使用MySQL,所以我无法确定。