PDI(Kettle)循环工作步骤parellelization

时间:2014-05-02 04:08:33

标签: mysql pentaho kettle infobright

前言

我已经自动化并编写了单个.ktr文件的脚本,以处理Source(MySQL)和Target(InfoBright)数据库之间的数据提取和同步。为每个表创建一个.ktr文件。

我有一组2个作业和2个转换组成一个“运行”来查找数据同步.ktr文件并将它们排队等待执行。

作业1(切入点)

  • 运行转换以在目标目录中搜索与命令行传递的通配符匹配的文件
  • 对于每一行,运行Job 2(文件循环器)
  • 运行完成后,执行一些错误检查,邮寄,关闭

作业2(文件循环播放器)

  • 运行转换以获取结果并使用文件名
  • 填充变量
  • 运行$ {filename}转换以在MySQL和Infobright之间执行同步
  • 执行一些错误检查,填充错误日志等。标准的正常故障和错误记录

这一切都很完美。我可以在我的目标目录中排队250+ .ktr文件,并且厨房在大约9-15分钟内通过它们,具体取决于要同步的数据量

问题

Pentaho似乎不支持这种抽象循环执行转换的并行化。 Jobs不支持像Transformations那样的输出分发。我查看过Pentaho支持论坛,并在那里发布,没有回复。

我希望获得4个或5个并行线程,每个线程执行一个排队结果(收集的文件名)。我希望这里的某些人能够提供一些有关如何实现这一点的见解,除了手动使用文件名标签整理文件,并运行5次厨房作业,将文件名标签作为参数传递。

(这并没有真正解决输出结果分配问题,因为它只运行5个单独的顺序作业,并且不分配工作负载)

编辑:这是Pentaho论坛上有关图片的帖子,可能有助于说明我在说什么:http://forums.pentaho.com/showthread.php?162115-Parallelizing-looped-job-step

干杯

2 个答案:

答案 0 :(得分:1)

经过大量的反复试验和大量研究后,我发现了以下内容:

  1. Kettle不支持基于负载的分发,只支持循环(它通常用于将数据行分配到不同的步骤,因此加载/执行时间几乎不是一个因素)

  2. 仅循环分发意味着我在分发中的每个Job将处理相同数量的结果(在我的情况下,每个Job Executor步骤处理9个转换,无论每个转换都需要多长时间。)< / p>

  3. 一旦我完全掌握了Kettle处理和传递结果的方式,解决方法(循环分布而不是真正的并行化)比我想象的更简单,我只需要从我的工作执行步骤第一次转换的父作业,使用Job Executor步骤。

  4. 由于采用这种分配方式,在结果中长时间运行的结果相互靠近是有益的,因此它们在作业中均匀分布

  5. 我确实在Pentaho Forums上添加了对我的帖子的回复,提供了我的解决方案的图片。

    不幸的是,按照#1,似乎不支持我原来的目标。

答案 1 :(得分:0)

通过输入行集的转换-> Job executor步骤?

工作执行者步骤  -可以在“参数”选项卡中对文件名进行参数化  -“行分组”选项卡中要发送的行数= 1  -副本数量从1更改为您需要的