告别混乱调度:用DolphinScheduler + Docker Compose快速搭建个人数据工作流测试环境
在数据工程领域,工作流调度系统如同交响乐团的指挥,协调着各个数据处理任务的执行节奏。传统部署方式往往需要耗费大量时间在环境配置和依赖管理上,就像在音乐会开始前需要手动调试每一件乐器。而容器化技术则将这些繁琐的准备工作打包成标准化的"乐谱",让开发者能够专注于创作数据处理的"交响乐"本身。
本文将带你体验如何用Docker Compose快速搭建Apache DolphinScheduler测试环境,这种方案特别适合:
- 需要快速验证工作流设计的开发者
- 希望保持本地环境整洁的学习者
- 需要频繁重建测试环境的团队
1. 为什么选择容器化部署
传统物理机/虚拟机部署与容器化方案对比:
| 对比维度 | 传统部署 | Docker Compose方案 |
|---|---|---|
| 环境准备时间 | 30分钟~数小时 | 5分钟 |
| 依赖管理 | 手动安装配置 | 声明式定义,一键解决 |
| 环境隔离性 | 容易产生依赖冲突 | 完全隔离 |
| 清理难度 | 需要手动卸载各种组件 | docker-compose down即可完全清理 |
| 可移植性 | 需要重复配置 | 配置文件即环境 |
核心优势在于可重复性和隔离性。想象一下,当你需要测试不同版本的DolphinScheduler时,传统方式可能需要准备多台虚拟机,而容器化方案只需修改一个版本号就能创建全新的测试环境。
2. 环境准备与Docker配置
2.1 基础环境检查
确保你的系统已经安装以下组件:
- Docker Engine 20.10+
- Docker Compose v2.0+
- 至少4GB可用内存
- 10GB磁盘空间
验证Docker安装:
docker --version docker-compose version提示:在Linux系统上,建议将当前用户加入docker组以避免频繁使用sudo:
sudo usermod -aG docker $USER newgrp docker
2.2 编写Docker Compose文件
创建docker-compose.yml文件,我们将定义三个核心服务:
version: '3' services: zookeeper: image: zookeeper:3.8 container_name: ds-zookeeper ports: - "2181:2181" volumes: - zk_data:/data - zk_datalog:/datalog mysql: image: mysql:5.7 container_name: ds-mysql environment: MYSQL_ROOT_PASSWORD: dolphinscheduler MYSQL_DATABASE: dolphinscheduler MYSQL_USER: dolphinscheduler MYSQL_PASSWORD: dolphinscheduler ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci dolphinscheduler: image: apache/dolphinscheduler:3.1.3 container_name: ds-server depends_on: - zookeeper - mysql environment: DATABASE_HOST: mysql DATABASE_PORT: 3306 DATABASE_USERNAME: dolphinscheduler DATABASE_PASSWORD: dolphinscheduler ZOOKEEPER_QUORUM: zookeeper:2181 ports: - "12345:12345" volumes: - ds_data:/opt/dolphinscheduler volumes: zk_data: zk_datalog: mysql_data: ds_data:关键配置说明:
- 网络隔离:所有服务默认加入同一个网络,可通过服务名互相访问
- 数据持久化:使用命名卷保存数据库和工作流数据
- 版本控制:明确指定各组件版本,确保环境一致性
3. 启动与初始化
3.1 一键启动服务
在包含docker-compose.yml的目录执行:
docker-compose up -d观察服务启动状态:
docker-compose ps预期输出应显示三个服务状态均为running。
3.2 初始化数据库
虽然MySQL容器已经创建了数据库,但DolphinScheduler还需要初始化表结构:
docker exec ds-server bash -c "/opt/dolphinscheduler/script/create-dolphinscheduler.sh"注意:首次执行可能需要1-2分钟完成初始化,可通过日志观察进度:
docker-compose logs -f dolphinscheduler
4. 访问与基础配置
4.1 登录Web界面
服务启动完成后,访问:
http://localhost:12345/dolphinscheduler使用默认凭证登录:
- 用户名:admin
- 密码:dolphinscheduler123
首次登录后应立即修改密码:
- 点击右上角用户头像
- 选择"用户信息"
- 在"修改密码"选项卡中设置新密码
4.2 配置工作环境
建议进行以下基础配置:
创建租户:
- 进入"安全中心" → "租户管理"
- 点击"创建租户"
- 输入租户名称(如test)
- 选择关联的队列(默认default)
创建工作队列:
- 进入"安全中心" → "队列管理"
- 点击"创建队列"
- 输入队列名称(如test_queue)
- 设置队列容量(如100)
分配资源:
docker exec ds-server mkdir -p /tmp/dolphinscheduler docker exec ds-server chown -R dolphinscheduler:dolphinscheduler /tmp/dolphinscheduler然后在Web界面:
- 进入"安全中心" → "资源管理"
- 点击"创建目录"
- 输入路径:
/tmp/dolphinscheduler - 选择所属租户
5. 创建测试工作流
让我们创建一个简单的数据管道示例:
新建项目:
- 进入"项目管理" → "创建项目"
- 输入项目名称(如ETL_Pipeline)
- 选择租户和队列
定义工作流:
- 进入项目 → "工作流定义" → "创建工作流"
- 拖拽以下节点到画布:
- Shell节点:数据提取
- Python节点:数据转换
- Spark节点:数据分析
- 连接节点形成线性流程
配置节点:
# Python节点示例代码 import pandas as pd df = pd.read_csv('/tmp/input.csv') df['new_column'] = df['value'] * 2 df.to_csv('/tmp/output.csv', index=False)保存并运行:
- 点击"保存"按钮
- 点击"上线"使工作流可执行
- 点击"运行"触发工作流
6. 环境管理与维护
6.1 日常维护命令
| 操作场景 | 命令 |
|---|---|
| 停止所有服务 | docker-compose down |
| 重启单个服务 | docker-compose restart zookeeper |
| 查看实时日志 | docker-compose logs -f dolphinscheduler |
| 备份数据 | docker-compose pause+ 备份卷数据 |
| 升级版本 | 修改yml中的镜像版本后重新up |
6.2 常见问题排查
问题1:Web界面无法访问
- 检查端口冲突:
netstat -tulnp | grep 12345 - 验证容器状态:
docker-compose ps
问题2:工作流执行失败
- 查看执行节点日志:
docker exec ds-server tail -f /opt/dolphinscheduler/logs/worker-server.log - 检查资源权限:
docker exec ds-server ls -l /tmp/dolphinscheduler
问题3:数据库连接问题
- 测试MySQL连接:
docker exec ds-server mysql -hmysql -udolphinscheduler -pdolphinscheduler dolphinscheduler
7. 进阶配置技巧
7.1 自定义镜像构建
如需添加自定义依赖,可创建Dockerfile:
FROM apache/dolphinscheduler:3.1.3 # 安装Python依赖 RUN apt-get update && \ apt-get install -y python3-pip && \ pip3 install pandas numpy # 添加自定义插件 COPY custom-plugins /opt/dolphinscheduler/plugins然后修改docker-compose.yml中的dolphinscheduler服务:
dolphinscheduler: build: . image: custom-ds:1.0 # 其余配置保持不变...7.2 多节点部署配置
对于需要更高性能的场景,可以扩展worker节点:
dolphinscheduler-worker: image: apache/dolphinscheduler:3.1.3 command: ["worker-server"] depends_on: - zookeeper - mysql environment: ZOOKEEPER_QUORUM: zookeeper:2181 deploy: replicas: 37.3 监控集成
添加Prometheus监控:
monitoring: image: prom/prometheus ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml示例prometheus.yml配置:
scrape_configs: - job_name: 'dolphinscheduler' static_configs: - targets: ['dolphinscheduler:12345']8. 环境清理与重建
当需要完全重置环境时:
# 停止并删除所有容器 docker-compose down # 删除持久化数据(谨慎操作!) docker volume rm $(docker volume ls -q | grep ds_) # 重新创建环境 docker-compose up -d对于日常开发,建议使用不同的compose文件管理多个环境:
# 测试环境 docker-compose -f docker-compose.test.yml up # 演示环境 docker-compose -f docker-compose.demo.yml up