DolphinDB 是一款高性能时序数据库。DolphinDB 集成了功能强大的编程语言和高容量高速度的批流一体数据分析系统,为海量数据(特别是时间序列数据)的快速存储、检索、计算及分析提供一站式解决方案。在实际生产环境中,经常存在数据导入、转换、查询计算,更新等一系列流程任务,各个部分之间存在依赖,如何将这些 DolphinDB 任务按照需求准确、有效率地调度,可以借用 DolphinScheduler 任务调度器。
本文将从生产环境中的一个 ETL 场景出发,将 DolphinScheduler 引入到 DolphinDB 的高可用集群中,通过使用 DolphinScheduler 提供的功能来调度 DolphinDB 的数据 ETL 作业。
1. Apache DolphinScheduler
Apache DolphinScheduler 是一个分布式易扩展的可视化 DAG 工作流任务调度开源系统。该系统适用于企业级场景,提供了一个支持可视化操作任务、工作流和全生命周期数据处理的解决方案,解决了数据研发 ETL 依赖错综复杂,无法监控任务健康状态的问题。 DolphinScheduler 以 DAG(Directed Acyclic Graph,DAG)流式方式组装任务,可以及时监控任务的执行状态,支持重试、指定节点恢复失败、暂停、恢复、终止任务等操作。
1.1 特性
- 执行定时任务:在生产环境中,一个普遍的需求是周期性地从数据源中提取、转换、加载数据到 DolphinDB,如每一天、每个小时等,DolphinScheduler 可以方便地进行定时管理,满足需求。
- 执行历史任务:有时候我们由于业务变动,需要将历史数据进行重新计算和加载入 DolphinDB。在这种情况下,我们仅需在 DolphinScheduler Web 界面上定义相应任务的工作流,并定义和传入开始时间和结束时间的参数。通过这个步骤,我们可以处理任意时间段的数据。
- 并行执行任务:在业务中,我们可能需要同时处理多项数据ETL任务,如同时导入数据到 DolphinDB 的不同表或同一个表的不同分区。DolphinScheduler 允许我们并行执行多项工作流任务,提高执行效率。
- 高效处理编排:在生产环境中,大多数情况下存在任务之间、工作流之间有条件地执行,比如在 DolphinDB 的数据ETL中,下游任务依赖于上游任务的执行状态做不同的操作,有的任务之间关系错综复杂。可以在 DolphinScheduler 中按照逻辑对工作流进行定义,轻松编排任务之间的关系。
1.2 安装部署
DolphinScheduler 可在单机、单服务器集群、多服务器集群、K8S环境下部署,本节内容将以单机部署流程作为演示内容,仅供参考。
前置条件
- JDK:安装JDK(1.8+)并配置JAVA_HOME环境变量,DolphinScheduler的启动依赖于该环境变量,同时将其下的bin目录追加到PATH环境变量中。
- 二进制包:已配置DolphinDB数据源的DolphinScheduler版本,下载链接在https://cdn.dolphindb.cn/downloads/apache-dolphinscheduler-3.1.7-bin.tar.gz
- 本教程将MySQL作为 DolphinScheduler 持久化的元数据库,因此要保证服务器已安装好MySQL,若没有,需要下载安装,所有平台的mysql下载地址为:MySQL 下载地址
元数据持久化配置
单机服务使用H2数据库来存储元数据,而H2数据库是一种内存级别的数据库,因此当DolphinScheduler程序重启时,会导致之前定义的工作流等内容全部丢失,需要重新定义,造成效率低下和不必要的麻烦。因此,将元数据持久化是非常有必要的,DolphinScheduler支持MySQL和PostgreSQL作为元数据的存储数据库,本文以配置MySQL为例,主要有以下流程:
- 解压DolphinScheduler程序包
tar -xvzf apache-dolphinscheduler-3.1.7-bin.tar.gz
cd apache-dolphinscheduler-3.1.7-bin
- 进入MySQL,创建数据库和用户
// 创建数据库
CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
// 创建用户,并设置密码
CREATE USER 'dolphinscheduler'@'%' IDENTIFIED BY '密码';
// 给用户赋予库的权限
GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'dolphinscheduler'@'%';
flush privileges;
- 修改
apache-dolphinscheduler-3.1.7-bin/bin/env/dolphinscheduler_env.sh文件设定环境变量,将{user}和{password}改为上一步创建的用户名和密码
export 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"
export SPRING_DATASOURCE_USERNAME={user}
export SPRING_DATASOURCE_PASSWORD={password}
- 修改
apache-dolphinscheduler-3.1.7-bin/standalone-server/conf/application.yaml文件中的配置(在文件尾部),上半部分由于这里用的不是postgresql,直接注释掉就好。将{user}和{password}改为上面创建的用户名和密码
---
#spring:
# config:
# activate:
# on-profile: postgresql
# quartz:
# properties:
# org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
# datasource:
# driver-class-name: org.postgresql.Driver
# url: jdbc:postgresql://127.0.0.1:5432/dolphinscheduler
# username: root
# password: root
---
spring:
config:
activate:
on-profile: mysql
sql:
init:
schema-locations: classpath:sql/dolphinscheduler_mysql.sql
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8
username: {user}
password: {password}
- 初始化数据库,如果上述步骤没有问题,这里就不会报错:
bash apache-dolphinscheduler-3.1.7-bin/tools/bin/upgrade-schema.sh
- 执行完成之后进入 MySQL 查询会发现名称为
dolphinscheduler的数据库已经生成了很多表格

