如何在 Pentaho BI server v6 CE 上部署预定的 Kettle 作业

Posted

技术标签:

【中文标题】如何在 Pentaho BI server v6 CE 上部署预定的 Kettle 作业【英文标题】:How to deploy scheduled Kettle jobs on Pentaho BI server v6 CE 【发布时间】:2016-02-29 17:40:15 【问题描述】:

我有一台运行 Pentaho BI server v6 Community Edition 的服务器。我们开发了一个 Kettle 作业,可以从一个数据库提取到另一个数据库,导出为 KJB 文件。我想每 12 个小时左右运行一次这项工作。

我注意到 BI 服务器已经包含了 Kettle,并且能够上传和安排作业。如果 BI 服务器已经安装了 Kettle,还需要安装 DI 服务器吗?

如果没有,如何将 KJB 文件发布到 BI 服务器?我想使用文件系统存储库。如果我直接通过用户控制台上传文件,日志显示导入成功,但我无法在任何地方选择或运行该作业。

【问题讨论】:

【参考方案1】:

我使用的是 Pentaho BI server 5,但它应该在 Pentaho BI 6 上工作。

我的 Kettle 作业运行许多子转换。转换文件存储在文件系统目录中,例如/opt/etl.

假设我有一份工作 (daily_job.kjb) 有两个子转换。

要在 Pentaho BI CE 上运行 Kettle job,我使用以下步骤:

    在作业文件中正确设置转换位置 将子转换上传到服务器上的正确目录 (/opt/etl) 创建在 BI 服务器 (daily.xaction) 上执行 Kettle jobxaction 文件 将daily.xactiondaily_job.kjb 文件上传到Pentaho BI 服务器(同一文件夹) 在 Pentaho BI 服务器上调度 daily.xaction 文件

daily_job.kjb中的工作设置

Xaction 代码daily.xaction(只需执行daily_job.kjb,它位于与xaction 所在的BI 服务器相同的文件夹):

<?xml version="1.0" encoding="UTF-8"?>
<action-sequence> 
  <title>My scheduled job</title>
  <version>1</version>
  <logging-level>ERROR</logging-level>
  <documentation> 
    <author>mzy</author>  
    <description>Sequence for running daily job.</description>  
    <help/>  
    <result-type/>  
    <icon/> 
  </documentation>

  <inputs> 
  </inputs>

  <outputs> 
    <logResult type="string">
      <destinations>
        <response>content</response>
      </destinations>
    </logResult>
  </outputs>

  <resources>
    <job-file>
      <solution-file> 
        <location>daily_job.kjb</location>  
        <mime-type>text/xml</mime-type> 
      </solution-file>     
    </job-file>
  </resources>

  <actions> 
    <action-definition>
      <component-name>KettleComponent</component-name>
      <action-type>Pentaho Data Integration Job</action-type>
      <action-inputs>   
      </action-inputs>
      <action-resources>
        <job-file type="resource"/>
      </action-resources>
      <action-outputs> 
        <kettle-execution-log type="string" mapping="logResult"/>  
        <kettle-execution-status type="string" mapping="statusResult"/> 
      </action-outputs>   
      <component-definition>
        <kettle-logging-level><![CDATA[info]]></kettle-logging-level>           
      </component-definition>
    </action-definition>

  </actions> 
</action-sequence>

在 Pentaho BI CE 上安排 Kettle 作业(xaction 文件):

【讨论】:

工作!!要查看上传的作业,请单击查看 > 显示隐藏文件。 如果我想将转换也上传到pentaho服务器,在文件.kjb和.xaction的同一目录中,我必须如何在.kjb文件中配置子转换的路径位置?另外:如果转换的输出是一个文件,是否可以通过设置正确的输出路径位置将其自动发布到 pentaho 服务器文件夹中?我问这个是因为就安全性而言,在 tomcat 目录之外的文件夹中读取和写入文件并不是最佳实践。【参考方案2】:

继续以下步骤:

    以管理员身份启动 pentaho bi 服务器后登录 pentaho 控制台:

    单击浏览文件按钮,将打开一个新页面。在此页面中,选择文件夹部分下的文件夹,然后单击右侧窗格中的上传。

    选择一个文件并点击确定。

    现在刷新页面,然后文件将反映在您各自的文件夹中。

    现在安排作业。单击左窗格中的相应文件夹,在中间窗格中选择您的主要作业文件,然后单击右窗格中的计划。

    在新的弹出窗口中,选择您生成的文件路径,然后单击下一步。选择重复计划、作业时间和作业开始日期。

    在下一个弹出窗口中选择“是”,您将被重定向到“管理计划”页面,您可以在其中看到您刚刚安排的工作。它将按计划时间运行。

    您可以在 pentaho-server/tomcat/logs 目录下的 pentaho.log 文件中查看您的作业日志:

    tail -1000f /Users/kv/pentaho-server/tomcat/logs/pentaho.log
    

【讨论】:

【参考方案3】:

您可以将 .kjb 文件部署为作为 Sparkl 插件的一部分的 Kettle 端点,然后通过简单的 API 请求调用它。这应该会有所帮助:

http://fcorti.com/pentaho-sparkl/kettle-endpoint-sparkl-pentaho/

可能还有其他方法可以做到这一点,但这是我最熟悉的一种。至于调度,你可以只调度一个发出 API 请求的 cronjob 吗?

【讨论】:

您能否提供一些代码来回答您的问题,而不是简单地链接到外部资源? 你真的不需要写任何代码。只需创建一个名为“JobRunner”的 sparkl 插件,然后创建一个“job”类型的kettle 端点(例如,名为 myJob)。该插件将自动在 /pentaho-solutions/system/JobRunner/endpoints/kettle 创建一个 myJob.kjb 文件。您只需将其替换为您想要的作业,并通过对 http://:/pentaho/plugin/JobRunner/api/myJob 的简单 HTTP 请求来执行它。这可能不是理想的解决方案(例如,它不使用内部作业调度程序)但它可以工作 最好使用这种方法生成 KJB,然后通过 Spoon 修改文件而不是替换它?看起来有些自定义属性必须保留。 我认为默认文件中除了输出步骤的名称之外没有任何重要的东西(除非您打算将作业用作数据源,否则这无关紧要),但如果您想玩它安全,当然

以上是关于如何在 Pentaho BI server v6 CE 上部署预定的 Kettle 作业的主要内容,如果未能解决你的问题,请参考以下文章

Pentaho BI Server - 绘制实时数据图表

Pentaho BI Server 5.0.1 有 Saiku Reporting 插件吗?

我需要在我的服务器上的同一个 Tomcat 7 中运行 Pentaho CE BI-Server 和 Geoserver

如何自动创建 Pentaho 每日报告?

如何在 pentaho bi url 中传递登录凭据

在 Pentaho BI 服务器中使用 PDI 转换作为报表参数的数据源