Apache DolphinScheduler Standalone 极速体验版部署指南:单机快速上手与元数据库切换实战
Standalone 是 Apache DolphinScheduler 官方提供的极速体验部署形态:一个进程内同时承载 API、Master、Worker、Alert 等核心组件,配合内置的内存 H2 数据库与内置 Zookeeper,无需任何外部依赖即可在几分钟内启动一套可用的调度平台。本文以仓库中的官方文档 Standalone 安装指南 为主体,完整讲解前置环境准备、用户权限配置、解压启动、Web UI 登录、服务启停管理,并深入结合仓库源码剖析 Standalone 的进程模型与配置项,最后给出切换到 MySQL/PostgreSQL 外部元数据库、调整资源中心目录的实战方案,帮助初学者以最低成本完整体验 DolphinScheduler 的核心功能。
适用场景判断:官方文档明确给出了三种部署形态的推荐路径——新手快速体验 DolphinScheduler 功能,首选 Standalone;想体验更完整功能、调度更大规模任务,推荐伪集群部署;生产环境则推荐集群部署或 Kubernetes 部署。Standalone 并非生产部署形态,请勿将其直接用于生产环境。
Standalone 的定位与限制
适用规模与默认存储特性
Standalone 的定位是"快速体验",因此官方对其使用规模有明确建议:
- 建议工作流数量控制在 20 个以下。原因在于 Standalone 默认使用内存型 H2 数据库作为元数据存储,同时内置 Zookeeper Testing Server,任务量过大可能导致系统不稳定。
- 数据易失性:当 Standalone 停止或重启时,内存型 H2 数据库中的数据会被清空。如果希望元数据持久化,必须切换到外部数据库(MySQL 或 PostgreSQL),详见本文"元数据库切换"一节。
进程模型:单进程聚合全部服务
Standalone 之所以"开箱即用",是因为它将分布式形态下的多个独立进程聚合到了一个 JVM 中。从源码中的 StandaloneServer.java 可以看到,它是一个标准的 Spring Boot 应用入口:
@Slf4j
@SpringBootApplication
public class StandaloneServer {
public static void main(String[] args) throws Exception {
try {
SpringApplication.run(StandaloneServer.class, args);
} catch (Exception ex) {
log.error("StandaloneServer start failed", ex);
System.exit(1);
}
}
}
从打包结构可以进一步确认 Standalone 的内部组成。在 dolphinscheduler-standalone-server.xml 这个 Maven assembly 配置中,Standalone 发布包被组装为 standalone-server 目录,其中:
- 从
dolphinscheduler-dao引入sql/**/*(建表 SQL 脚本,用于初始化元数据库); - 从
dolphinscheduler-common引入common.properties(资源中心、sudo、Kerberos 等公共配置,见下文); - 从
dolphinscheduler-api引入task-type-config.yaml与dynamic-task-type-config.yaml(任务类型注册配置); - 直接引入
dolphinscheduler-ui的构建产物dist到./ui目录(前端静态资源由 API 进程一并托管); - 依赖统一打入
libs目录。
也就是说,Standalone 本质上是一个"内置 API + Master + Worker + Alert + 前端 UI + 元数据库"的单进程发布物,这正是它解压即用、无需预装 Zookeeper 和数据库的原因。
前置准备工作
开始部署前,需要准备以下两项环境要素:
- JDK:下载 JDK 1.8 或 11,安装并配置
JAVA_HOME环境变量,同时将JAVA_HOME下的bin目录追加到PATH环境变量中。若环境中已存在符合条件的 JDK,可跳过此步。 - 二进制安装包:从 Apache DolphinScheduler 官方下载页面获取对应版本的二进制包(
apache-dolphinscheduler-*-bin.tar.gz)。
下载插件依赖
Standalone 与伪集群部署一样,需要下载插件依赖。完整操作请参考伪集群部署的"下载插件依赖"章节。
特别注意:Standalone 最小化运行必须下载两个插件依赖:
dolphinscheduler-task-shell:Shell 任务插件,Standalone 体验流程中创建 Shell 工作流需要它;dolphinscheduler-storage-hdfs:HDFS 存储插件。结合 common.properties 可以看到,Standalone 默认的资源存储类型为LOCAL,而官方文档注释明确指出 LOCAL 是 HDFS 的一个特殊实现(resource.hdfs.fs.defaultFS = file:///),因此即使使用本地目录也需要该插件支撑资源中心的基础能力。
配置用户免密及权限
DolphinScheduler 通过 sudo -u {linux-user} -i 切换不同的 Linux 用户来执行任务,从而实现多租户运行作业。因此部署用户必须具备免密的 sudo 权限。以创建 dolphinscheduler 用户为例:
# 创建用户需使用 root 登录
useradd dolphinscheduler
# 添加密码
echo "dolphinscheduler" | passwd --stdin dolphinscheduler
# 配置 sudo 免密
sed -i '$dolphinscheduler ALL=(ALL) NOPASSWD: ALL' /etc/sudoers
sed -i 's/Defaults requiretty/#Defaults requiretty/g' /etc/sudoers
# 修改目录权限,使部署用户对二进制包解压后的 apache-dolphinscheduler-*-bin 目录有操作权限
chown -R dolphinscheduler:dolphinscheduler apache-dolphinscheduler-*-bin
chmod -R 755 apache-dolphinscheduler-*-bin
注意事项:
- 如果
/etc/sudoers文件中存在Defaults requiretty这一行,必须将其注释掉(上面第 4 条命令已处理),否则sudo -u切换执行任务时会因为无法分配伪终端而失败; - 初学者如果暂不理解多租户机制,可以暂时忽略 sudo 配置,等后续深入时再补齐。
sudo.enable 这一行为在 common.properties 中有对应开关:默认 sudo.enable=true,即执行用户为租户用户、部署用户需要 sudo 权限;若设置为 false,则执行用户固定为部署用户,不再需要 sudo。生产环境可按安全策略调整。
启动 DolphinScheduler Standalone Server
解压并启动
二进制压缩包中已包含 Standalone 的启动脚本,解压后即可快速启动。务必切换到具有 sudo 权限的用户后执行:
# 解压并运行 Standalone Server
tar -xvzf apache-dolphinscheduler-*-bin.tar.gz
chmod -R 755 apache-dolphinscheduler-*-bin
cd apache-dolphinscheduler-*-bin
bash ./bin/dolphinscheduler-daemon.sh start standalone-server
启动脚本 dolphinscheduler-daemon.sh 是整个 Standalone(以及各独立服务)的守护进程管理入口。从源码看,其运行机制包括:
- 支持的动作与目标:
(start|stop|status) <api-server|master-server|worker-server|alert-server|standalone-server>; - 启动时先通过
overwrite_server_env用bin/env/dolphinscheduler_env.sh覆盖各服务的conf/dolphinscheduler_env.sh,实现统一环境变量管理; - 日志输出到
standalone-server/logs/standalone-server-${HOSTNAME}.out,PID 写入standalone-server/pid; - 若进程已在运行,再次
start会被拒绝并提示先停止; stop采用优雅停止:先pkill -P发送终止信号,等待STOP_TIMEOUT(5 秒)后仍未退出才使用kill -9强制结束。
登录 DolphinScheduler Web UI
启动完成后,在浏览器访问:
http://localhost:12345/dolphinscheduler/ui
默认账号密码为:admin / dolphinscheduler123。
UI 的访问端口与上下文路径由 Standalone 的 application.yaml 定义:server.port=12345、server.servlet.context-path=/dolphinscheduler/。前端静态资源正是由该进程托管的 dolphinscheduler-ui 构建产物(对应 assembly 中 dist -> ./ui 的打包配置)。
启停服务命令
./bin/dolphinscheduler-daemon.sh 除了快速启动,也支持停止与状态查询,全部命令如下:
# 启动 Standalone Server 服务
bash ./bin/dolphinscheduler-daemon.sh start standalone-server
# 停止 Standalone Server 服务
bash ./bin/dolphinscheduler-daemon.sh stop standalone-server
# 查看 Standalone Server 状态
bash ./bin/dolphinscheduler-daemon.sh status standalone-server
关于 Python 网关服务:Python 网关服务默认关闭。如果需要通过
pydolphinscheduler以 Python 方式提交工作流,请修改 YAML 配置,将python-gateway.enabled设置为true,配置文件路径为api-server/conf/application.yaml(Standalone 发布包中即为standalone-server/conf/application.yaml)。
配置数据库:从 H2 切换到外部元数据库
为什么需要外部数据库
Standalone 默认使用 H2 内存数据库作为元数据存储,好处是用户无需在启动前预装任何数据库即可体验。但如前所述,H2 内存库在 Standalone 停止或重启后会清空全部元数据。若希望元数据持久化,必须切换到 MySQL 或 PostgreSQL。完整配置请参考数据源设置文档中的"Standalone Switching Metadata Database Configuration"章节,以下以 MySQL 为例展开。
第一步:创建并初始化数据库
首先需要创建数据库与用户。MySQL 5.6 / 5.7 的初始化 SQL:
mysql -uroot -p
mysql> CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
# 将 {user} 和 {password} 替换为你的用户名和密码
mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO '{user}'@'%' IDENTIFIED BY '{password}';
mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO '{user}'@'localhost' IDENTIFIED BY '{password}';
mysql> flush privileges;
MySQL 8 的初始化 SQL(用户创建方式与 5.x 不同):
mysql -uroot -p
mysql> CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
# 将 {user} 和 {password} 替换为你的用户名和密码
mysql> CREATE USER '{user}'@'%' IDENTIFIED BY '{password}';
mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO '{user}'@'%';
mysql> CREATE USER '{user}'@'localhost' IDENTIFIED BY '{password}';
mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO '{user}'@'localhost';
mysql> FLUSH PRIVILEGES;
PostgreSQL 的初始化方式:
# 使用 psql 工具登录 PostgreSQL
psql
# 创建数据库
postgres=# CREATE DATABASE dolphinscheduler;
# 将 {user} 和 {password} 替换为你的用户名和密码
postgres=# CREATE USER {user} PASSWORD {password};
postgres=# ALTER DATABASE dolphinscheduler OWNER TO {user};
# 退出 PostgreSQL
postgres=#\q
# 在终端执行以下命令,将配置追加到 pg_hba.conf 并重载,{ip} 替换为 DS 集群的 IP 地址
echo "host dolphinscheduler {user} {ip} md5" >> $PGDATA/pg_hba.conf
pg_ctl reload
第二步:下载 JDBC 驱动
使用 MySQL 时,需要手动下载 mysql-connector-java 驱动(8.0.16) 并放入 DolphinScheduler 的以下 libs 目录:
api-server/libsalert-server/libsmaster-server/libsworker-server/libs
同时按官方文档要求,还需将驱动复制到 ./standalone-server/libs/standalone-server/,因为 Standalone 将上述服务聚合为单个进程。
版本约束:如果在"数据源中心"中仅将 MySQL 作为业务数据源使用,对 JDBC 驱动版本没有硬性要求;但如果将 MySQL 作为 DolphinScheduler 的元数据库,则仅支持 8.0.16 及以上版本。
第三步:设置环境变量并启动
在终端中设置以下环境变量(替换 {address}、{user}、{password}):
export DATABASE=mysql
export SPRING_PROFILES_ACTIVE=${DATABASE}
export SPRING_DATASOURCE_URL="jdbc:mysql://{address}/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8&useSSL=false"
export SPRING_DATASOURCE_USERNAME={user}
export SPRING_DATASOURCE_PASSWORD={password}
时区配置提示:官方文档特别提醒,避免使用 CST 这类有歧义的时区标识,否则可能导致调度时间错误,应使用明确的时区,例如 serverTimezone=Asia/Shanghai。因此更稳妥的 MySQL 配置为:
export DATABASE=${DATABASE:-mysql}
export SPRING_PROFILES_ACTIVE=${DATABASE}
export SPRING_DATASOURCE_URL="jdbc:mysql://127.0.0.1:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone={your_timezone}"
export SPRING_DATASOURCE_USERNAME={user}
export SPRING_DATASOURCE_PASSWORD={password}
PostgreSQL 的对应配置为:
export DATABASE=${DATABASE:-postgresql}
export SPRING_PROFILES_ACTIVE=${DATABASE}
export SPRING_DATASOURCE_URL="jdbc:postgresql://127.0.0.1:5432/dolphinscheduler"
export SPRING_DATASOURCE_USERNAME={user}
export SPRING_DATASOURCE_PASSWORD={password}
随后按标准流程初始化元数据库表结构:
bash tools/bin/upgrade-schema.sh
完成以上步骤后重新启动 standalone-server,即可使用外部数据库持久化元数据,停止或重启 Standalone 不再丢失数据。
调整资源中心目录
DolphinScheduler 默认使用本地模式目录 /tmp/dolphinscheduler 作为资源中心。如需修改资源中心目录,请修改 conf/common.properties 中 resource 的相关配置项。该文件在源码仓库中对应 common.properties,关键配置项包括:
| 配置项 | 默认值 | 说明 |
|---|---|---|
data.basedir.path |
/tmp/dolphinscheduler |
用户数据本地目录,需确保目录存在且有读写权限 |
resource.storage.type |
LOCAL |
资源存储类型:LOCAL、HDFS、S3、OSS、GCS、ABS、OBS、COS。LOCAL 是默认类型,是 resource.hdfs.fs.defaultFS = file:/// 的 HDFS 特殊实现;注意 LOCAL 模式不支持分布式读写,仅在单机可用,除非挂载共享文件系统 |
resource.storage.upload.base.path |
/tmp/dolphinscheduler |
资源在存储端的基础路径,需保证目录存在且有读写权限,推荐 /dolphinscheduler |
resource.query.interval |
10000 |
资源查询间隔(毫秒) |
sudo.enable |
true |
是否使用 sudo:为 true 时执行用户为租户用户、部署用户需 sudo 权限;为 false 时执行用户为部署用户、无需 sudo |
其他与任务执行相关的常用配置(同一文件内)还包括:shell.kill.wait.timeout=10(Shell 进程超时后使用 kill -9 强杀)、remote.logging.enable=false(是否启用远程日志)、development.state=false(开发模式是否保留任务执行目录)等,可按需调整。
常见问题与注意事项汇总
- 数据丢失是预期行为:Standalone 默认使用内存 H2,重启即清空,务必不要将其用于保存重要工作流数据;
- sudo 配置不可省略:多租户任务执行依赖
sudo -u {linux-user} -i,部署用户必须免密 sudo,并注意注释/etc/sudoers中的Defaults requiretty; - 20 个工作流上限是体验边界:超出该规模请转向伪集群部署或集群部署;
- MySQL 元数据库版本约束:JDBC 驱动需 8.0.16 及以上,且要同时放入 Standalone 的
libs/standalone-server目录; - 时区必须显式指定:避免
CST等歧义时区导致调度时间错乱,使用serverTimezone=Asia/Shanghai等明确时区; - 资源中心目录:默认
/tmp/dolphinscheduler,修改conf/common.properties的 resource 相关配置项即可,注意 LOCAL 存储类型不支持分布式读写。
至此,你已经可以在一台机器上快速启动并完整体验 Apache DolphinScheduler 的工作流编排能力;当你需要更完整的分布式功能或大规模调度时,基于本文掌握的进程模型、元数据库与资源中心配置知识,也能平滑迁移到伪集群或集群部署形态。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust4.24 K638- DDeepSeek-V4.1-FlashDeepSeek-V4.1-Flash 是一个多模态混合专家(MoE)模型,拥有 5520 亿骨干参数,并支持最多一百万 token 的上下文长度。该模型原生支持图像和文本输入,并以自回归方式生成文本Python710
SlideSCIPPT插件,支持素材库、AI助手、一键添加图片标题,复制粘贴位置、一键图片对齐、一键插入Markdown(加粗、超链接等行内样式、代码块、LaTeX等块级样式)、便捷导出图片!C#280
hello-agents📚 《从零开始构建智能体》——从零开始的智能体原理与实践教程Python52774
new-apiAI模型聚合管理中转分发系统,一个应用管理您的所有AI模型,支持将多种大模型转为统一格式调用,支持OpenAI、Claude、Gemini等格式,可供个人或者企业内部管理与分发渠道使用。🍥 A Unified AI Model Management & Distribution System. Aggregate all your LLMs into one app and access them via an OpenAI-compatible API, with native support for Claude (Messages) and Gemini formats.Go22445
JeecgBoot🔥企业级低代码平台集成了AI应用平台,帮助企业快速实现低代码开发和构建AI应用!前后端分离架构 SpringBoot,SpringCloud、Mybatis,Ant Design4、 Vue3.0、TS+vite!强大的代码生成器让前后端代码一键生成,无需写任何代码! 引领AI低代码开发模式: AI生成->OnlineCoding-> 代码生成-> 手工MERGE,显著的提高效率,又不失灵活~Java36551