gpt4 book ai didi

mysql - PDI(Kettle)循环作业步骤并行化

转载 作者:行者123 更新时间:2023-11-29 03:01:08 37 4
gpt4 key购买 nike

前言

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

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

作业 1(入口点)

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

作业 2(文件循环程序)

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

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

问题

Pentaho 似乎不支持这种抽象循环执行转换的并行化。作业不像转换那样支持输出分布。我检查了 Pentaho 支持论坛,并在那里发帖但没有任何回应。

我正在寻找 4 或 5 个并行线程,每个线程执行一个排队的结果(收集的文件名)。我希望这里有人可以提供一些关于我如何实现这一目标的见解,除了手动使用文件名标签对文件进行通配,并运行厨房工作 5 次,将文件名标签作为参数传递。

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

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

干杯

最佳答案

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

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

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

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

  4. 由于这种分布方法,在结果中让长时间运行的结果彼此相邻拾取是有益的,因此它们会均匀地分布在作业中

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

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

关于mysql - PDI(Kettle)循环作业步骤并行化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23420581/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com