Apache DolphinScheduler 支持使用 OceanBase 作为元数据库啦!
DolphinScheduler是一个开源的分布式任务调度系统,拥有分布式架构、多任务类型、可视化操作、分布式调度和高可用等特性,适用于大规模分布式任务调度的场景。目前DolphinScheduler支持的元数据库有Mysql、PostgreSQL、H2,如果在业务中需要更好的性能和扩展性,可以在DolphinScheduler中使用OceanBase数据库作为元数据库进行替换。节点数量和规模可以自由调整,实现无缝扩展和缩减。
一. OceanBase数据库
OceanBase数据库是阿里巴巴自主研发的分布式关系型数据库,具有以下特点:
-
分布式架构:OceanBase采用分布式架构,可水平扩展,支持PB级别的数据存储和处理。
-
高可用性:OceanBase采用分布式副本机制,实现数据的冗余备份,保证在节点故障时仍能提供可用的服务。
-
高性能:OceanBase采用多维度优化技术,包括数据存储、查询优化、分布式事务等方面,可大幅提升数据库的性能。
-
强一致性:OceanBase采用基于Paxos协议的多副本一致性算法,实现强一致性的分布式事务处理。
-
兼容SQL:OceanBase支持标准的SQL语言,包括DDL、DML和DQL等命令。
-
可扩展性:OceanBase支持在线扩容和缩容,可根据业务需求自由调整节点数量和规模。
-
安全性:OceanBase采用多层安全策略,包括密码加密、数据加密、访问控制等,保障数据库的安全性。
总之,OceanBase数据库具有高可用、高性能、强一致性等特性,适用于大规模、高并发的业务场景。
二. DolphinScheduler支持OceanBase数据源
在DolphinScheduler中使用OceanBase做数据源在调度业务上的优势:
-
高性能:OceanBase可以处理大规模数据,而且在数据存储和处理方面都采用了多维度优化技术,所以相对于其他数据库,其有更高的性能表现,可以快速地处理数据。
-
高可靠性:OceanBase是一个分布式数据库,通过多节点的数据冗余备份,当某个节点发生故障时能够自动切换,保证服务的高可靠性。
-
事务处理:如果业务需要原子性的操作,OceanBase可以提供强一致性的分布式事务处理,从而保证数据不会出现不一致的情况。
-
分布式调度:DolphinScheduler自身是分布式任务调度系统,和OceanBase分布式架构相互匹配,可以充分利用Oceanbase的分布式特性,提供更高效率的调度服务。
-
可扩展性:DolphinScheduler和OceanBase都支持在线扩容和缩容,可以根据业务需求自由调整节点数量和规模,实现无缝扩展和缩减。
使用OceanBase作为数据源可以带来高性能、高可靠性、高安全性和强大的扩展性,和DolphinScheduler结合使用,将会为调度业务的稳定性、可靠性、可扩展性带来更优秀的表现。
三. OceanBase具体兼容Mysql的哪些特性
-
数据类型:OceanBase支持MySQL的常见数据类型,如整数、浮点数、日期和时间、字符串等。
-
SQL语法:OceanBase支持MySQL的常见SQL语句,如SELECT、INSERT、UPDATE、DELETE等命令。
-
存储引擎:OceanBase支持InnoDB存储引擎,从而可以兼容MySQL的事务和锁定特性。
-
存储过程:OceanBase支持MySQL的存储过程特性,包括存储过程、存储函数和存储触发器等。
-
工具和驱动:OceanBase支持MySQL的常见工具和驱动,如MySQL Workbench、Navicat和JDBC等。
四. DolphinScheduler更换为OceanBase元数据库的步骤
- 创建OceanBase数据源,包括主机地址、端口号、用户名、密码等信息;
阿里公有云:在阿里云官网申请公有云的OceanBase实例,申请成功后可在控制台-云数据库OceanBase版-实例列表页面看到状态为运行中的实例:
进入实例可以看到数据库实例和下方的代理私网、公网地址;右上角可以新建数据库和新建账号,非超级账号需要在账号管理页面修改权限才可访问数据库,此账号和密码会作为服务内连接OceanBase数据库的数据库账号密码:
创建成功后在面板登陆数据库或使用其他数据源连接工具或使用命令行登陆数据库并执行SQL验证是否可用:
- 进入OceanBase后创建DolphinScheduler数据库,执行表初始化SQL文件:
dolphinscheduler/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_mysql.sql;
- 修改DolphinScheduler的配置文件,将原有的MySQL数据源替换成新的OceanBase数据源;
本地启动Api服务:修改dolphinscheduler-api
模块配置文件中的数据库地址
本地启动Standalone服务:修改dolphinscheduler-standalone-server
模块配置文件中的数据库地址
同上
服务器部署:修改 /apache-dolphinscheduler-3.1.2-bin/bin/env/dolphinscheduler_env.sh
中的数据库地址
- 启动DolphinScheduler,正常访问登陆并其他模块都可正常操作即可验证OceanBase元数据库连接成功且正常使用:
五. 切换过程中需要注意哪些事项
1.外键约束
在使用DolphinSchedulerSQL文件dolphinscheduler_mysql.sql
初始化数据库时,SQL的开始会设置 SET FOREIGN_KEY_CHECKS=0
不检查外键约束,需要注意的是OceanBase社区版4.0之前是不支持DDL语句的外键约束的。例官方版本V3.1.1,
所以在这里我们要注意下OceanBase的版本兼容性。
2. 数据迁移后插入报错
报错信息如下:
报错信息
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0 at com.mysql.cj.protocol.a.NativePacketPayload.readInteger(NativePacketPayload.java:398) at com.mysql.cj.protocol.a.NativePacketPayload.readString(NativePacketPayload.java:605) at com.mysql.cj.protocol.a.NativeServerSessionStateController$NativeServerSessionStateChanges.init(NativeServerSessionStateController.java:112) at com.mysql.cj.protocol.a.result.OkPacket.parse(OkPacket.java:66) at com.mysql.cj.protocol.a.NativeProtocol.readServerStatusForResultSets(NativeProtocol.java:1691) at com.mysql.cj.protocol.a.TextResultsetReader.read(TextResultsetReader.java:116) at com.mysql.cj.protocol.a.TextResultsetReader.read(TextResultsetReader.java:48) at com.mysql.cj.protocol.a.NativeProtocol.read(NativeProtocol.java:1600) at com.mysql.cj.protocol.a.NativeProtocol.readAllResults(NativeProtocol.java:1654) at com.mysql.cj.protocol.a.NativeProtocol.sendQueryPacket(NativeProtocol.java:1000) at com.mysql.cj.NativeSession.execSQL(NativeSession.java:666) at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:930) ... 157 common frames omitted
这种情况在切换为OceanBase数据库之后在数据插入时可能会发生。初始化数据时部分数据会带着ID将数据插入表中,之后再次插入数据此时默认主键自增从0开始,这时会出现默认自增步长从10001开始的情况如下:
六. 总结
DolphinScheduler本身是一个非常强大的分布式调度系统,它可以帮助您轻松管理和调度大规模的数据任务。而当它与OceanBase结合使用时,它可以为您提供更具弹性、更安全、更可靠的数据存储方式。这种组合可以帮助您更好地解决大规模数据任务管理和调度的问题,同时提高您的工作效率和任务应用的可靠性。因此,如果您正在使用DolphinScheduler来管理和调度数据任务,强烈建议您尝试使用OceanBase作为其元数据库,让您的任务应用变得更加高效和可靠。
本文由 白鲸开源科技 提供发布支持!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
LLM 回答更加准确的秘密:为检索增强生成(RAG)添加引用源
如何让你的大模型变得更强?如何确定其获取信息来源的准确性? 想要回答这两个问题,就不得不提到今天文章的主角——RAG。RAG,也就是检索增强生成(Retrieval-augmented generation) ,可以弥补现有 LLM 应用能力的技术。 当前,LLM 的最大问题就是缺乏最新的知识和特定领域的知识。对于这一问题,业界有两种主要解决方法:微调和检索增强生成。业内许多公司(如 Zilliz、OpenAI 等)都认为相比微调,RAG 是更好的解决方法。归根究底是因为微调的成本更高,需要使用的数据也更多,因此主要适用于风格迁移(style transfer)的场景。相比之下,RAG 方法使用例如 Milvus 之类的向量数据库,从而将知识和数据注入到应用中,更适用于通用场景。 采用 RAG 方法就意味着使用向量数据库存储真理数据,这样可以确保应用返回正确的信息和知识,而不是在缺乏数据时产生幻觉,捏造回答。不过,随着越来越多的文档、用例等信息被注入应用中,越来越多开发者意识到信息来源的重要性,它可以确保信息准确性,使得大模型的回答更加真实。 这就需要用到引用或者归属(attribut...
- 下一篇
GaussDB数据库SQL系列-表连接(JOIN)
目录 一、前言 二、GaussDB JOIN 1、LEFT JOIN 2、LEFT JOIN EXCLUDING INNER JOIN 3、RIGHT JOIN 4、LEFT JOIN EXCLUDING INNER JOIN 5、INNER JOIN 6、FULL OUTER JOIN 7、FULL OUTER JOIN EXCLUDING INNER JOIN 三、GaussDB 实验示例 1、初始化实验表 2、LEFT JOIN(示例) 3、RIGTH JOIN(示例) 4、INNER JOIN(示例) 5、FULL JOIN(示例) 四、小结 一、前言 SQL是用于数据分析和数据处理的最重要的编程语言之一,表连接(JOIN)是数据库中SQL的一种常见操作,在实际应用中,我们需要根据业务需求从两个或多个相关的表中获取信息。 二、GaussDB JOIN GaussDB是华为推出的企业级分布式关系型数据库。GaussDB JOIN 子句是基于两个或者多个表之间的共同字段把它们进行结合。在GaussDB数据库中,常用的JOIN有如下几种连接及用法:INNER JOIN、LEFT JO...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Mario游戏-低调大师作品
- CentOS7安装Docker,走上虚拟化容器引擎之路