Apache DolphinScheduler OceanBase 数据源接入指南兼容模式、连接参数与插件激活实践【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler本文围绕 Apache DolphinScheduler 的 OceanBase 数据源展开完整讲解在数据源管理页面中创建 OceanBase 数据源所需的全部字段IP、端口、用户名、密码、数据库名、兼容模式、Jdbc 连接参数等并结合仓库源码说明兼容模式如何决定连接校验与 JDBC URL 拼接为什么需要自行引入 oceanbase-client 驱动帮助你在使用 SQL/存储过程等任务前正确完成 OceanBase 数据源的注册与激活。概览DolphinScheduler 中的 OceanBase 数据源Apache DolphinScheduler 的数据源体系通过插件化设计支撑多种数据库MySQL、PostgreSQL、Oracle、OceanBase 等。每个数据源插件在 dolphinscheduler-datasource-plugin 目录下独立成模块OceanBase 对应 dolphinscheduler-datasource-oceanbase 模块。该模块通过AutoService机制注册到数据源 SPI从而在数据源中心中直接以OCEANBASE类型被识别和使用。从源码结构看OceanBase 数据源插件由四类组件构成参数模型OceanBaseDataSourceParamDTO前端表单提交的 DTO与 OceanBaseConnectionParam实际连接参数额外携带compatibleMode字段核心处理器OceanBaseDataSourceProcessor负责 JDBC URL 拼装、驱动类名、校验查询与 SQL 拆分连接通道OceanBaseDataSourceChannel 与 OceanBaseDataSourceChannelFactory提供连接池与即席连接客户端连接客户端OceanBasePooledDataSourceClient与OceanBaseAdHocDataSourceClient分别对应连接池场景与一次性查询场景。下文先给出页面操作的完整指引再深入源码说明关键机制。在数据源中心创建 OceanBase 数据源进入 DolphinScheduler 的数据源中心点击创建数据源在类型下拉框中选择OCEANBASE随后按如下字段填写字段必填说明数据源是选择OCEANBASE数据源名称是输入数据源的名称例如oceanbase_demo用于在任务中引用描述否输入数据源的描述便于团队识别用途IP 主机名是输入连接 OceanBase 的 IP 或主机名端口是输入连接 OceanBase 的端口默认2881OceanBase 的 MySQL 兼容端口用户名是设置连接 OceanBase 的用户名密码是设置连接 OceanBase 的密码数据库名是输入连接 OceanBase 的数据库名称兼容模式是输入连接 OceanBase 的兼容模式取值为mysql或oracleJdbc 连接参数否用于 OceanBase 连接的参数设置以 JSON 形式填写例如{useSSL: false}页面表单截图如下填写完成后可点击Test Connect测试连通性确认无误后点击Confirm保存。值得注意的细节在 use-form.ts 中前端会为OCEANBASE类型单独展示兼容模式输入框state.showCompatibleMode type OCEANBASE这是 OceanBase 数据源区别于其他数据库的独有字段同时该文件中将 OceanBase 的默认端口配置为2881use-form.ts。兼容模式Compatible Mode的含义与影响OceanBase 本身兼容 MySQL 与 Oracle 两种语法体系连接行为也随之不同。在 DolphinScheduler 中兼容模式字段直接影响两处底层逻辑实现位于 OceanBaseDataSourceProcessor连接校验语句validation query处理器根据兼容模式选择校验 SQL——mysql模式使用select 1oracle模式使用select 1 from dual常量定义于 DataSourceConstants.java。若未填写合法兼容模式会抛出UnsupportedOperationException(Invalid compatible mode: ...)从机制上保证了该字段的必填性。默认校验查询的获取由于校验语句依赖兼容模式处理器默认的getValidationQuery()直接抛出不支持异常必须走getValidationQuery(String compatibleMode)重载完成赋值。这一点从源码可以得到确认public String getValidationQuery(String compatibleMode) { if (compatibleMode ! null) { switch (compatibleMode.trim().toLowerCase()) { case mysql: return DataSourceConstants.MYSQL_VALIDATION_QUERY; // select 1 case oracle: return DataSourceConstants.ORACLE_VALIDATION_QUERY; // select 1 from dual } } throw new UnsupportedOperationException(Invalid compatible mode: compatibleMode); }提示若你仅使用 OceanBase 的 MySQL 兼容模式也可以直接把 OceanBase 当作 MySQL 数据源 来配置使用此时无需依赖本插件。Jdbc 连接参数JSON与安全默认值Jdbc 连接参数以 JSON 键值对形式填写最终会被拼接到 JDBC URL 的查询串中。以{useSSL: false}为例处理器会将其转换为useSSLfalse并追加到连接地址后。这里有一个重要的安全机制OceanBaseDataSourceProcessor在拼装 JDBC URL 时会强制追加四个默认参数allowLoadLocalInfilefalseautoDeserializefalseallowLocalInfilefalseallowUrlInLocalInfilefalse相关逻辑位于getJdbcUrl(ConnectionParam)与APPEND_PARAMS常量见 OceanBaseDataSourceProcessor.java。这四个参数分别用于禁止本地文件加载、禁止反序列化、禁止本地文件读入与禁止 URL 指向的本地文件读入属于针对 JDBC 客户端注入风险的安全加固项即使你在 JSON 参数中显式填写了这些键通过checkKeyIsLegitimate过滤见同文件 L158-L163也会被忽略防止用户覆盖安全默认值。最终的 JDBC URL 形态为jdbc:oceanbase://host:port/database?自定义参数allowLoadLocalInfilefalseautoDeserializefalseallowLocalInfilefalseallowUrlInLocalInfilefalse若你填写的自定义参数为空则直接形如jdbc:oceanbase://host:port/database?allowLoadLocalInfilefalseautoDeserializefalseallowLocalInfilefalseallowUrlInLocalInfilefalse原生支持说明需要引入 oceanbase-client 驱动OceanBase 数据源并非开箱即用的原生支持。从 3.3.0 版本开始DolphinScheduler 二进制发行包不再内置各数据源所需的 JDBC 驱动需要用户自行下载并放置对应的插件依赖包否则启动或连接时会报ClassNotFoundException。使用前需要先引入 OceanBase 的 JDBC 驱动oceanbase-clientcom.oceanbase:oceanbase-client并参考 伪集群部署 中的下载插件依赖章节激活该数据源插件。引入驱动后插件通过如下驱动类名建立连接常量定义于 DataSourceConstants.javacom.oceanbase.jdbc.Driver如何激活数据源插件以伪集群部署为例插件依赖的激活步骤如下详见 伪集群部署文档在 插件依赖下载地址该页面为 DolphinScheduler 各插件依赖包的 Maven 仓库索引下载dolphinscheduler-datasource-oceanbase对应的依赖包也可以执行项目自带的安装脚本位于 script/install-plugins.sh完成插件依赖安装bash ./bin/install-plugins.sh 3.3.0插件依赖并不需要全部安装可通过配置文件conf/plugins_config仓库中对应模板见 config/plugins_config按需指定插件列表例如仅保留 OceanBase 数据源插件--datasource-plugins-- dolphinscheduler-datasource-oceanbase --end--注意若启动服务时出现ClassNotFoundException请检查是否缺少对应插件依赖包——例如dolphinscheduler-datasource-oceanbase依赖的oceanbase-client驱动 jar 并不随二进制包分发。插件加载的源码佐证从源码可以进一步确认插件的激活机制OceanBaseDataSourceProcessor与OceanBaseDataSourceChannelFactory均通过AutoService注解注册到 SPI见 OceanBaseDataSourceProcessor.java 与 OceanBaseDataSourceChannelFactory.java工厂的getName()返回DbType.OCEANBASE.getName()与前端下拉选项OCEANBASE一一对应。插件 jar 通过 pom.xml 中的maven-shade-plugin打包为带datasource.oceanbase名称的独立产物放入lib/plugin/datasource目录后即被运行时扫描加载。底层连接原理从表单到 JDBC Connection 的完整链路理解表单字段如何变成真实连接有助于排查连通性故障。完整链路如下前端表单提交用户在数据源中心填写字段后前端组装OceanBaseDataSourceParamDTO含 host、port、userName、password、database、compatibleMode、other 等该 DTO 的类型固定为DbType.OCEANBASE见 OceanBaseDataSourceParamDTO.java。参数转换createConnectionParams(BaseDataSourceParamDTO)将 DTO 转换为连接参数——拼装地址jdbc:oceanbase://host:port与 JDBC URLjdbc:oceanbase://host:port/databaseJDBC_OCEANBASE常量定义于 DataSourceConstants.java密码通过PasswordUtils.encodePassword加密存储同时根据兼容模式设置校验语句与驱动类名。创建连接客户端OceanBaseDataSourceChannel根据场景创建连接——createPooledDataSourceClient返回连接池客户端供任务执行复用createAdHocDataSourceClient返回即席客户端供数据源中心测试连接等一次性场景使用。获取物理连接getConnection()使用JdbcDriverConnectionProvider加载com.oceanbase.jdbc.Driver拼接带安全参数的最终 URL解密密码后建立 JDBC 连接。同时该处还对用户名、密码中的autoDeserialize敏感参数做了过滤并输出告警日志见 OceanBaseDataSourceProcessor.java防止利用反序列化特性注入。SQL 拆分与执行执行 SQL 类任务时处理器通过 Druid 的SQLParserUtils按oceanbase方言移除注释并拆分多条 SQL见 splitAndRemoveComment保证脚本中的多条语句能够被依次执行。使用建议与注意事项兼容模式必须填写mysql或oracle二选一两者对应的连接校验语句不同非法值会导致创建数据源时校验失败。驱动必须自备确保oceanbase-client驱动 jar 已通过插件依赖机制放入对应目录否则测试连接或运行任务时会因找不到com.oceanbase.jdbc.Driver而失败。Jdbc 连接参数按需填写例如 SSL、字符集等参数可通过 JSON 传入但allowLoadLocalInfile、autoDeserialize、allowLocalInfile、allowUrlInLocalInfile四个安全敏感键会被强制锁定为false。MySQL 兼容模式的替代方案如果业务只使用 OceanBase 的 MySQL 模式可将 OceanBase 数据源按 MySQL 数据源 配置降低接入成本。端口约定前端默认端口为2881OceanBase MySQL 兼容端口Oracle 兼容租户的端口可能不同请按实际环境填写。【免费下载链接】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),仅供参考
