如何从Java运行基于PDI的ETL

企业级BI解决方案由多个组件组成。 您拥有报告工具,ETL流程,数据库以及通常的某种Web门户,所有这些都应正确集成。 ETL通常是一个计划的过程,但是我们经常希望允许业务用户手动启动它。 实现此目标的最佳方法是通过我们在Web门户中构建的一些简单界面-这样,他们不需要了解下面的基础结构,我们就可以处理用户管理,访问等。 Java程序中的ETL,我将介绍它们的优点和缺点。

最简单的方法–运行外部进程

那将是最简单的方法,即使它看起来并不酷,它也可以工作,而这最终才是最重要的。 它可以像这样简单:

如何从Java运行基于PDI的ETL

您可以通过运行到单独的线程中进行扩展,使其可配置,从而使其不依赖于平台,读取输出等。需要在运行的计算机上安装PDI。 该方法的主要缺点是ETL在JVM内运行,这可能会减慢Web门户的速度。 如果满足我的要求,我不介意使用该方法-例如,业务用户需要运行一些小的转换,并且不需要太多时间和资源。

更酷的方法–使用PDI库

Pentaho提供Java库,使我们可以将作业和转换直接集成和执行到我们的Java代码中。 我将通过一个简单的示例进行说明,该示例使用maven获取所需的库,然后执行一个简单的作业。

  • 首先依赖

如何从Java运行基于PDI的ETL

  • 然后我们可以从代码中使用嵌入式水壶环境:

如何从Java运行基于PDI的ETL

我之所以称其为“很酷的方法”,是因为根据我在一家定制软件开发公司中的工作经验,它使我们对作业的执行有了更多的控制权。 我们可以从存储库中读取作业,设置参数,读取输出参数,监视日志等。它基本上是我们应用程序中的嵌入式厨房。 这里的可能性是无限的-我们甚至可以使用PDI转换来处理应用程序中的某些业务逻辑。 上一个示例中的缺点是执行在JVM内部,如果这是我们的Web门户,那么过多的负载可能会导致问题。 在这里,我们不需要在运行的计算机中预先安装PDI,但是这些库将打包在应用程序中,这将使可分发的文件更大。

将前两种方法提升到另一个水平

这些方法的好处是它们驻留在我们的Java代码中,这当然意味着我们可以使用该代码做任何我们想做的事情,并以我们需要的任何方式对其进行扩展。 这是显而易见的,但是我仍然想提及它,因为这使我们可以轻松地解决问题并避免缺点。 因此,例如,我们在此处看到的最大缺点是,这些操作是在JVM中执行的,并且可以加载Web服务器。 借助我们企业应用程序的一些更好的体系结构,我们可以轻松地将该执行转移到JVM的另一个实例(另一个服务器),甚至可以将其负载平衡到其他服务器。 一个简单的解决方案是创建一个单独的Web服务,该服务执行ETL并从Web门户中调用该ETL。 另一种方法是使用消息传递服务并创建使用上述某些方法执行Jobs的侦听器。 这看起来像:

如何从Java运行基于PDI的ETL

企业方式–无需编写代码

PDI带有一个称为Carte的工具,该工具基本上为pentaho服务器提供Web服务接口,使我们可以远程执行作业。 运行它非常简单–在data-integration / pwd文件夹中,您具有服务器的一些基本配置XML,并且有很好的文档说明如何根据需要进行配置。 它还需要为作业设置存储库。 一旦运行,就可以通过简单的Web界面对其进行访问。

如何从Java运行基于PDI的ETL

要执行工作,您可以打以下电话:

http://carte.server:8080 / kettle / runJob /?job = MY_JOB_ON_THE_REPSITORY&level = Debug

此方法允许在服务器上远程执行,因此不会遭受前两种方法的主要缺点的困扰。 如果您运行耗时数小时且需要在其他计算机和服务器上运行的复杂ETL,则应该采用这种方法。

结论

从Java代码执行PDI作业有多种方法。 我只讲了三个,但可能还有更多。 对于企业应用程序,大多数人应该选择企业方式,因为它是最健壮的,并且一旦设置就可能最容易使用。 它确实使基础架构变得更加复杂–您需要服务器,存储库,其某些高级功能甚至需要PDI企业版。 在某些情况下,其他两种方法也可以正常工作,因此请为您的应用选择最佳方案!

翻译自: https://jaxenter.com/run-pdi-based-etl-java-154655.html