news 2026/8/30 19:27:00

Apache DolphinScheduler 3.1.8 从零到一实战指南【集群部署、核心功能、告警集成、运维排错】一站式掌握!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Apache DolphinScheduler 3.1.8 从零到一实战指南【集群部署、核心功能、告警集成、运维排错】一站式掌握!

1. 环境准备与集群规划

朋友们,今天咱们来聊聊怎么从零开始,把 Apache DolphinScheduler 3.1.8 这个强大的任务调度系统给稳稳当当地跑起来。我见过不少朋友在部署这一步就卡住了,要么是环境没配好,要么是配置文件搞错了,结果折腾半天服务都起不来。别担心,跟着我的步骤走,咱们一步步来,避开那些常见的坑。

首先,你得想清楚你的集群规模。是打算用三台机器做个标准的生产环境,还是先用一台机器试试水?我建议,哪怕你手头只有一台性能还不错的服务器,也最好用伪集群模式部署,就是把 Master、Worker、Api 这些服务都装在一台机器上,但用不同的端口启动。这样能帮你更好地理解 DolphinScheduler 各个组件之间的关系,以后真上集群了心里也有底。我这里会以三台服务器的标准分布式部署为例,如果你只有一台,把对应的主机名都改成localhost或者127.0.0.1就行,原理是一样的。

服务器的基础环境是基石,这块千万不能马虎。官方推荐的是 Linux 系统,CentOS 7 或者 Ubuntu 18.04 以上都行。我这里用的是 CentOS 7.9,比较常见。每台机器上,JDK 1.8+是必须的,别用太高版本,容易有兼容性问题。我实测下来,OpenJDK 8 和 Oracle JDK 8 都可以。MySQL 5.7+或者MariaDB 10.3+也得准备好,这是用来存元数据的,别用那个默认的 H2 数据库,那个只适合测试,数据没法持久化。最后是ZooKeeper 3.4.6+,这是 DolphinScheduler 用来做服务发现和协调的,集群模式下必不可少,记得三台机器都要装,并且组成一个集群。

准备工作里还有一个特别容易忽略但又至关重要的步骤:配置部署用户的 sudo 免密和主机间的 SSH 免密登录。DolphinScheduler 的安装脚本需要在这些机器之间拷贝文件、执行命令,如果每次都要输密码,那脚本就跑不下去了。具体操作呢,咱们先创建一个专门的用户,比如就叫dolphinscheduler。用 root 用户执行useradd dolphinschedulerpasswd dolphinscheduler设置好密码。然后编辑/etc/sudoers文件,在root ALL=(ALL) ALL这行下面,加上dolphinscheduler ALL=(ALL) NOPASSWD:ALL。注意,修改这个文件一定要用visudo命令,这是最安全的方式。免密登录呢,切换到dolphinscheduler用户,用ssh-keygen -t rsa生成密钥对,一直回车就行。然后用ssh-copy-id dolphinscheduler@主机名把公钥拷贝到包括本机在内的所有机器上。做完之后,你一定要亲自用ssh 主机名试一下,确保不需要密码就能直接登录,这一步没成功,后面百分之百会报错。

2. 集群部署实战详解

环境都妥当了,咱们就进入最核心的部署环节。首先去官网下载安装包,记得选Binary 二进制包,就是apache-dolphinscheduler-3.1.8-bin.tar.gz这个,源码包那是给大佬们做二次开发用的。下载下来之后,找个目录解压,比如/opt/module/。解压后的目录结构很清晰,但先别急,这还不是最终安装目录,它更像一个“安装程序”的目录。

接下来是数据库的初始化。用 root 用户登录你的 MySQL,执行下面这几条命令。这里有个小坑,MySQL 8.0 默认的密码验证插件是caching_sha2_password,有时候老版本的连接驱动会不兼容。如果你遇到连接问题,可以尝试把创建用户的命令改成CREATE USER 'dolphinscheduler'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';,这样就用回旧的验证方式了。

-- 创建数据库,字符集用 utf8mb4 更好,兼容性更强 CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci; -- 创建用户,密码你自己设个复杂的 CREATE USER 'dolphinscheduler'@'%' IDENTIFIED BY 'YourPassword123!'; -- 授予权限 GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'dolphinscheduler'@'%'; FLUSH PRIVILEGES;

