暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

无需重启,实现动态加载Oracle驱动至Dolphinscheduler

海豚调度 2024-05-28
1262

点击蓝字

关注我们

转载自刘茫茫看山


问题背景


某天我们的租户反馈数据库连接缺少必要的驱动,我们通过日志查看确实是缺少部分数据库的驱动,因为DolphinScheduler默认只带了Oracle和MySQL的驱动,并且需要将pom文件中的test模式去掉才可以在打包的时候引入。我们的任务量比较大,在3.0存在容错机制的情况下,重启Master和Worker时,任务会重复容错多次,对用户使用很不友好,对Yarn集群的压力也比较大,所以非必要不会重启服务,这就需要在不重启的前提下加载新的驱动包。

遇到的问题


当开始做的时候,想的过于简单,下面是Worker模块下的启动命令,libs目录后面加载的是*,所以我们认为程序肯定会自动加载jar。

但是当我们将jar放到对应的目录后,重启测试数据库连接,发现还是报了和之前一样的问题。
Could not load driverClass oracle.jdbc.driver.OracleDriver

我们需要了解java.class.path为什么没有将我们新添加的驱动包加载进去,于是我们找出了worker服务的进程id,并通过jinfo命令查看类路径的加载情况,发现java.calss.path
对应的目录从*变成了jar包的绝对路径,我们新添加的jar的绝对路径没有在里面,所以不会读取驱动。


解决方法


我们最熟悉的类加载模式就是双亲委派机制,在类加载模式中存在一个ExtensioinClassloader
类,它是java.lang.ClassLoader
的子类,该类加载器负责加载Java的扩展库JAVA_HOME/jre/lib/ext/*.jar
或者java.ext.dirs
路径下的内容。

我们通过jinfo命令查看进程中的扩展目录,发现java.ext.dirs
对应的值不是绝对路径,也就表示我们可以尝试通过将额外的驱动jar包放到扩展目录中加载。

这里以Oracle驱动为例,通过将Oracle驱动jar放到对应的扩展目录中,测试数据源连接情况,连接成功,希望可以给有需要的小伙伴提供有价值的参考。

< 🐬🐬 >
精彩推荐

用户实践案例
奇富科技  蜀海供应链 联通数科 拈花云科
蔚来汽车 长城汽车 集度 长安汽车
思科网讯 生鲜电商 联通医疗 联想
新网银行 消费金融  腾讯音乐 自如
有赞 伊利 当贝大数据
联想 传智教育 Bigo
通信行业  作业帮


迁移实践
Azkaban   Ooize   
Airflow (有赞案例) Air2phin(迁移工具)
Airflow迁移实践
Apache DolphinScheduler 3.0.0 升级到 3.1.8 教程


新手入门
选择Apache DolphinScheduler的10个理由
Apache DolphinScheduler 3.1.8 保姆级教程【安装、介绍、项目运用、邮箱预警设置】轻松拿捏!
Apache DolphinScheduler 如何实现自动化打包+单机/集群部署?
Apache DolphinScheduler-3.1.3 版本安装部署详细教程
Apache DolphinScheduler 在大数据环境中的应用与调优
< 🐬🐬 >
参与社区
参与Apache DolphinScheduler 社区有非常多的参与贡献的方式,包括:


贡献第一个PR(文档、代码) 我们也希望是简单的,第一个PR用于熟悉提交的流程和社区协作以及感受社区的友好度。

社区汇总了以下适合新手的问题列表:https://github.com/apache/dolphinscheduler/issues/5689

非新手问题列表:https://github.com/apache/dolphinscheduler/issues?
q=is%3Aopen+is%3Aissue+label%3A%22volunteer+wanted%22

参与社区贡献:https://dolphinscheduler.apache.org/zh-cn/community

来吧,DolphinScheduler开源社区需要您的参与,为中国开源崛起添砖加瓦吧,哪怕只是小小的一块瓦,汇聚起来的力量也是巨大的!


我知道你在看

文章转载自海豚调度,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论