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.在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 id203971对应节点运行机器IP和目录位置均在数据库中记录。但日志中的内容需要扫描对应的日志文件获取了。并没有在数据库中直接记录下来。4. DolphinScheduler时区设置问题定时调度时间不对可老麻烦了经常的问题就是差8小时了。官网上有时区设置底层好像是依赖java的一个设置参数好像是xx_jackson_time_zone默认是utf-8的......如果DolphinScheduler是用systemctl启动的话好像直接设置java全局变量还不太行改DolphinScheduler的配置文件是一把过的。