熟悉Trino 的同学应该都知道Trino新增、删除 catalog 都需要重启集群,这个生产环境里如果需要频繁增加数据源的场景是非常不友好的操作。
    网上关于动态加载Catalog的方案有一些,但是在Trino比较新的版本里面已经无法适用。 目前官方关于这个功能一直都没有完成,详细issue  Dynamic Catalogs #12709。 详细阅读了这个issue里面的讨论,有2个推送虽然没有被官方确认合并,但这2个推送给我了改造思路,目前推送的都是半成品,所以想要完整的实现还需要自己修改源代码实现一部分功能。
 
     相关推送:JDBC  RESTFUL API

改造思路:

    1.catalog 统一维护存储 如 Database、Zoopkeeper、中间件 等。
    2.增加Restful API 接口来统一管理 管理 catalog目录
    3.集群重启、node节点单独重启,能加载到最新catalog目录。

具体实现:

   1.选择数据库来实现,方便跟公司程序集成。      
   2.按照2个github的推送,实现Database 跟 Restful 接口开发。(这部分不赘述,照着推送的代码实现就行,重点是后面的修改思路)
   3.第1步完成后,会发现遇到的问题

①启动后只有Coordinator节点能够正常的加载catalog目录,node节点启动的时候无法加载catalog目录。

这部分是因为 官方的DynamicCatalogManagerModule 功能并不完整,只实现了Coordinator的部分的功能,下面的Worker的加载功能并没有实现,这部分需要新增Worker加载Catalog目录功能、以及实现CatalogManager接口。

                  ②Restful Api接口来新增catalog时候,Worker节点没有成功加载catalog
           这个是我实现过程中花了时间最长,但是又最不需要修改的地方。网上有方案修改 DiscoveryNodeManager在检测心跳的时候去新增这个Catalog,但是我测试了下在比较新的Trino版本并没有作用。
           另外的做定时刷新,这个可能是有用,但是并不符合我的想法,我想只有在新增的catalog时API接口触发下就行,而且立马就可以用,不需要等刷新时间。
                         
       实现方案:其实ServerMainModule里注入了RestfulAPI后,就相当于Coordinator 跟 Worker 都实现了这些API,并不是只有Coordinator才有这些功能,所以这一步只要通过/v1/node 获取到所有的node节点,
       通过对应的地址去注册Catalog就行,根本就不需要去做多余的额外实现。(为了这个不需要修改的功能搞了2个星期,最后发现不需要改也能实现,崩溃。。。。。)

实践效果:

1.获取node节点

2.新增catalog

Coordinator:

Worker:

不需要重启查询:

删除某个catalog:

到这里基本就完成了不重启自动加载Catalog目录的功能,但是仍然有一点小问题,经过测试同样名称的catalog新增后删除后,再新增仍然使用同样的名称跟连接器,会导致跟前面加载进去的同名连接器冲突,但是这个可以让程序上就源头上规避掉,使用过的catalog名称就不然再使用。在数据库里面把名称设为主键,删除catalog只修改状态不删除记录。

目前这个是我实现的方案,如果有更好的想法老铁欢迎留言一起交流,关于Coordinator同步了能自动同步到Worker节点的功能,网上关于这个修改的资料比较少。

