SeaTunnel与DolphinScheduler集成全过程记录,亲测有效!

4 阅读4分钟

作者 | 三线程序员

"与 DolphinScheduler 集成有时间再写吧,欠的东西太多了。",现在项目快部署了,特此来还债。

1. 为什么要集成DolphinScheduler

我们已经验证了SeaTunnel的本地模式(local)可以正常跑ETL任务。但实际生产环境中,需要:

  • 定时调度:每日/每小时自动执行数据同步任务
  • 任务依赖:上游数据准备就绪后再触发下游任务
  • 告警通知:任务失败时发送通知(三线城市还没这个岗位,炸了再说)
  • 运维管理:可视化查看任务状态、历史执行记录

其实我主要还是懒得打命令行,这个在页面上就能手动执行,查看日志还是挺方便的,慢就慢点吧,正好多喝杯水。

DolphinScheduler与SeaTunnel天然集成,支持通过Web UI直接配置SeaTunnel作业,实现上述所有需求。

2. 部署环境说明

组件版本说明
DolphinScheduler3.1.7+调度平台
SeaTunnel2.3.8+ /2.3.12数据同步引擎
Zeta引擎内置SeaTunnel执行引擎

架构思路:DS负责调度和流程编排,SeaTunnel负责实际的数据读写。

3. DolphinScheduler对接SeaTunnel的方式

3.1 方式一:使用Shell节点调用SeaTunnel命令行

这是最直接的方式,shell大法适合大部分场景。

步骤:

  1. 1.在DolphinScheduler的运行节点上部署SeaTunnel客户端(不需要Api服务)
  2. 2.在Shell节点中调用seatunnel.sh脚本

bash

#!/bin/bash
cd /opt/apache-seatunnel-2.3.12/bin
./seatunnel.sh --config /data/jobs/mysql_to_doris.conf -m local

优点:配置简单,兼容性好;还能不暴露数据库敏感信息。

缺点:配置文件要提前调试好,修改时要去服务器上vim改(想想都头大)

3.2 方式二:通过SeaTunnel Api或SeaTunnel web提交任务

如果需要更精细的控制(如任务取消、状态查询),可以使用Api方式。

  • 我没试过我觉得太麻烦了.....

3.3 方式三:官网推荐SeaTunnel节点

DolphinScheduler的SeaTunnel的节点,选择Zeta的引擎执行。发现其不支持IP设置,DolphinScheduler需要和SeaTunnel绑定在相同的机器上(即要求SeaTunnel和DolphinScheduler需要部署在同一个机器中)。

image-20260416161054042

ScreenShot_2026-04-16_161633_124

所以需要在DolphinScheduler安装的机器上再安装一遍SeaTunnel,而且是每一个机器,因为DolphinScheduler是集群的任务不定会分配到哪个节点上。这里为了快速验证,直接把local模式的SeaTunnel复制到DolphinScheduler的各个节点,并未重新安装部署集群版本。

3.3.1 使用默认配置验证

使用默认的配置参数,提供的是一个测试数据生成输出到控制台上的脚本:

ScreenShot_2026-04-16_161902_244

报错:

5: /bin/seatunnel.sh: 没有那个文件或目录。

即集成失败,DolphinScheduler无法调用seatunnel。分析原因,是环境变量未配置导致找不到对应目录。

前两天正好看了DolphinScheduler官网发了一个集成的文档,和网上的集成方案看了一下,都是需要配置环境变量。

3.3.2 修改DolphinScheduler环境配置

在DolphinScheduler的主安装节点,服务器的安装目录/opt/dolphinscheduler/bin/env下修改文件dolphinscheduler_env.sh

修改 export SEATUNNEL_HOME=${SEATUNNEL_HOME:-/opt/seatunnel}其中/opt/seatunnel为在海豚机器上安装的目录。

重启集群,官方文档上说是会自动把整个集群的Work-Server和Master-Server的环境配置自动修改。如果不管用,就手动去各个Mastet/Work等节点的Conf目录里改一下,省得麻烦。

注意,最终是要保证整个DolphinScheduler集群下的所有Work-Server、Master-Server、api-server的环境都配置上SeaTunnel的安装目录。

3.3.3 再次验证集成

直接重跑验证任务实例即可,看到小对勾就OK了。

查看日志,有打印图标!集成成功。同步信息也有。

如果需要统计读写数量就可以从打印的日志中获取了。

3.3.4 集群下如何查看DolphinScheduler具体日志执行内容

通过DolphinScheduler任务实例ID 203971,查询对应海豚数据表。

SELECT * FROM t_ds_task_instance where id=203971

对应节点运行机器IP和目录位置均在数据库中记录。但日志中的内容需要扫描对应的日志文件获取了。并没有在数据库中直接记录下来。

4. DolphinScheduler时区设置问题

定时调度时间不对可老麻烦了,经常的问题就是差8小时了。官网上有时区设置,底层好像是依赖java的一个设置参数,好像是xx_jackson_time_zone,默认是utf-8的......如果DolphinScheduler是用systemctl启动的话,好像直接设置java全局变量还不太行,改DolphinScheduler的配置文件是一把过的。

5. 总结一下:

对于SeaTunnel在数据集成方面,主要是多种集成方案是亮点;在数据库之间集成其主要优势是自动建表。且支持建表模板;与DolphinScheduler集成是管理方面的优势,使用DolphinScheduler就可以将SeaTunnel的conf文件管理起来,提高调试便捷操作。