`

Kettle运行日志记录

 
阅读更多

原创文章,转载请注明出处:http://qq85609655.iteye.com/blog/2173882

 

在kettle.properties中,可以定义参数

KETTLE_JOB_LOG_DB=dw1
KETTLE_JOB_LOG_TABLE=bi_etl_job_log_table

KETTLE_TRANS_LOG_DB=dw1
KETTLE_TRANS_LOG_TABLE=bi_etl_trans_log_table

来全局设置,记录kettle的job和trans日志,

记录日志,会进行锁表,在kettle作业非常多的情况下,容易造成表锁,以及队列等待job日志记录的情况严重影响效率。以及作业的调度。

 

在trans下有个步骤Set Variables,用于设定变量。

写了个job测试,

ETL运行日志测试.zip

发现,trans日志能够正常记录,但是job日志无法记录。

很纳闷,百思不得其解。想不通,以为是版本的问题,更新到最新版本pdi-ce-5.2.0.0-209,问题依旧。

难道,Kettle的设计Set Variables设置变量,其变量只能用于trans,无法用于job吗?

难道需要每个job都要如上的去进行手动设置嘛,太麻烦了,不想这么搞。

 

打开Eclipse,查看Kettle源码,跟踪了半天,发现了具体的原因,不知道是不是kettle的Bug,还是因为其使用的思想,修改下源代码,测试了下问题搞定。

 

我使用的kettle 4.4的版本,需要修改类JobEntryJob.java的方法

  public JobMeta getJobMeta(Repository rep, VariableSpace space) throws KettleException {
    JobMeta jobMeta = null;
    try {
      switch(specificationMethod) {
      case FILENAME:
        jobMeta = new JobMeta((space != null ? space.environmentSubstitute(getFilename()) : getFilename()), rep, null);
        break;
      case REPOSITORY_BY_NAME:
        if (rep != null) {
          String realDirectory = environmentSubstitute(getDirectory());
          RepositoryDirectoryInterface repositoryDirectory = rep.loadRepositoryDirectoryTree().findDirectory(realDirectory);
          if (repositoryDirectory==null) {
            throw new KettleException("Unable to find repository directory ["+Const.NVL(realDirectory, "")+"]");
          }
          jobMeta = rep.loadJob((space != null ? space.environmentSubstitute(getJobName()) : getJobName()), repositoryDirectory, null, null); // reads
        } else {
          throw new KettleException("Could not execute job specified in a repository since we're not connected to one");
        }
        break;
      case REPOSITORY_BY_REFERENCE:
        if (rep != null) {
          // Load the last version...
          //
        	jobMeta = rep.loadJob(jobObjectId, null);
        } else {
          throw new KettleException("Could not execute job specified in a repository since we're not connected to one");
        }
        break;
      default: 
        throw new KettleException("The specified object location specification method '"+specificationMethod+"' is not yet supported in this job entry.");
      }
      
      if (jobMeta != null) {
        jobMeta.setRepository(rep);
        jobMeta.copyVariablesFrom(this);
      }
      
      return jobMeta;
    } catch (Exception e) {
      throw new KettleException("Unexpected error during job metadata load", e);
    }

  }

主要添加了代码jobMeta.copyVariablesFrom(this);用于设定添加上个步骤的Set Variables里的变量。

重新运行job,搞定酷

 

以后,就可以将每个大job,复杂的job运行日志记录到单独的表中。方面查看job运行情况。

 

将重新编译后的JobEntryJob.class重新打包到kettle-engine.jar中,Ok!

如果遇到同学刚好使用4.4版本的同学,可以直接将附件中的JobEntryJob.class.zip解压后,替换kettle-engine.jar中相应的类。

 

特别提醒,Kettle 5.x版本和Kettle 4.x版本,变化较大,需要根据实际类的方法进行修改。这里,我只贴了Kettle 4.4修改的代码,至于其它版本,同学们可以自己动手。

  • 大小: 6.9 KB
  • 大小: 78.3 KB
分享到:
评论

相关推荐

    关于Kettle 转换、作业日志自动配置的解决方案

    在Kettle中,每个转换或作业都可以单独配置其日志记录方式,包括日志级别、日志格式、存储位置等。这种灵活性虽然强大,但对于大型项目来说,频繁的手动配置过程不仅耗时,还可能因疏忽导致日志丢失或错误。因此,...

    Kettle循环遍历结果集.zip

    设置好文件路径、字段和格式,确保日志记录的完整性和可读性。 在实际应用中,这种遍历结果集的方法非常灵活,可以应用于各种场景,例如数据分析、报告生成、数据验证等。需要注意的是,处理大量数据时,应合理优化...

    springboot整合kettle项目源码

    7. **异常处理和日志记录**:确保Kettle的错误和日志信息能够正确地被Spring Boot的日志系统捕获和记录,以便于问题排查。 通过以上步骤,我们可以将Kettle的强大数据处理能力无缝融入到Spring Boot应用中,实现...

    kettle常见控件(输入、输出,字段选择、设置变量、记录集连接、值映射、字符串替换、js、Java)的使用案例

    因此,了解Kettle的错误日志和调试机制至关重要,以便快速定位并解决问题。同时,配合SQL脚本和预定义的工作流文件(kjb、ktr),可以实现自动化数据处理流程。 总之,Kettle提供了一系列丰富的控件,使得数据处理...

    java集成kettle所有jar包

    4. **错误处理和日志记录**:由于Kettle的API可能会抛出异常,因此需要适当的错误处理。同时,为了调试和监控,确保配置了日志框架,如Log4j。 5. **测试和优化**:在集成后,进行详尽的测试以确保所有功能正常运行...

    kettle-manager集成web页面调度

    2. **日志和异常处理**: 确保所有操作都有日志记录,并处理可能出现的异常情况,例如作业失败时的邮件通知。 3. **监控与报警**: 实现作业执行的实时监控,当作业超时或出现错误时,及时发送报警信息。 4. **版本...

    java调用kettle的依赖包

    4. **错误处理和日志记录**:Kettle提供了丰富的错误处理机制,可以通过监听器接口(如`TransListener`和`JobListener`)捕获执行过程中的异常。同时,Kettle的日志系统可以帮助跟踪和记录执行过程,可以通过实现`...

    Kettle源码(Web版)

    6. **错误处理和日志记录**:Kettle的错误处理机制和日志记录对于调试和监控ETL过程至关重要。源码中可以学习到如何实现这些功能。 7. **并行和分布式处理**:Kettle支持并行和分布式执行,源码中会涉及到多线程和...

    KETTLE工具的相关jar包 下载直接使用即可

    6. **第三方工具库**:Kettle可能会依赖一些第三方库,如`log4j.jar`用于日志记录,`pentaho-kettle-plugins-ktr.jar`,`pentaho-kettle-plugins-formats-meta.jar`等,这些库提供了特定的功能,如读写特定格式的...

    kettle 9.0 源码

    6. **错误处理和日志记录**:Kettle提供了详细的日志记录和错误处理机制,这对于调试和优化数据处理流程至关重要。 通过研究Kettle 9.0的源码,开发者可以了解如何实现一个高效、可扩展的数据集成工具,同时也能...

    KETTLE5.4中文使用说明文档

    4. **错误处理和日志记录**:Kettle具有强大的错误处理机制,可以捕获和记录错误信息,便于调试和优化。5.4版本可能强化了这方面的功能,提供了更精细的错误报告和日志选项。 5. **分布式处理和并行执行**:Kettle...

    kettle7常用jar包

    2. **guava-19.0.jar**:Google的Guava库提供了许多Java核心库的实用工具类,如集合、缓存、并发工具、原生类型支持、字符串处理、I/O等,是Kettle运行时的重要依赖。 3. **drools-core-5.0.1.jar**:Drools是基于...

    kettle-7.0.0.0-25版本-免安装压缩包

    9. **日志和监控**:Kettle支持详细的日志记录和实时监控,帮助用户跟踪数据处理过程并诊断问题。 10. **插件系统**:Kettle的开放架构允许用户或第三方开发者扩展其功能,开发新的步骤或工具。 总的来说,Kettle-...

    kettle集成java+完整jar包

    - 错误处理:确保在集成中包含适当的错误处理机制,如日志记录和异常捕获。 - 性能优化:监控和调整Kettle的运行参数,如并发执行的Transformation数量,以提高整体性能。 综上所述,Kettle与Java的集成为大数据...

    LInux系统下kettle操作手册.docx

    系统中,kettle的相关配置,全部放在基本面参数配置中,其中,kettle的日志级别需要调整到详细日志级别,这样可以详细的追踪kettle的异常信息。 本文档提供了在Linux系统下使用kettle工具的操作手册,包括在Windows...

    web版kettle.rar

    这个管理界面可能允许用户创建、编辑、调度和监控ETL作业与转换,同时提供用户权限管理和日志记录等功能。 2. **pentaho-kettle-master.zip**:这是Pentaho Kettle项目的主分支源代码,Pentaho是Kettle的商业版本,...

    ETL之kettle基础-PPT讲解

    由Java编写,可以在Windows、Linux和Unix等多种操作系统上运行,以其高效稳定的数据抽取能力而闻名。Kettle无需安装,提供图形化的用户界面,使得用户可以通过拖拽方式创建数据处理流程,简化了ETL的复杂性。 ...

    kettle批量解析多个xml文件

    8. **错误处理和日志记录**:为保证生产环境的稳定性,应设置适当的错误处理机制,如错误日志记录和错误数据的隔离处理。 通过以上步骤,Kettle可以高效地批量解析XML文件并导入到Oracle数据库,满足生产环境中的...

Global site tag (gtag.js) - Google Analytics