前绪
正题
创建LogicalDag
创建一个LogicalDag,根据代码注释理解LogicalDag里维护的就是任务配置文件中的source、transformer、sink。
java
LogicalDag logicalDag = getLogicalDag();
本次任务的固定信息
固定本此job的固定信息,其中要注意的就是jarUrls和connectorJarIdentifiers,就是你部署的seatunnel服务下libs下的依赖的第三方jar包,以及connector下的的连接器。job执行用到第三方jar或者connector时就会从这里获取。
java
JobImmutableInformation jobImmutableInformation = new JobImmutableInformation(
Long.parseLong(jobConfig.getJobContext().getJobId()),
jobConfig.getName(),
isStartWithSavePoint,
seaTunnelHazelcastClient.getSerializationService().toData(logicalDag),
jobConfig,
new ArrayList<>(jarUrls),
new ArrayList<>(connectorJarIdentifiers)
);
创建并返回代理对象,过程中完成了任务的提交
根据前面收集到的job信息,创建一个job代理并返回,同时在这个过程中完成job的提交:封装成一个任务,提交给Hazelcast去执行。
java
return jobClient.createJobProxy(jobImmutableInformation);
提交任务
jobClient的createJobProxy方法中创建了一个ClientJobProxy对象,在ClientJobProxy的构造函数中完成了job的提交。
java
public ClientJobProxy(
@NonNull SeaTunnelHazelcastClient seaTunnelHazelcastClient,
@NonNull JobImmutableInformation jobImmutableInformation) {
this.seaTunnelHazelcastClient = seaTunnelHazelcastClient;
this.jobId = jobImmutableInformation.getJobId();
submitJob(jobImmutableInformation);
}
submitJob方法
创建一个ClientMessage对象后,构建一个job执行的PassiveCompletableFuture对象submitJobFuture,调用对象的join方法。
结束
任务提交完成,在主流程(ClientJobExecutionEnvironment的execture方法)中等待任务的结果。
java
JobResult jobResult = clientJobProxy.waitForJobCompleteV2();