如何从Java运行基于PDI的ETL

发布于:2021-01-07 16:36:13

0

487

0

java PDI ETL

有多种方法可以从Java运行基于PDI的ETL。在本教程中,Dreamix的Veselin Davidov涵盖了三种方法。

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

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

那将是最简单的方法,即使它看起来并不酷,但它仍然有效,这才是最重要的。它可以像这样简单:

{xunruicms_img_title}

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

更酷的方法–使用PDI库

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

  • 首先依赖

{xunruicms_img_title}

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

{xunruicms_img_title}

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

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

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

{xunruicms_img_title}

企业方式–无需编写代码

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

{xunruicms_img_title}

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

结论

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