作者 | 三线程序员
"与 DolphinScheduler 集成有时间再写吧,欠的东西太多了。",现在项目快部署了,特此来还债。
1. 为什么要集成DolphinScheduler
我们已经验证了SeaTunnel的本地模式(local)可以正常跑ETL任务。但实际生产环境中,需要:
- 定时调度:每日/每小时自动执行数据同步任务
- 任务依赖:上游数据准备就绪后再触发下游任务
- 告警通知:任务失败时发送通知(三线城市还没这个岗位,炸了再说)
- 运维管理:可视化查看任务状态、历史执行记录
其实我主要还是懒得打命令行,这个在页面上就能手动执行,查看日志还是挺方便的,慢就慢点吧,正好多喝杯水。
DolphinScheduler与SeaTunnel天然集成,支持通过Web UI直接配置SeaTunnel作业,实现上述所有需求。
2. 部署环境说明
| 组件 | 版本 | 说明 |
|---|---|---|
| DolphinScheduler | 3.1.7+ | 调度平台 |
| SeaTunnel | 2.3.8+ /2.3.12 | 数据同步引擎 |
| Zeta引擎 | 内置 | SeaTunnel执行引擎 |
架构思路:DS负责调度和流程编排,SeaTunnel负责实际的数据读写。
3. DolphinScheduler对接SeaTunnel的方式
3.1 方式一:使用Shell节点调用SeaTunnel命令行
这是最直接的方式,shell大法适合大部分场景。
步骤:
- 1.在DolphinScheduler的运行节点上部署SeaTunnel客户端(不需要Api服务)
- 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需要部署在同一个机器中)。


所以需要在DolphinScheduler安装的机器上再安装一遍SeaTunnel,而且是每一个机器,因为DolphinScheduler是集群的任务不定会分配到哪个节点上。这里为了快速验证,直接把local模式的SeaTunnel复制到DolphinScheduler的各个节点,并未重新安装部署集群版本。
3.3.1 使用默认配置验证
使用默认的配置参数,提供的是一个测试数据生成输出到控制台上的脚本:

报错:
行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文件管理起来,提高调试便捷操作。