2

前言

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

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

作业 1(入口点)

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

作业 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

干杯

4

2 回答 2

1

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

  1. Kettle 不支持基于负载的分发,仅支持循环(它通常用于将数据行分发到不同的步骤,因此负载/执行时间几乎从不考虑因素)

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

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

  4. 由于这种分配方法,长期运行的结果在结果中彼此相邻是有益的,因此它们在作业中均匀分布

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

不幸的是,根据#1,似乎没有支持我最初的目标。

于 2014-05-07T21:08:42.977 回答
0

这不能通过输入行集的转换来完成 -> 作业执行器步骤吗?

作业执行器步骤 - 文件名可以在参数选项卡中参数化 - 行分组选项卡中要发送的行数 = 1 - 副本数从 1 更改为您需要的任何内容

于 2018-12-13T18:28:36.947 回答