数据库建好了,还得把 MySQL 的 JDBC 驱动 jar 包放到正确的位置。你需要下载mysql-connector-java-8.0.x.jar(注意版本要 8.0.16 以上),然后分别拷贝到解压目录下的api-server/libs/alert-server/libs/master-server/libs/worker-server/libs/tools/libs/这五个文件夹里。少一个,对应的服务启动时都可能报ClassNotFoundException

现在来配置两个最重要的环境文件。第一个是bin/env/install_env.sh。这个文件决定了哪些机器扮演什么角色。你需要重点关注这几个数组:

  • ips:填写你所有集群机器的 IP 或者主机名,逗号分隔。
  • masters:Master Server 节点,通常选一台或两台(做高可用)。
  • workers:Worker Server 节点,剩下的机器填这里。
  • alertServer:告警服务器节点。
  • apiServers:API 服务器节点。

比如我的三台机器:hadoop101, hadoop102, hadoop103。我计划让 101 当 Master 和 Api,102 和 103 当 Worker,告警也放在 101 上。那么配置大概是这样:

# 所有主机 ips="hadoop101,hadoop102,hadoop103" # Master 节点 masters="hadoop101" # Worker 节点 workers="hadoop102:default,hadoop103:default" # 告警服务器 alertServer="hadoop101" # API 服务器 apiServers="hadoop101" # 安装路径,所有机器要一致 installPath="/opt/module/dolphinscheduler" # 部署用户,就是咱们之前创建的 deployUser="dolphinscheduler"

第二个文件是bin/env/dolphinscheduler_env.sh,这里配置的是环境变量。最关键是数据库连接和 ZooKeeper 地址。把你刚才创建的数据库信息填到SPRING_DATASOURCE_URLUSERNAMEPASSWORD里。REGISTRY_ZOOKEEPER_CONNECT_STRING填你的 ZK 集群地址。下面的HADOOP_HOMESPARK_HOME这些,如果你暂时用不到对应类型的任务,可以先不配,等用的时候再补上。

export JAVA_HOME=/opt/module/jdk1.8.0_333 export DATABASE=mysql export SPRING_PROFILES_ACTIVE=${DATABASE} export SPRING_DATASOURCE_URL="jdbc:mysql://hadoop101:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8&useSSL=false" export SPRING_DATASOURCE_USERNAME=dolphinscheduler export SPRING_DATASOURCE_PASSWORD=YourPassword123! export REGISTRY_TYPE=zookeeper export REGISTRY_ZOOKEEPER_CONNECT_STRING="hadoop101:2181,hadoop102:2181,hadoop103:2181"

配置都改好了,咱们先初始化数据库。在解压目录下,执行bash ./tools/bin/upgrade-schema.sh。看到一堆SUCCESS的日志,最后提示Successfully initialized database schema,那就成功了。这一步就是在你的 MySQL 里创建 DolphinScheduler 需要的所有表。

激动人心的安装时刻到了!确保你的 ZooKeeper 集群已经启动(每台机器zkServer.sh status看一下)。然后在解压目录下,用咱们配置的部署用户dolphinscheduler执行bash ./bin/install.sh。脚本会自动把软件分发到install_env.sh里指定的所有机器,并进行安装。安装完成后,用bash ./bin/start-all.sh一键启动所有服务。启动有点慢,耐心等个一两分钟,然后去每台机器上用jps命令检查一下。你应该能看到MasterServerWorkerServerApiApplicationAlertServer这些进程。如果没看到,别慌,去安装目录下的logs/文件夹里找对应服务的日志文件,比如master-server.log,看看报什么错,绝大部分问题日志里都会说得明明白白。

3. 核心功能配置与使用

服务都跑起来了,打开浏览器访问http://你的Master或Api服务器IP:12345/dolphinscheduler/ui,就能看到登录页了。默认账号是admin,密码是dolphinscheduler123。第一次登录,我强烈建议你先别急着创建任务,而是去安全中心把基础配置搞好。这里很多设置一旦创建了工作流再改,可能会有点麻烦。

首先配置租户。你可以把租户理解为 Linux 系统里的一个用户。DolphinScheduler 的任务最终是以某个租户的身份在 Worker 机器上执行的。所以,你需要创建一个和你部署用户同名的租户,比如就叫dolphinscheduler,这样执行任务时才有权限在目标机器上创建进程。队列先选default

