保姆级教程:在DolphinScheduler 3.x中配置Apache SeaTunnel任务(Flink/Spark双引擎)
第一次在DolphinScheduler里集成SeaTunnel的经历,让我想起组装乐高时面对一堆零件的手足无措。特别是当看到十几个启动脚本和一堆引擎参数时,连常年和YARN打交道的同事都皱起了眉头。这篇教程会带你像拼乐高一样,把SeaTunnel的每个组件严丝合缝地嵌入到海豚调度的任务流中。
1. 环境准备:搭建你的积木底座
在开始拼装前,先检查你的"零件盒"是否齐全。我遇到过三次部署失败,都是因为漏掉了这个基础步骤。
1.1 集群环境确认
打开终端依次执行以下命令,记录输出结果:
# 检查Flink版本 flink --version | grep "Version" # 检查Spark版本 spark-submit --version 2>&1 | grep "version"常见版本组合陷阱:
- Flink 1.13与Spark 3.4存在序列化冲突
- Spark 2.4需要额外配置Hadoop 2.7依赖
1.2 配置文件修改
找到你的DolphinScheduler环境配置文件,通常位于:/opt/dolphinscheduler/conf/env/dolphinscheduler_env.sh
添加以下关键变量(根据实际路径调整):
# SeaTunnel安装目录 export SEATUNNEL_HOME=/opt/seatunnel # 根据集群环境选择其中一个 export HADOOP_CONF_DIR=/etc/hadoop/conf # 或者 export SPARK_CONF_DIR=/etc/spark/conf注意:修改后必须重启DolphinScheduler所有服务节点才能生效
2. 脚本迷宫导航:找到正确的钥匙
面对start-seatunnel-*.sh这一系列脚本,就像站在分叉路口。上周有个团队因为选错脚本导致任务卡住8小时。
2.1 脚本选择决策树
| 引擎类型 | 版本要求 | 应选脚本 |
|---|---|---|
| Flink | 1.13.x | start-seatunnel-flink-13-connector-v2.sh |
| Flink | 1.15+ | start-seatunnel-flink-15-connector-v2.sh |
| Spark | 2.4.x | start-seatunnel-spark-2-connector-v2.sh |
| Spark | 3.x | start-seatunnel-spark-3-connector-v2.sh |
2.2 参数配置实战
以Flink 1.15为例,在DolphinScheduler任务节点配置:
启动脚本: start-seatunnel-flink-15-connector-v2.sh FLINK运行模型: run-application 选项参数: -m yarn-cluster -ynm seatunnel_job提示:run-application模式适合生产环境,而run模式更便于调试
3. 配置文件编写:组装核心部件
SeaTunnel的config文件就像乐高的拼装说明书,错一个字母都会导致整个结构垮掉。
3.1 基础模板解析
env { execution.parallelism = 3 # 根据集群资源调整 } source { # 数据源配置 FakeSource { result_table_name = "demo_data" field_name = "id,name,value" } } transform { # 数据处理逻辑 sql { sql = "SELECT id, UPPER(name) AS name, value*10 AS value FROM demo_data" } } sink { # 输出配置 ConsoleSink { print = true } }3.2 常见坑点排查表
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| ClassNotFound | 依赖包缺失 | 在$SEATUNNEL_HOME/plugins下添加对应connector |
| 连接超时 | 网络策略限制 | 检查YARN队列资源配置 |
| 字段映射失败 | 大小写敏感 | 统一使用小写字段名 |
| 内存溢出 | 并行度太高 | 降低execution.parallelism值 |
4. 任务调度优化:让积木动起来
配置正确只是开始,要让任务高效稳定运行还需要这些技巧。
4.1 资源参数调优
在dolphinscheduler_env.sh中添加:
# Flink任务专用参数 export FLINK_JM_MEM=2048m export FLINK_TM_MEM=4096m export FLINK_SLOTS=2 # Spark任务专用参数 export SPARK_DRIVER_MEMORY=2g export SPARK_EXECUTOR_MEMORY=4g4.2 监控与告警配置
- 在DolphinScheduler中设置任务超时告警
- 配置YARN的RM监控界面白名单
- 添加自定义指标采集:
# 在SeaTunnel的config文件末尾添加 metrics { prometheus { port = 9091 pushgateway = "monitor-server:9091" } }
5. 进阶技巧:给你的积木上色
经过三个月的实战,这些经验能帮你少走弯路:
- 多环境配置:用变量替换config中的硬编码值
source { JdbcSource { url = "${mysql_url}" username = "${db_user}" } } - 参数传递:通过DolphinScheduler的"自定义参数"注入变量
- 依赖管理:使用Maven坐标替代手动上传jar包
plugins { maven { "com.mysql" % "mysql-connector-j" % "8.0.33" } }
6. 真实案例:电商数据处理流水线
最近部署的一个实际项目配置:
env { execution.parallelism = 8 job.mode = "BATCH" } source { KafkaSource { bootstrap.servers = "kafka01:9092,kafka02:9092" topic = "user_behavior" format = "json" } } transform { sql { sql = """ SELECT user_id, COUNT(1) AS pv, SUM(CASE WHEN behavior='buy' THEN 1 ELSE 0 END) AS buy_count FROM kafka_source GROUP BY user_id """ } } sink { ClickHouseSink { host = "ch-server" database = "analytics" table = "user_metrics" fields = ["user_id", "pv", "buy_count"] } }在DolphinScheduler中设置每小时调度一次,配合上游Kafka的offset监控,这个配置已经稳定运行了两个月。最关键的是在ClickHouseSink配置中加入了retry策略:
sink { ClickHouseSink { # ...其他配置 retry.maxAttempts = 3 retry.interval = 5000 } }