启动DolphinScheduler单机服务器
注意:启动DolphinScheduler需要依赖多个端口号,分别是:
12345、50052、25333、25334、1234、5678
使用lsof -i:<port>检查以上端口号是否被占用,如果有端口被别的进程占用,修改apache-dolphinscheduler-3.1.7-bin/standalone-server/conf/application.yaml中对应的端口
- 当配置好以上内容之后,进入执行
apache-dolphinscheduler-3.1.7-bin目录并执行以下命令启动:
bash ./bin/dolphinscheduler-daemon.sh start standalone-server
2. 输入以下命令查看是否执行成功
a. 运行jps查看相应实例是否已在进程中

b. 运行bash ./bin/dolphinscheduler-daemon.sh status standalone-server查看 standalone-server的运行状态

3. 停止运行
bash ./bin/dolphinscheduler-daemon.sh stop standalone-server
4. 启动成功后,在浏览器中输入服务器IP:12345/dolphinscheduler/ui/login进行登录
a. 默认用户名:admin
b. 默认密码:dolphinscheduler123
登陆成功后将会看到如下页面:

- 重启dolphinscheduler服务,测试已经连接好数据库

1.3 DolphinDB 与 DolphinScheduler 结合
DolphinDB 作为强大的高性能时序数据库,能够高效存储和处理 PB 级的海量数据集,可以通过编写脚本实现数据的处理、存储、因子计算、建模、回测等任务。在实际生产中,源数据下载、数据处理、数据入库、数据校验、指标计算等任务之间存在先后关系和条件关系,如果在 DolphinDB 脚本中编写相关的逻辑关系代码,一来会造成与实际任务不相关的脚本冗余,二来如果实际业务变动,需要增加或删减部分任务,相互依赖的任务之间的关系代码也需要变动,造成更新迭代效率低下。
考虑到这种情况,如果能够将 DolphinDB 与 D

本文从生产环境的ETL场景出发,将DolphinScheduler引入DolphinDB高可用集群,介绍了DolphinScheduler特性、安装部署,阐述了DolphinDB与它结合的方法,包括创建数据源、调度任务等,还说明了调度DolphinDB数据ETL任务的流程,对比了DolphinScheduler与Airflow,并列出常见问题。
最低0.47元/天 解锁文章
1239

被折叠的 条评论
为什么被折叠?