接着创建普通用户。别老用 admin 账号干活,这不安全也不符合规范。创建一个新用户,比如叫data_team,关联上刚才创建的dolphinscheduler租户。邮箱和手机号尽量填真的,后面告警用得上。用户创建后状态是“停用”,记得点一下“启用”按钮。

然后是Worker 分组。如果你的 Worker 机器配置不一样,比如有些内存大适合跑内存密集型任务,有些 CPU 强适合跑计算密集型任务,就可以通过分组来管理。在“Worker 分组管理”里新建分组,比如high_mem_group,然后把高内存的 Worker 节点勾选上。这样定义任务时,可以指定它跑在特定的分组上,实现资源隔离和优化。

接下来是资源中心,这个功能默认是关的,但我觉得非常有用。它让你可以把脚本、配置文件、UDF 函数等资源文件统一上传到 HDFS 或 S3 这样的共享存储上,任务运行时再去下载。要开启它,需要修改api-server/conf/common.propertiesworker-server/conf/common.properties这两个文件(分布式部署每台机器都要改)。找到resource.storage.type参数,改成HDFS。然后配置resource.hdfs.fs.defaultFS为你集群的 HDFS 地址,比如hdfs://hadoop101:8020。还有resource.upload.path,设置一个 HDFS 上的基础路径,比如/dolphinscheduler。改完配置记得重启 DolphinScheduler 服务。重启后,你就能在页面上传文件了,任务里引用资源文件时,路径就写/你的文件名就行,非常方便。

现在可以创建项目了。项目是一个逻辑容器,用来把相关的工作流和任务组织在一起。用我们刚创建的普通用户data_team登录,创建一个项目,比如叫“用户行为分析日报”。进入项目后,核心就是工作流定义。点击“创建工作流”,给它起个名字,比如“数据清洗与入库”。

工作流编辑界面是拖拽式的,很直观。从左侧把需要的任务类型拖到画布上,我常用的是 Shell、Spark 和 SQL 任务。Shell 任务就是执行 Linux 命令或者脚本,这是最通用的。Spark 任务可以直接提交 Spark 应用,需要你在dolphinscheduler_env.sh里配好SPARK_HOMESQL 任务支持连接多种数据源执行查询,需要在“数据源中心”先配置好你的 MySQL、Hive 等连接信息。

这里有个高级技巧:参数传递。DolphinScheduler 支持全局参数和局部参数。比如,你可以在工作流级别定义一个全局参数${bizdate},它的值可以设置为$[yyyy-MM-dd-1],这样它就会自动取昨天的日期。在任何一个任务里,你都可以用${bizdate}来引用这个值。在 Shell 任务里,它会被替换成真实的日期字符串;在 SQL 任务里,你可以写WHERE dt = '${bizdate}',实现动态分区过滤。这个功能在做日常调度任务时特别有用。

任务之间的依赖关系,用鼠标拖拽连接线就能搞定。A 任务指向 B 任务,就表示 B 必须等 A 成功完成后才能运行。全部配置好之后,一定记得点右上角的“保存”!我吃过亏,画了半天没保存,刷新页面全没了。保存后,工作流是“下线”状态,需要点“上线”按钮才能被调度执行。上线后,你可以点“定时”按钮来设置 Cron 表达式,让它每天凌晨自动跑。也可以手动点“运行”立即执行一次。

4. 告警集成:邮件预警实战

任务跑起来不是终点,我们得知道它跑得怎么样。成功了固然好,失败了更要第一时间知道。DolphinScheduler 的告警功能集成起来不难,但细节不少。咱们以最常用的邮件告警为例,手把手走一遍。

第一步,准备一个发件邮箱。我常用的是 QQ 邮箱或者 163 邮箱,这里用 163 邮箱演示。你需要登录网页版邮箱,在设置里找到“POP3/SMTP/IMAP”服务,把它开启。开启过程中,它会让你用手机发条短信验证,然后给你一个授权码这个授权码不是你的邮箱登录密码,而是专门用于第三方客户端登录 SMTP 服务器的密码。把它复制下来保存好,只会显示一次。

