【问题标题】:Running same Kettle Job from two different scripts Issue从两个不同的脚本运行相同的 Kettle Job 问题
【发布时间】:2014-01-09 14:09:44
【问题描述】:

是否可以同时运行一个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 为不同的作业实例创建不同的线程?

【问题讨论】:

    标签: pentaho business-intelligence kettle


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 1970-01-01
      • 2019-03-07
      相关资源
      最近更新 更多