Apache DolphinScheduler 接入 DolphinDB 数据源:从界面配置到插件激活的完整实战指南
【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler
DolphinDB 是一款面向时序数据的高性能分布式数据库,常被用于量化金融、物联网等高频数据场景。在 Apache DolphinScheduler 中,你可以通过内置的dolphinscheduler-datasource-dolphindb插件将 DolphinDB 注册为数据源,供 SQL 类任务、数据导入导出等编排流程复用连接信息。本文基于官方文档与仓库源码,完整讲解 DolphinDB 数据源的创建步骤、每个字段的含义与底层映射逻辑,以及如何从 3.3.0 版本开始手动下载并激活该插件,帮助你一次配置、随处复用,快速打通 DolphinDB 与 DolphinScheduler 的调度链路。
一、在 DolphinScheduler UI 中创建 DolphinDB 数据源
登录 DolphinScheduler 后,进入「数据源中心」页面,点击「创建数据源」,在数据源类型下拉框中选择DOLPHINDB,即可看到如下表单。各字段的含义如下:
| 字段 | 说明 |
|---|---|
| Datasource(数据源类型) | 选择DOLPHINDB |
| Datasource Name(数据源名称) | 为该数据源命名,名称在同一租户下应保持唯一,后续任务中通过该名称引用连接 |
| Description(描述) | 可选,填写该数据源的用途、负责人等备注信息 |
| IP/Host Name(IP/主机名) | DolphinDB 服务的 IP 或主机名 |
| Port(端口) | DolphinDB 服务的端口,DolphinDB 默认端口为8848 |
| Username(用户名) | 连接 DolphinDB 的用户名,例如 DolphinDB 默认管理员admin |
| Password(密码) | 对应用户名的密码 |
| JDBC connection parameters(JDBC 连接参数) | DolphinDB 连接的参数设置,以JSON 格式填写,非必填 |
填写完成后点击「测试连接」,成功后保存即可。从源码结构看,前端表单收集的正是 DolphinDBDataSourceParamDTO 中定义的一组属性——name、note(描述)、host、port、userName、password与other(JDBC 连接参数),后端校验与持久化都围绕这份 DTO 展开。
1.1 端口与连接串的自动生成逻辑
在界面中填写主机与端口后,DolphinScheduler 会自动拼接 JDBC 连接串,无需手工输入。对应逻辑位于 DolphinDBDataSourceProcessor.createConnectionParams():
String address = String.format("%s%s:%s", DataSourceConstants.JDBC_DOLPHINDB, dolphinDBParam.getHost(), dolphinDBParam.getPort()); String jdbcUrl = String.format("%s", address);其中JDBC_DOLPHINDB定义在 DataSourceConstants 中,值为jdbc:dolphindb://。也就是说,当填写主机localhost、端口8848时,实际生成的连接地址为jdbc:dolphindb://localhost:8848。该逻辑同时被单元测试覆盖(见 DolphinDBDataSourceProcessorTest),测试断言address与jdbcUrl均为jdbc:dolphindb://localhost:8848,可作为排查问题的基准。
二、JDBC 连接参数(JSON 格式)详解
「JDBC connection parameters」字段接收一段JSON 对象,用于透传额外的 JDBC 连接属性,例如时区、连接超时等。它在源码中对应 DTO 的other属性,并在最终拼接到 JDBC URL 上。拼接逻辑位于 DolphinDBDataSourceProcessor.getJdbcUrl() 与 transformOther():
@Override public String getJdbcUrl(ConnectionParam connectionParam) { DolphinDBConnectionParam dolphinDBConnectionParam = (DolphinDBConnectionParam) connectionParam; if (MapUtils.isNotEmpty(dolphinDBConnectionParam.getOther())) { return String.format("%s?%s", dolphinDBConnectionParam.getJdbcUrl(), transformOther(dolphinDBConnectionParam.getOther())); } return dolphinDBConnectionParam.getJdbcUrl(); } private String transformOther(Map<String, String> otherMap) { ... otherMap.forEach((key, value) -> list.add(String.format("%s=%s", key, value))); return String.join("&", list); }由此可见:若填写了 JSON 参数,最终 JDBC URL 会变成jdbc:dolphindb://host:port?k1=v1&k2=v2的形式,每个 JSON 键值对以&连接拼入 URL。典型示例如下:
{ "serverTimezone": "utc" }该示例在插件测试 testCreateConnectionParams 中出现,说明serverTimezone是常见的可配置项。你可以按需补充 DolphinDB JDBC 驱动支持的其他连接属性(如读取超时、启用 SSL 等),具体取值范围以所使用的 DolphinDB JDBC 驱动版本为准。
2.1 密码的存储与还原
出于安全考虑,数据源保存时密码并不会明文落库。在createConnectionParams()中,密码通过PasswordUtils.encodePassword()进行加密存储;建立真实连接时,则通过PasswordUtils.decodePassword()还原,见 DolphinDBDataSourceProcessor.getConnection()。整个连接创建流程由JdbcDriverConnectionProvider完成:加载驱动类、拼接带参数的 JDBC URL、传入用户名与解密后的密码,最终返回java.sql.Connection。
三、插件激活:DolphinDB 数据源并非开箱即用
原文档明确指出,DolphinDB 数据源不在默认内置支持范围之内(Native Supported: No)。从 3.3.0 版本开始,DolphinScheduler 的二进制发行包不再打包任何插件依赖,需要用户自行下载激活。若跳过此步骤直接创建/测试连接,通常会抛出ClassNotFoundException(例如找不到com.dolphindb.jdbc.Driver)。
3.1 使用 install-plugins.sh 安装插件依赖
推荐的方式是执行官方脚本一键安装,详见伪集群部署文档的 Download Plugins Dependencies 一节:
bash ./bin/install-plugins.sh 3.3.0install-plugins.sh位于仓库 script/install-plugins.sh,它会根据conf/plugins_config中声明的插件清单,从 Maven 中央仓库拉取对应的插件依赖包。通常我们并不需要全部连接器插件,只保留需要的即可。例如仅需 DolphinDB 数据源时,可在conf/plugins_config的--datasource-plugins--段中保留并添加:
--datasource-plugins-- dolphinscheduler-datasource-dolphindb --end--仓库自带的 config/plugins_config 中已默认收录dolphinscheduler-datasource-dolphindb,实际部署时按需精简清单即可。关于脚本更详细的用法,可参考 dolphinscheduler-daemon.sh 与 install-plugins.sh 的实现说明。
3.2 驱动坐标与驱动类
DolphinDB 数据源插件的 Maven 依赖坐标(声明于 dolphinscheduler-datasource-dolphindb/pom.xml):
- GroupId:
com.dolphindb - ArtifactId:
jdbc - 版本:
3.00.3.0
对应的 JDBC 驱动类为com.dolphindb.jdbc.Driver,定义在 DataSourceConstants.COM_DOLPHINDB_JDBC_DRIVER,并通过DolphinDBDataSourceProcessor.getDatasourceDriver()返回。连接池的探活查询(validationQuery)为select 1,定义在同文件的DOLPHINDB_VALIDATION_QUERY常量处。
若你的环境中 DolphinDB 服务版本与驱动版本存在差异,需要替换驱动版本时,可以手动将对应版本的 JDBC 驱动 JAR 放入数据源插件的依赖目录(即install-plugins.sh下载后生成的插件依赖路径),并确保插件模块以provided范围依赖驱动(插件包本身不含驱动,见 pom.xml 中 dolphinscheduler-spi、datasource-api、common 均为provided),由外部依赖目录统一提供。
四、源码级解析:插件如何被加载与使用
DolphinDB 数据源插件完全遵循 DolphinScheduler 的数据源 SPI 规范,整个模块仅含 7 个 Java 类,职责划分清晰:
| 类 | 职责 |
|---|---|
| DolphinDBDataSourceChannelFactory | SPI 工厂入口,注册DataSourceChannel,供 API 服务发现插件 |
| DolphinDBDataSourceChannel | 通道门面,分别创建临时连接客户端与连接池客户端 |
| DolphinDBAdHocDataSourceClient | 临时(一次性)连接客户端,用于「测试连接」等场景 |
| DolphinDBPooledDataSourceClient | 基于 HikariCP 的连接池客户端,用于任务运行时的连接复用 |
| DolphinDBDataSourceProcessor | 核心处理器:参数校验、DTO 转换、JDBC URL 拼接、驱动加载与连接建立 |
| DolphinDBDataSourceParamDTO | 前端表单数据模型,getType()返回DbType.DOLPHINDB |
| DolphinDBConnectionParam | 后端持久化连接模型,继承BaseConnectionParam,持有 URL、驱动、密码等 |
其中DolphinDBDataSourceProcessor通过@AutoService(DataSourceProcessor.class)注册为服务提供者,DolphinScheduler API 服务启动时会自动扫描并加载该处理器,从而在数据源中心的下拉框中出现「DOLPHINDB」选项。
4.1 参数校验行为
在保存或测试连接前,checkDatasourceParam() 会执行两层校验:其一校验主机(host)是否为空;其二通过checkOther()校验 JSON 格式的连接参数是否合法。值得注意的是,该校验逻辑沿用了 Redshift 处理器的写法(getType()判断中保留了DbType.REDSHIFT分支),属于插件代码中的历史遗留,不影响 DolphinDB 的正常使用。
4.2 数据源唯一标识
在 DolphinDBDataSourceProcessorTest 中可以看到,DolphinDB 数据源唯一标识的生成规则为dolphindb@{user}@{password}@{jdbcUrl},用于数据源缓存与复用时的身份判定。
五、验证与常见问题
- 测试连接失败,日志报
ClassNotFoundException: com.dolphindb.jdbc.Driver:说明插件依赖未安装。请参照上文第三节执行install-plugins.sh,并确认plugins_config中保留了dolphinscheduler-datasource-dolphindb,然后重启 API 服务。 - 连接超时或拒绝连接:检查 IP/端口是否可达,DolphinDB 默认端口为
8848;同时确认防火墙与 DolphinDB 服务的监听配置。 - 时区或参数生效问题:确认是否通过「JDBC connection parameters」以 JSON 方式传入,且 JSON 格式合法(例如
{"serverTimezone":"utc"}),格式错误会在校验阶段被checkOther()拦截。 - 任务中如何引用:在 SQL 等支持数据源的任务节点中选择已创建的 DolphinDB 数据源名称即可,底层通过
DolphinDBPooledDataSourceClient复用连接,避免频繁建连。
按上述步骤完成插件激活与数据源创建后,即可在 DolphinScheduler 中像使用其他关系型数据源一样,对 DolphinDB 执行查询与数据加工任务。
【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考