第二步,回到 DolphinScheduler,用 admin 账号进入“安全中心 -> 告警实例管理”。点击“创建告警实例”,类型选“Email”。表单看起来有点长,我挑关键的几个说:

  • 实例名称:起个能看懂的名字,比如“公司163邮箱”。
  • 收件人:可以填多个,用英文逗号隔开。比如zhangsan@company.com,lisi@company.com
  • 抄送人密送人:按需填写。
  • 用户:这里填你的发件邮箱地址,比如your_alert@163.com
  • 密码这里填的不是邮箱密码,而是上一步获取的 SMTP 授权码。这是最容易填错的地方!
  • SMTP 主机:163邮箱是smtp.163.com,QQ邮箱是smtp.qq.com,端口一般是 465 或 587。
  • 端口:如果你在下面选择了SSL加密方式,端口填 465;如果选TLS,填 587。我实测 465 + SSL 比较稳定。
  • 邮件协议:选SMTP
  • 是否开启TLS/SSL一定要开启,选 SSL 或 TLS,否则可能发不出去。
  • 发件人:可以和“用户”一样,也可以起个更友好的名字,比如“数据平台告警”。

填完之后,先别急着点确定。我强烈建议你点一下右下角的“测试”按钮。如果配置正确,你填的收件人邮箱会立刻收到一封测试邮件。如果没收到,就根据页面提示的错误信息去排查,通常是主机、端口、授权码或者加密方式不对。测试成功后再保存。

第三步,创建告警组。告警实例是“枪”,告警组是“持枪的人”。进入“告警组管理”,新建一个组,比如叫“数据研发组”。把需要接收告警的成员加进去,然后在“告警实例”那里,关联上一步创建的“公司163邮箱”实例。这样,这个组里的成员就能通过这个邮箱实例收到告警了。

最后一步,在工作流中使用告警。当你定义好一个工作流并上线后,点击“运行”时,弹出的启动参数窗口最下面,有一个“告警组”的选项。在这里选择你创建的“数据研发组”。下面还有个“通知策略”,我一般选“所有”,这样无论工作流成功还是失败,我都会收到邮件。成功邮件是绿色标题,失败邮件是红色标题,一目了然。点击确定执行,等任务跑完,检查一下邮箱,告警邮件应该已经躺在那儿了。有了这个,你就不用整天盯着控制台了,解放双手,让系统主动告诉你结果。

5. 运维排错与性能调优

系统跑起来之后,运维和排错就是家常便饭了。别怕出问题,关键是要知道怎么快速定位和解决。我总结了几类常见的问题和排查思路。

第一类:服务启动失败。这是最常遇到的。首先看日志,所有服务的日志都在安装目录的logs/文件夹下。比如 Master 启动不了,就看master-server.log;Api 服务访问不了,就看api-server.log。日志里的ERROR信息通常很直白。我遇到最多的是数据库连接问题,日志里会报Communications link failure或者Access denied。这时候回去检查dolphinscheduler_env.sh里的数据库连接字符串、用户名、密码对不对,数据库服务是否正常,以及防火墙是否开放了 3306 端口。另一个常见的是 ZooKeeper 连接失败,检查REGISTRY_ZOOKEEPER_CONNECT_STRING地址和端口,并用zkCli.sh -server your_zk:2181测试一下能否连接。

第二类:任务一直处于“提交成功”或“运行中”状态,但不往下走。这种情况多半是 Worker 节点的问题。首先去 Worker 节点的logs/worker-server.log里看有没有异常。更直接的方法是,登录到 Worker 机器上,用ps -ef | grep task看看有没有对应的任务进程在跑。如果没有,可能是 Worker 服务假死了,尝试重启一下 Worker 服务:bash ./bin/dolphinscheduler-daemon.sh stop worker-server然后再start。还有一种可能是租户配置不对,任务指定的租户在 Worker 机器上没有对应的操作系统用户,导致无法创建子进程。去安全中心检查一下,执行任务的租户是否在 Worker 机器上真实存在。

第三类:资源中心上传文件失败。如果报“存储未启用”,那就是common.properties里关于资源存储的配置没生效。确认修改后是否重启了所有服务。如果报 HDFS 权限错误,去 HDFS 上手动创建你配置的resource.upload.path目录,并用hdfs dfs -chmod -R 777 /dolphinscheduler赋予权限。还要确保 DolphinScheduler 的部署用户有读写 HDFS 的权限。

