Kettle运行日志记录

标签: kettle 日志 记录 | 发表时间:2015-01-08 11:49 | 作者:qq85609655
出处:http://www.iteye.com

原创文章,转载请注明出处: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测试了下,发现,trans日志能够正常记录,但是job日志无法记录。

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

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

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

ETL运行日志测试.zip

 

打开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修改的代码,至于其它版本,同学们可以自己动手。





已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [kettle 日志 记录] 推荐:

Kettle运行日志记录

- - 开源软件 - ITeye博客
原创文章,转载请注明出处:http://qq85609655.iteye.com/blog/2173882. 在kettle.properties中,可以定义参数. 来全局设置,记录kettle的job和trans日志,. 记录日志,会进行锁表,在kettle作业非常多的情况下,容易造成表锁,以及队列等待job日志记录的情况严重影响效率.

java调用kettle api 操作日志写入到数据库表

- - 开源软件 - ITeye博客
//将step日志数据库配置名加入到变量集中. //StepLogTable使用的数据库连接名(上面配置的变量名). //设置Step日志的表名. //设置TransMeta的StepLogTable. 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

Kettle 创建 Transformation

- - CSDN博客推荐文章
1.第一步,先准备数据和工具. 安装好mysql以及客户端工具.   `status` int(11) NOT NULL COMMENT '对内= 1 ,对外= 2',. 以上我们建了四个表,客户customer,账户account,交易记录trade,交易明细表trade_detail. 用下面的sql查询一下得到每个客户下每个账户的交易明细.

kettle执行job

- - 互联网 - ITeye博客
ETL高级教程kettle. 1,Kettle跨平台使用.     例如:在AIX下(AIX是IBM商用UNIX操作系统,此处在LINUX/UNIX同样适用),运行Kettle的相关步骤如下:.     1)进入到Kettle部署的路径.     2)执行 chmod *.sh,将所有shell文件添加可执行权限.

kettle 开发总结

- - CSDN博客推荐文章
2.在用file exists 控件的时候,当用到“文本文件输入”时,文本文件中需要一定的格式,类似下图:. ;当然也可以已经创建了相应的表,然后直接按“确定”按钮就行,如果相应的表和输入的列数及列属性不一样时,也可以在sql按钮的语句中取修改. 在使用file exists时,输入也可以用表输入.

springboot aop日志记录

- - 编程语言 - ITeye博客
一、POM增加AOP JAR包. 三、SysAspect类. 注:@annotation(cn.com.hfai.controller.system.Logweb) 一定要指定Logweb类. 四、在Controller类的方法之上加上注解 @Logweb 即可. 注:这个只是打印在控制台上,若想放到数据库中,则需要增加操作数据库的业务代码.

Python 多进程日志记录

- Guancheng(冠诚) - qingbo.blog
刚开始用 Python 做 web 开发的时候我就想一个问题,如果 Python 应用需要自己记录一些比 accesslog 更详细的日志(使用 Python 的 logging module),又有多个进程,怎么办最好呢. 多个进程往同一个日志文件写入会不会出问题. 最近有个在 Apache 里用 mod_wsgi 运行的程序,设置了4个 process.

kettle参数、变量详细讲解

- - CSDN博客数据库推荐文章
kettle参数、变量详细讲解. 1、     variable(变量). variables 也可以认为叫做environment variables , 就像它的名字一样,主要是用来设定环境变量的,比如最常见的:文件的存放地址,smtp的配置等等,你也可以把它认为是编程语言里面的全局变量,即使是不同的转换它们也拥有同样的值;.

基于spring-boot的kettle调度 - 简书

- -
大家好,我是帅气小伙,由于最近公司项目辗转大数据,需要做数据抽取的工作,kettle是目前比较成熟的ETL工具,而传统的kettle客户端在任务调度这方面没有实现,于是在网上寻找开源的kettle调度项目. 专门为kettle这款优秀的ETL工具开发的web端管理工具. 貌似源码跑起来比较费劲,各种缺包,于是我为大家专门整理了一下这个项目.

使用AOP与注解记录Java日志

- - ImportNew
有些时候,我想要把每个运行过的方法接收到的参数、返回值和执行时间等信息记录(通过slf4j 和 log4j)下来. 在AspectJ、jcabi-aspects和Java注解的帮助下我实现了这个想法. 在log4j中可以看到以下输出:. 接下来我们来看看它是如何工作的. 注解是Java 6中采用的一种技术( 译注:其实Java 5就有注解了).