Kettle运行作业之前的初始化过程

简介:

本文主要描述Kettle是如何通过GUI调用代码启动线程执行作业的。

之前用英文写了一篇文章《The execution process of kettle’s job》 ,这篇文章只是用于英语写技术博客的一个尝试。由于很久没有使用英语写作了,故那篇文章只是简单的通过UML的序列图描述kettle运行job的一个java类调用过程。将上篇文章的序列图和这篇文章联系起来,会更加容易理解本文。

在Spoon界面点击运行按钮,Spoon GUI会调用Spoon.runFile()方法,这可以从xul文件(ui/menubar.xul)中的描述看出来。关于kettle中的xul的使用,不是本文重点故不在此说明。

public void runFile() {
	executeFile(true, false, false, false, false, null, false);
}

public void executeFile(boolean local, boolean remote, boolean cluster,
		boolean preview, boolean debug, Date replayDate, boolean safe) {
	TransMeta transMeta = getActiveTransformation();
	if (transMeta != null)
		executeTransformation(transMeta, local, remote, cluster, preview,
				debug, replayDate, safe);

	JobMeta jobMeta = getActiveJob();
	if (jobMeta != null)
		executeJob(jobMeta, local, remote, replayDate, safe, null, 0);
}

public void executeJob(JobMeta jobMeta, boolean local, boolean remote,
		Date replayDate, boolean safe, String startCopyName, int startCopyNr) {
	try {
		delegates.jobs.executeJob(jobMeta, local, remote, replayDate, safe,
				startCopyName, startCopyNr);
	} catch (Exception e) {
		new ErrorDialog(shell, "Execute job",
				"There was an error during job execution", e);
	}
}

runFile()方法内部调用executeFile()方法,executeFile方法有以下几个参数: - local:是否本地运行 - remote:是否远程运行 - cluster:是否集群环境运行 - preview:是否预览 - debug:是否调试 - replayDate:回放时间 - safe:是否安全模式

executeFile方法会先获取当前激活的转换,如果获取结果不为空,则执行该转换;否则获取当前激活的作业,执行该作业。 本文主要讨论作业的执行过程,关于转换的执行过程,之后单独一篇文章进行讨论。

executeJob委托SpoonJobDelegate执行其内部的executeJob方法,注意,其将JobMeta传递给了executeJob方法。SpoonJobDelegate还保存着对Spoon的引用。

SpoonJobDelegate的executeJob方法主要完成以下操作:

  • 1.设置Spoon的执行配置JobExecutionConfiguration类,该类设置变量、仓库、是否执行安全模式、日志等级等等。
  • 2.获得当前Job对应的图形类JobGraph。
  • 3.将执行配置类JobExecutionConfiguration的变量、参数、命令行参数设置给jobMeta。
  • 4.如果本地执行,则调用jobGraph.startJob(executionConfiguration),如果远程执行,则委托给SpoonSlaveDelegate执行。

JobExecutionConfiguration类是保存job执行过程中的一些配置,该类会在Spoon、JobGraph类之间传递。

本文只讨论本地执行的情况,故往下查看jobGraph.startJob(executionConfiguration)方法。该方法被synchronized关键字修饰。

JobGraph类包含当前Spoon类的引用、以及对Job的引用。初始情况,Job的引用应该为null。该类会做以下操作:

  • 1.如果job为空或者没有运行或者没有激活,则先保存,然后往下执行作业。
  • 2.在仓库不为空的时候,通过仓库加载Job获得一个运行时的JobMeta对象,名称为runJobMeta;否则,通过文件名称直接new一个JobMeta对象,名称也为runJobMeta。
  • 3.通过仓库和runJobMeta对象构建一个Job对象,并将jobMeta对象(此对象通过JobGraph构造方法传入)的变量、参数共享给Job对象。
  • 4.Job对象添加JobEntry监听器、Job监听器。
  • 5.调用Job的start方法,启动线程开始执行一个job。

Job继承自Thread类,该类的run方法内部会递归执行该作业内部的作业项,限于篇幅,本文不做深究。

目录
相关文章
|
6月前
|
Shell 开发工具 数据安全/隐私保护
构建作业
构建作业
39 1
|
6月前
|
数据采集 Oracle 关系型数据库
kettle开发-循环驱动作业
kettle开发-循环驱动作业
193 0
|
1月前
|
Java
ETL工具 Kettle 中 kettle循环传递变量_(最简单的方法)
本文详细介绍了如何在Kettle工具中使用循环传递变量,通过示例展示了如何将movies表数据按月插入到ods_movies表,涉及新建转换、获取变量、作业配置和执行,呈现了一个嵌套作业结构.
76 3
|
6月前
|
Oracle 关系型数据库 MySQL
实时计算 Flink版操作报错之当将两个连接器放在同一个作业中时,MySQL作业无法启动,该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
4月前
|
SQL 数据采集 DataWorks
DataWorks产品使用合集之依赖脚本实际运行成功了,但其状态却显示为未运行,从而导致下游脚本没有运行,是什么原因
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
4月前
|
NoSQL Oracle 关系型数据库
实时计算 Flink版产品使用问题之应用程序模式的作业如何从检查点保存的地方启动
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4月前
|
SQL 机器学习/深度学习 分布式计算
MaxCompute产品使用合集之如何定时运行任务A,以及定时运行任务B,并且任务B能够独立于任务A运行
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
6月前
|
监控 Java 数据库连接
kettle开发-远程执行作业
kettle开发-远程执行作业
278 0
|
Java 网络安全
Kettle流程步骤与应用步骤(六)
Kettle流程步骤与应用步骤(六)
283 1
Kettle流程步骤与应用步骤(六)
|
缓存 分布式计算 Java
六十七、Spark-两种运行方式(本地运行,提交集群运行)
六十七、Spark-两种运行方式(本地运行,提交集群运行)
六十七、Spark-两种运行方式(本地运行,提交集群运行)