第四类:邮件告警发不出去。如果测试邮件都发不出去,按我们前面说的检查主机、端口、授权码和加密方式。如果测试能发,但任务跑完收不到,首先去“告警组管理”确认你的用户是否在正确的告警组里。然后去logs/alert-server.log里搜索你的工作流实例 ID,看看告警服务是否尝试发送了邮件,发送的结果是什么。有时候邮箱服务器会把告警邮件当成垃圾邮件拦截,去垃圾箱里找找看。

除了排错,系统稳定运行后,还可以做一些性能调优。在master-server/conf/master.propertiesworker-server/conf/worker.properties里有一些关键参数。比如master.server.exec.threadsworker.server.exec.threads,默认值可能比较保守,如果你的服务器 CPU 核心多,可以适当调大,增加并行处理任务的能力。worker.server.heartbeat.interval是 Worker 向 Master 汇报心跳的间隔,默认 10 秒,如果网络不稳定可以稍微调大点。对于数据库,定期清理t_ds_commandt_ds_error_commandt_ds_process_instancet_ds_task_instance这些历史表里的老旧数据,能有效控制数据库大小,提升查询速度。DolphinScheduler 本身也提供了清理脚本,在tools/bin/目录下可以找到。

最后,养成好习惯:善用监控。DolphinScheduler 的 UI 上有个“监控中心”,可以看 Master 和 Worker 的 CPU、内存、负载和磁盘使用情况。把这些指标和你服务器的监控系统(比如 Prometheus + Grafana)对接起来,设置告警阈值,能在资源瓶颈出现之前就发现问题。把日志收集到 ELK 或类似系统中,方便集中检索和分析,这样无论出什么问题,你都能第一时间拿到线索,快速响应。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/30 18:49:32

SenseVoice-small效果对比:量化前后WER误差变化与资源占用实测数据

SenseVoice-small效果对比:量化前后WER误差变化与资源占用实测数据 1. 引言:为什么我们需要关注模型量化? 如果你正在为手机、平板或者嵌入式设备寻找一个能离线运行的语音识别方案,那么“模型量化”这个词你一定不陌生。简单来…

作者头像 李华
网站建设 2026/8/30 19:26:32

Pico SDK版本升级陷阱与Unity调试优化实战指南

1. 为什么Pico SDK版本升级是个“技术选择题” 如果你刚开始接触Pico的Unity开发,可能会觉得,SDK嘛,肯定越新越好,新版本意味着新功能、性能优化和Bug修复,无脑升级就完事了。我刚开始也是这么想的,直到在项…

作者头像 李华
网站建设 2026/8/30 2:05:33

TransactionSynchronizationManager的ThreadLocal机制与事务回调实战解析

1. 从一次“踩坑”经历说起:为什么需要事务回调? 几年前,我负责一个电商订单系统。有个需求是:用户支付成功后,需要立刻发送一条短信通知。当时我图省事,直接在事务方法里调用了短信服务。结果线上出了个诡…

作者头像 李华
网站建设 2026/8/30 18:05:58

AcousticSense AI快速上手:拖拽音频文件,3步识别16种音乐风格

AcousticSense AI快速上手:拖拽音频文件,3步识别16种音乐风格 1. 引言:让AI“看见”你的音乐品味 你有没有想过,AI不仅能听懂你说的话,还能“看懂”你听的歌?不是简单地识别歌曲名字,而是像一…

作者头像 李华
网站建设 2026/8/17 1:26:32

PaddlePaddle-v3.3降本实战:跟随步骤,轻松实现AI项目费用优化

PaddlePaddle-v3.3降本实战:跟随步骤,轻松实现AI项目费用优化 做AI项目,尤其是涉及深度学习的,你是不是总觉得预算永远不够用?GPU服务器的账单每个月都像一记重拳,打得人喘不过气。我们团队之前也是这样&a…

作者头像 李华
网站建设 2026/8/24 20:40:39

ANIMATEDIFF PRO镜像免配置方案:开箱即用的RTX 4090电影渲染工作站

ANIMATEDIFF PRO镜像免配置方案:开箱即用的RTX 4090电影渲染工作站 1. 什么是ANIMATEDIFF PRO电影渲染工作站 ANIMATEDIFF PRO是一个基于AnimateDiff架构的专业级文生视频渲染平台,专为追求电影级视觉效果的内容创作者设计。这个镜像最大的特点就是开箱…

作者头像 李华