Trino418版本动态加载catalog不需要重启集群修改思路及实现的更多相关文章

  1. Android中插件开发篇之----动态加载Activity(免安装运行程序)

    一.前言 又到周末了,时间过的很快,今天我们来看一下Android中插件开发篇的最后一篇文章的内容:动态加载Activity(免安装运行程序),在上一篇文章中说道了,如何动态加载资源(应用换肤原理解析 ...

  2. 插件化开发—动态加载技术加载已安装和未安装的apk

    首先引入一个概念,动态加载技术是什么?为什么要引入动态加载?它有什么好处呢?首先要明白这几个问题,我们先从 应用程序入手,大家都知道在Android App中,一个应用程序dex文件的方法数最大不能超 ...

  3. js动态加载activeX控件在IE11与低版本IE中的差异

    由于IE11更加遵循W3C规范,所以IE11与低版本IE在加载activeX时有差别. 1.IE11中动态加载activeX的顺序 var objectTag = document.createEle ...

  4. geotrellis使用(二十三)动态加载时间序列数据

    目录 前言 实现方法 总结 一.前言        今天要介绍的绝对是华丽的干货.比如我们从互联网上下载到了一系列(每天或者月平均等)的MODIS数据,我们怎么能够对比同一区域不同时间的数据情况,采用 ...

  5. Unity Lightmap动态加载研究

    什么情况下需要Lightmap? 移动平台上目前暂时还不能开实时光影效果,会卡成幻灯片.所以就需要将光影烘焙到贴图上. 什么情况下需要动态加载Lightmap? 1.当项目抛弃了Unity的多场景模式 ...

  6. 关于实现Extjs动态加载类的方式实现

    Extjs4以前的版本没有动态加载类的方式,这样开发程序的时候加载很多的js会导致加载变慢,由于本人一直使用extjs3的版本进行开发,于是简单实现了一个动态加载类的管理器,使用方式与extjs4的方 ...

  7. 会员管理系统的设计和开发(2)-- RDLC报表的设计及动态加载

    在上篇<会员管理系统的设计和开发(1)>介绍了关于会员系统的一些总体设计思路和要点,经过一段时间开发,软件终于完成并发布.在这期间,碰到了不少技术难点,并积累了不少开发心得和经验,本篇继续 ...

  8. js的动态加载、缓存、更新以及复用(四)

    本来想一气呵成,把加载的过程都写了,但是卡着呢,所以只好在分成两份了. 1.页面里使用<script>来加载 boot.js . 2.然后在boot.js里面动态加载 bootLoad.j ...

  9. Java_动态加载

    Java类动态加载(一)——java源文件动态编译为class文件最近在做java动态加载这方面的工作,起初也遇到了很多困难.网上关于这方便的东西很零散,为了便于日后回过头来再看,于是我将这几天的心得 ...

  10. APK动态加载框架(DL)解析

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/39937639 (来自singwhatiwanna的csdn博客) 前言 好久 ...

随机推荐

  1. 2021-05-18:Nim博弈。给定一个正数数组arr,先手和后手每次可以选择在一个位置拿走若干值, 值要大于0,但是要小于该处的剩余。谁最先拿空arr,谁赢。根据arr,返回谁赢 。

    2021-05-18:Nim博弈.给定一个正数数组arr,先手和后手每次可以选择在一个位置拿走若干值, 值要大于0,但是要小于该处的剩余.谁最先拿空arr,谁赢.根据arr,返回谁赢 . 福大大 答案 ...

  2. vue全家桶进阶之路37:Vue3 路由守卫

    在 Vue.js 3.x 中,我们可以使用路由守卫来拦截路由的跳转,从而实现一些功能,例如:登录验证.页面权限控制等. Vue.js 3.x 中的路由守卫和 Vue.js 2.x 中的基本相同,都包含 ...

  3. vue全家桶进阶之路19:webpack资源打包工具

    Vue.js 是一个前端开发框架,它可以帮助我们快速构建单页应用和复杂的交互界面.而 Webpack 则是一个前端资源打包工具,它可以将多个 JavaScript.CSS.HTML.图片等资源打包成一 ...

  4. 2015年蓝桥杯C/C++大学B组省赛真题(加法变乘法)

    题目描述: 我们都知道:1+2+3+ ... + 49 = 1225 现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015 比如: 1+2+3+...+10*11+12+...+27*28+2 ...

  5. 用token辅助 密码爆破

    第一步:打开皮卡丘,点击暴力破解,token防爆破,输入正确用户名,错误密码 BP拦截请求,点击皮卡丘Login,然后拦截后, 发送给Intruder 第二步: 爆破方式选择音叉方式,   & ...

  6. rest framework 学习 序列化

    序列化功能:对请求数据进行验证和对Queryset进行序列化     Queryset进行序列化:         1  序列化之Serializer 1 class UserInfoSerializ ...

  7. flutter 的 in_app_web_view实现下载功能

    flutter与前端交互,利用in_app_web_view实现下载功能: 首先下载库,终端输入 flutter pub add flutter_inappwebview 之后导出 import 'p ...

  8. OpenSSL 是什么?

    OpenSSL 是什么? OpenSSL 是开源的程序套件,该套件由三部分组成: libcrypto:具有通用功能的加密库,里面包含众多加密算法 libssl:实现 SSL/TLS 功能 openss ...

  9. docker-compose部署django+nginx+minio

    总体文件结构 docker-compose.yml文件 version: "3" # volumes: # 自定义数据卷 networks: # 自定义网络(默认桥接) web_n ...

  10. spark连接mysql数据库

    1.安装启动检查Mysql服务.netstat -tunlp (3306) 2.spark 连接mysql驱动程序. –cp /usr/local/hive/lib/mysql-connector-j ...