原创文章,转载请注明出处: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都要如上的去进行手动设置嘛,太麻烦了,不想这么搞。
打开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修改的代码,至于其它版本,同学们可以自己动手。
相关推荐
在Kettle中,每个转换或作业都可以单独配置其日志记录方式,包括日志级别、日志格式、存储位置等。这种灵活性虽然强大,但对于大型项目来说,频繁的手动配置过程不仅耗时,还可能因疏忽导致日志丢失或错误。因此,...
设置好文件路径、字段和格式,确保日志记录的完整性和可读性。 在实际应用中,这种遍历结果集的方法非常灵活,可以应用于各种场景,例如数据分析、报告生成、数据验证等。需要注意的是,处理大量数据时,应合理优化...
解决办法是设置转换属性中的记录集合里的记录数,可以根据电脑的内存来调整。此外,还可以使用 kettle 的分发功能来解决这个问题。 问题二:数据查询组件速度慢 在使用数据查询组件时,速度非常慢,不管数据量的...
因此,了解Kettle的错误日志和调试机制至关重要,以便快速定位并解决问题。同时,配合SQL脚本和预定义的工作流文件(kjb、ktr),可以实现自动化数据处理流程。 总之,Kettle提供了一系列丰富的控件,使得数据处理...
7. **异常处理和日志记录**:确保Kettle的错误和日志信息能够正确地被Spring Boot的日志系统捕获和记录,以便于问题排查。 通过以上步骤,我们可以将Kettle的强大数据处理能力无缝融入到Spring Boot应用中,实现...
4. **错误处理和日志记录**:由于Kettle的API可能会抛出异常,因此需要适当的错误处理。同时,为了调试和监控,确保配置了日志框架,如Log4j。 5. **测试和优化**:在集成后,进行详尽的测试以确保所有功能正常运行...
2. **日志和异常处理**: 确保所有操作都有日志记录,并处理可能出现的异常情况,例如作业失败时的邮件通知。 3. **监控与报警**: 实现作业执行的实时监控,当作业超时或出现错误时,及时发送报警信息。 4. **版本...
4. **错误处理和日志记录**:Kettle提供了丰富的错误处理机制,可以通过监听器接口(如`TransListener`和`JobListener`)捕获执行过程中的异常。同时,Kettle的日志系统可以帮助跟踪和记录执行过程,可以通过实现`...
6. **错误处理和日志记录**:Kettle提供了详细的日志记录和错误处理机制,这对于调试和优化数据处理流程至关重要。 通过研究Kettle 9.0的源码,开发者可以了解如何实现一个高效、可扩展的数据集成工具,同时也能...
6. **错误处理和日志记录**:Kettle的错误处理机制和日志记录对于调试和监控ETL过程至关重要。源码中可以学习到如何实现这些功能。 7. **并行和分布式处理**:Kettle支持并行和分布式执行,源码中会涉及到多线程和...
6. **第三方工具库**:Kettle可能会依赖一些第三方库,如`log4j.jar`用于日志记录,`pentaho-kettle-plugins-ktr.jar`,`pentaho-kettle-plugins-formats-meta.jar`等,这些库提供了特定的功能,如读写特定格式的...
Kettle提供了丰富的日志记录和监控功能,可以追踪数据处理过程中的错误和性能指标。通过样例,你可以学习如何启用这些功能,以便于调试和优化脚本。 7. **工作流执行** 脚本完成后,你可以通过Kettle的Job ...
4. **错误处理和日志记录**:Kettle具有强大的错误处理机制,可以捕获和记录错误信息,便于调试和优化。5.4版本可能强化了这方面的功能,提供了更精细的错误报告和日志选项。 5. **分布式处理和并行执行**:Kettle...
Kettle JOB执行出错,发送带附件的邮件
最后,监控系统性能和Kettle日志也是解决问题的关键,它可以帮助我们了解内存使用情况,及时发现并解决问题。同时,理解数据处理的瓶颈,选择合适的硬件配置和软件配置,都是预防和解决Kettle内存溢出问题的重要手段...
2. **guava-19.0.jar**:Google的Guava库提供了许多Java核心库的实用工具类,如集合、缓存、并发工具、原生类型支持、字符串处理、I/O等,是Kettle运行时的重要依赖。 3. **drools-core-5.0.1.jar**:Drools是基于...
- **错误处理和日志记录**: 提供了强大的错误处理机制和详细的日志记录,方便追踪和调试问题。 4. **学习与实践**: - **源码阅读**:通过阅读源码,可以理解Kettle如何处理数据流,以及步骤间的通信机制。 - **...
- 错误处理:确保在集成中包含适当的错误处理机制,如日志记录和异常捕获。 - 性能优化:监控和调整Kettle的运行参数,如并发执行的Transformation数量,以提高整体性能。 综上所述,Kettle与Java的集成为大数据...
4. **日志和监控**:Kettle提供详尽的日志记录和性能监控,便于调试和优化。 5. **数据预览和测试**:在设计过程中,可以实时预览数据,检查转换效果。 **五、学习资源** "Kettle8.2入门PPT"是初学者了解和学习...