2014-01-09 30 views
1

是否有可能同时运行水壶作业超过一次?从两个不同的脚本运行相同的水壶作业问题

我试图

说我们是在同一时间的两倍运行此脚本,

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为不同的作业实例创建不同的线程?

回答

3

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

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

然后,您可以在MySQL批量加载程序的'Fifo文件'字段中使用此变量。

希望能为你工作。我不使用MySQL,所以我无法确定。

+0

再次为我工作! :) 非常感谢!!! –

相关问题