kettle日志解析_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测试了下,发现,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日志解析_kettle之日志有关方面的总结
jobmysql 1.job日志sql job日志有三种:数据库 做业日志表:总体的记录oracle 做业项日志表:每一个项目的日志测试 日志通道日志表:spa 第一次配置,由于数据库中尚未这个表,须 ...
- 电商数仓DWD层用户行为日志解析
文章目录 前言 一.页面埋点日志.启动日志结构 二.日志解析的流程 2.1 启动日志表解析(包括注意事项) 2.1.1 解析思路 2.1.2 建表语句 2.1.3 数据导入 2.1.4 注意事项 2. ...
- 日志记录到字段变更_Wal日志解析工具开源: Walminer
作者简介 李传成: 瀚高软件内核研发工程师,主要研究方向为数据库的备份和恢复,对wal日志的原理和应用有较深的理解.自研了wal日志解析工具walminer.pg块恢复工具pg_lightool. 一 ...
- IOS闪退日志抓取及日志解析(记录更新ing)
iOS系统如何查看APP的日志 一.XCode连苹果真机查看运行log 方法一:XCode 1 在mac电脑上安装XCode 2 将苹果手机连到mac电脑, 在苹果手机上点击信任 3 打开XCode, ...
- kettle实战-巧用合并记录组件完成业务对账
kettle实战-巧用合并记录组件轻松完成业务对账 应用场景: 对于互联网公司而言,无论是支付还是其他产品的交易操作都难免会涉及到对账的环节,这是保证公司与支付平台或者公司与渠道之间交易对等的关键.k ...
- mysql.err日志分析_Mysql日志解析
转载:https://www.cnblogs.com/Fly-Wind/p/5674382.html 修改Mysql配置 Mysql配置地址为: C:\Program Files (x86)\MySQ ...
- Spark HistoryServer日志解析清理异常
Spark HistoryServer日志解析&清理异常 一.背景介绍 用户在使用 Spark 提交任务时,经常会出现任务完成后在 HistoryServer(Spark 1.6 和 Spar ...
- mysql batch mode_MySQL数据库增量日志解析工具 Canal 实战
简介 canal,阿里开源工具,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 应用场景 数据库实时备份 业务cache刷新 索引构建和实时维护,例:将商品数据推送到es中构建 ...
- FTP服务器日志解析
2019独角兽企业重金招聘Python工程师标准>>> FTP服务器日志解析 FTP是老牌的文件传输协议,在网络中应用非常广泛.本节就Vsftp服务器的日志进行重点讨论,在本书的FT ...
- 操作日志和系统日志分类记录
操作日志和系统日志不一样,操作日志必须要做到简单易懂.所以如何让操作日志不和业务逻辑耦合,如何让操作日志的内容易于理解 系统日志和操作日志的区别 系统日志:系统日志主要是为开发排查问题提供依据,一般打 ...
最新文章
- CPU对指令长度的判断
- static成员函数不能调用non-static成员函数
- 初读设计模式-----《design pattern explained》读后感
- echart 饼图设置指引线_表示整体和部分的条饼图,走起!|Excel144
- c# 值类型数据与引用类型数据
- expect实现配置机器信任关系
- python列表功能默写_python基础学习——列表list的功能
- (1)关于File类你知道多少
- hibernate二级缓存(二)二级缓存实现原理简单剖析
- php 485通讯协议 编程,485通讯协议程序怎么写(51单片机的485通信程序案例)
- 普中28335开发攻略_凌乱的DSP笔记(1)-F28335基础知识
- Python发送电子邮件.
- 楷书书法规则_毛笔书法楷书的结构规则
- C++| 匠心之作 从0到1入门学编程【视频+课件+笔记+源码】
- java 中查询余额怎么写_查询余额示例代码
- mac 查看 ssh key
- 考研计算机西电和大连理工大学教务处,高考或考研,大连理工大学和电子科技大学怎么选?其实很简单...
- linux运行python程序
- GLMP:任务型对话中全局到局部的记忆指针网络 论文阅读及代码解析
- Google 天气预报 API
热门文章
- 2018软科世界一流学科排名发布! ”计算机科学与工程“学科表现如何?
- C++如何判断一个程序是 死锁 还是 死循环,如何进行问题定位与分析
- 未来,我们终将共同沐浴在实时光追之下
- SSL基础:13:X.509证书格式介绍
- java的jar是什么文件_jar是什么意思,jar文件怎么打开?
- ubuntu dns 解析失败
- Java进阶(一) Java高效读取大文件,占内存少
- 就在昨天,张一鸣宣布卸任字节跳动CEO!
- 记录一次 Deadlock found when trying to get lock; try restarting transaction 错误
- 计算机考研复试_数据库