本文解析SeaTunnel 2.3.x Spark引擎的执行流程。从SparkTaskExecuteCommand启动任务,到创建SparkExecution实例并初始化三大处理器(Source、Transform、Sink)。核心流程包括:安装解析、插件加载(通过SPI机制)、DAG构建(表驱动设计)、类型系统转换(TypeConverterUtils处理)和数据转换执行(ma
目录
2. 任务执行命令类:SparkTaskExecuteCommand
4. 任务执行:SparkExecution.execute()
本文基于SeaTunnel 2.3.x源码分析Spark引擎执行流程,以seatunnel-examples/seatunnel-spark-connector-v2-example/src/main/java/org/apache/seatunnel/example/spark/v2/SeaTunnelApiExample.java
为入口,完整解析Spark引擎的执行流程。
1. 任务启动入口
启动类核心代码:
public static void main(String[] args) {
// 1. 创建Spark命令参数对象
SparkCommandArgs sparkCommandArgs = new SparkCommandArgs();
// 2. 执行SeaTunnel.run()回调Spark执行命令
SeaTunnel.run(sparkCommandArgs.buildCommand());
}
buildCommand()
返回SparkTaskExecuteCommand
实例SeaTunnel.run()
最终调用SparkTaskExecuteCommand.execute()
2. 任务执行命令类:SparkTaskExecuteCommand
核心执行流程:
public void execute() {
// 1. 解析配置文件生成Config对象
Config config = ConfigBuilder.of(configFile);
// 2. 创建SparkExecution实例
SparkExecution seaTunnelTaskExecution = new SparkExecution(config);
// 3. 执行任务
seaTunnelTaskExecution.execute();
}
3. SparkExecution的创建与初始化
3.1 核心组件初始化
public SparkExecution(Config config) {
// 创建Spark运行时环境
this.sparkRuntimeEnvironment = SparkRuntimeEnvironment.getInstance(config);
JobContext jobContext = new JobContext();
jobContext.setJobMode(RuntimeEnvironment.getJobMode(config));
// 创建三大处理器
this.sourcePluginExecuteProcessor = new SourceExecuteProcessor(
sparkRuntimeEnvironment, jobContext, config.getConfigList(Constants.SOURCE));
this.transformPluginExecuteProcessor = new TransformExecuteProcessor(
sparkRuntimeEnvironment, jobContext,
TypesafeConfigUtils.getConfigList(config, Constants.TRANSFORM, Collections.emptyList()));
this.sinkPluginExecuteProcessor = new SinkExecuteProcessor(
sparkRuntimeEnvironment, jobContext, config.getConfigList(Constants.SINK));
}
3.2 关键对象说明
组件 | 类型 | 功能 |
---|---|---|
sourcePluginExecuteProcessor | SourceExecuteProcessor | 处理数据源接入 |
transformPluginExecuteProcessor | TransformExecuteProcessor | 处理数据转换逻辑 |
sinkPluginExecuteProcessor | SinkExecuteProcessor | 处理数据输出 |
sparkRuntimeEnvironment | SparkRuntimeEnvironment | 封装SparkSession及运行时环境 |
4. 任务执行:SparkExecution.execute()
DAG构建流程:
public void execute() throws TaskExecuteException {
// 初始化数据集集合
List> datasets = new ArrayList<>();
// 按顺序执行三大组件
datasets = sourcePluginExecuteProcessor.execute(datasets);
datasets = transformPluginExecuteProcessor.execute(datasets);
sinkPluginExecuteProcessor.execute(datasets);
log.info(&