发明内容
有鉴于此,为了克服现有技术的不足,本发明旨在提供一种基于MQ的presto数据源热加载方法。
本发明提供一种基于MQ的presto数据源热加载方法,包括:
步骤S1:构造redis客户端,通过redis队列初始化presto服务;
步骤S2:通过监听redis队列,从redis客户端中获取数据源配置信息,根据获取的数据源配置信息识别对应的操作类型;
步骤S3:根据识别的操作类型调用ConnectorManager类文件的对应方法对所述数据源进行操作;
步骤S4:部署presto服务,对经过操作的数据源进行验证。
作为本发明的优选,本发明基于MQ的presto数据源热加载方法的步骤S1包括:
步骤S11:在presto服务内部创建配置文件,在创建的配置文件中写入redis配置信息,在presto-main模块中,添加redis客户端的maven依赖,编写redis客户端类,读取写入配置文件的redis配置信息,构造redis客户端;
步骤S12:创建redis队列,通过创建的redis队列将业务系统中全量的数据源配置信息存储在redis客户端中,将业务系统中变更的数据源名称发送至presto服务,并将变更后的数据源连接信息更新至redis客户端中;
步骤S13:在presto服务中创建catalogMap,存储当前presto服务已经加载的数据源,初始化presto服务,从redis客户端中获取全量的数据源配置信息,对获取的全量的数据源配置信息进行序列化;
步骤S14:根据序列化的数据源配置信息依次遍历读取每个数据源,将读取的数据源加载到presto-server中,同时存储在创建的catalogMap中。
作为本发明的优选,本发明基于MQ的presto数据源热加载方法的步骤S11中,在presto服务内部创建配置文件,在创建的配置文件中写入redis配置信息,包括:在presto内部etc/目录下创建source.properties文件,在创建的source.properties文件中以key-value的方式写入redis的配置信息。
作为本发明的优选,本发明基于MQ的presto数据源热加载方法的步骤S3包括:根据识别的操作类型组建数据源的属性对象,调用ConnectorManager类文件的对应方法对所述数据源进行操作。
作为本发明的优选,本发明基于MQ的presto数据源热加载方法的步骤S3包括:当识别的操作类型是新增,根据数据源配置信息中的连接信息、数据源名称、数据源类型信息,调用ConnectorFactory类文件创建connector对象,根据创建的connector对象生成Catalog对象,通过CatalogManager类文件将生成的Catalog对象注册到CatalogManager管理器完成数据源的添加,通过Announcer类文件公告全局,更新connector id集合。
作为本发明的优选,本发明基于MQ的presto数据源热加载方法的步骤S3包括:当识别的操作类型是删除,通过CatalogManager管理器对已经注册的catalogName数据源名称进行移除,根据connector id移除元数据、权限控制数据、索引数据、schema模式配置、table表配置、column列配置,通过Announcer类文件公告全局,更新connector id集合。
作为本发明的优选,本发明基于MQ的presto数据源热加载方法的步骤S3包括:当识别的操作类型是修改,先对所述数据源进行删除操作,再根据修改要求新增数据源。
作为本发明的优选,本发明基于MQ的presto数据源热加载方法的步骤S3包括:
步骤S31:编译presto-main.jar文件,在部署presto服务时采用编译的presto-main.jar文件替换对应目录下的jar文件;
步骤S32:启动presto-server服务,通过redis队列发送数据源的变更信息,在不重启的方式下使用presto-cli客户端或者presto-jdbc连接所述presto-server服务;
步骤S33:通过执行SQL语句验证经过操作的数据源是否已经动态更新。
其次,本发明提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被执行时,执行上述基于MQ的presto数据源热加载方法。
最后,本发明提供一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现上述基于MQ的presto数据源热加载方法的步骤。
本发明基于MQ的presto数据源热加载方法,具有以下有益效果:
1.实现presto服务中数据源包括增、删、改的更新,并实现更新的实时生效,同步更新到各节点,提高presto的延展性、灵活性,降低延迟时间。
2.无需手动创建catalog配置文件,显著提升数据源更新过程和系统的稳定性。
3.无需重启presto服务,可以提高开发调试效率,节省运维成本。
4.当presto服务异常宕机或升级部署,presto服务启动之后,数据不会丢失,可恢复宕机前的所有数据源,节省运维成本,提高了工作效率。
具体实施方式
下面结合附图对本发明实施例进行详细描述。
需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合;并且,基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本公开,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。
以下实施例中涉及的名词解释如下:
MQ:Message Queue的简写,消息队列,用于消息通知和动态监听。
presto:Facebook开源的分布式SQL查询引擎,用于交互式分析查询,跨库查询。
redis:基于内存的非关系型K-V数据库,主要用作数据库、缓存、消息中间件。
ConnectorManager类文件:连接器管理类+用于管理数据源的元数据、分区、索引、配置信息等。
presto-main模块:presto的启动模块,用于服务端主程序入口和程序初始化。
maven依赖:项目管理工具,是管理项目的对象模型。
presto-server:presto服务体,用于执行跨库查询、分析查询的服务体。
catalogMap:数据源集合,同于缓存当前的所有数据源的集合。
source.properties文件:MQ等配置文件,用于存储配置的文件,启动时会被读取。
ConnectorFactory类文件:连接器工厂类文件,用于管理所有数据源连接器的工厂类。
connector对象:连接器对象,一个catalog对应一个连接器对象。
Catalog对象:数据源,一个数据源就是一个Catalog对象。
CatalogManager类文件:数据源定义类文件,对数据源执行增删改的管理类。
Announcer类文件:通知类,用于数据源发现,触发数据源更新。
presto-cli客户端:presto客户端,用于连接presto服务,提交任务。
presto-jdbc:presto的连接url,用于通过JDBC的方式连接presto服务,提交任务。
图1为根据本发明示例性第一实施例的一种基于MQ的presto数据源热加载方法的流程图。如图1所示,本实施例的方法按以下方式实施:
步骤S1:构造redis客户端,通过redis队列初始化presto服务;
步骤S2:通过监听redis队列,从redis客户端中获取数据源配置信息,根据获取的数据源配置信息识别对应的操作类型;
步骤S3:根据识别的操作类型调用ConnectorManager类文件的对应方法对所述数据源进行操作;
步骤S4:部署presto服务,对经过操作的数据源进行验证。
本实施例方法可以实现presto服务中数据源包括增、删、改的更新,并实现更新的实时生效,同步更新到各节点,提高presto的延展性、灵活性,降低延迟时间。无需手动创建catalog配置文件,显著提升数据源更新过程和系统的稳定性。
图2为根据本发明示例性第二实施例的一种基于MQ的presto数据源热加载方法的流程图,本实施例是图1所示方法的优选实施例,如图2所示,本实施例方法的步骤S1按以下方式实施:
步骤S11:在presto服务内部创建配置文件,在创建的配置文件中写入redis配置信息,在presto-main模块中,添加redis客户端的maven依赖,编写redis客户端类,读取写入配置文件的redis配置信息,构造redis客户端;
步骤S12:创建redis队列,通过创建的redis队列将业务系统中全量的数据源配置信息存储在redis客户端中,将业务系统中变更的数据源名称发送至presto服务,并将变更后的数据源连接信息更新至redis客户端中;
步骤S13:在presto服务中创建catalogMap,存储当前presto服务已经加载的数据源,初始化presto服务,从redis客户端中获取全量的数据源配置信息,对获取的全量的数据源配置信息进行序列化;
步骤S14:根据序列化的数据源配置信息依次遍历读取每个数据源,将读取的数据源加载到presto-server中,同时存储在创建的catalogMap中。
在实际应用中,本实施例方法的步骤S11中,在presto服务内部创建配置文件,在创建的配置文件中写入redis配置信息,按以下方式实现:在presto内部etc/目录下创建source.properties文件,在创建的source.properties文件中以key-value的方式写入redis的配置信息。
本发明示例性第三实施例提供一种基于MQ的presto数据源热加载方法,本实施例是图1所示方法的优选实施例,本实施例方法的步骤S3包括:根据识别的操作类型组建数据源的属性对象,调用ConnectorManager类文件的对应方法对所述数据源进行操作。
在实际应用中,本实施例方法的步骤S3按以下方式实施:
当识别的操作类型是新增,根据数据源配置信息中的连接信息、数据源名称、数据源类型信息,调用ConnectorFactory类文件创建connector对象,根据创建的connector对象生成Catalog对象,通过CatalogManager类文件将生成的Catalog对象注册到CatalogManager管理器完成数据源的添加,通过Announcer类文件公告全局,更新connector id集合。
当识别的操作类型是删除,通过CatalogManager管理器对已经注册的catalogName数据源名称进行移除,根据connector id移除元数据、权限控制数据、索引数据、schema模式配置、table表配置、column列配置,通过Announcer类文件公告全局,更新connector id集合。
当识别的操作类型是修改,先对所述数据源进行删除操作,再根据修改要求新增数据源。
图3为根据本发明示例性第四实施例提供的一种基于MQ的presto数据源热加载方法的流程图,如图3所示,本实施例方法的步骤S3按以下方式实施:
步骤S31:编译presto-main.jar文件,在部署presto服务时采用编译的presto-main.jar文件替换对应目录下的jar文件;
步骤S32:启动presto-server服务,通过redis队列发送数据源的变更信息,在不重启的方式下使用presto-cli客户端或者presto-jdbc连接所述presto-server服务;
步骤S33:通过执行SQL语句验证经过操作的数据源是否已经动态更新。
本实施例方法无需重启presto服务,可以提高开发调试效率,节省运维成本。当presto服务异常宕机或升级部署,presto服务启动之后,数据不会丢失,可恢复宕机前的所有数据源,节省运维成本,提高了工作效率。
本发明提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被执行时,执行本发明上述的基于MQ的presto数据源热加载方法。
如图4所示,本发明还提供了一种设备,包括处理器110、通信接口120、用于存储处理器可执行计算机程序的存储器130及通信总线140。其中,处理器110、通信接口120及存储器130通过通信总线140完成相互间的通信。处理器110通过运行可执行计算机程序以实现上述的基于MQ的presto数据源热加载方法。
其中,存储器130中的计算机程序可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的系统实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以基于实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。