一种基于HQL的跨集群数据处理系统及方法与流程

文档序号:27203108发布日期:2021-11-03 13:55阅读:125来源:国知局
一种基于hql的跨集群数据处理系统及方法
技术领域
:1.本发明涉及大数据处理
技术领域
:,具体涉及一种基于hql的跨集群数据处理系统及方法。
背景技术
::2.hive是基于hadoop(由apache基金会所开发的分布式系统基础架构)开发的一个数据仓库工具,可以简单地将一个结构化的数据映射成为数据库中的一张表,同时还定义了简单的sql(结构化查询语言)查询语言,称之为hql,hive执行引擎将简单的hql语句转化为mapreduce(一种分布式计算系统)任务用于分布式大数据的分析和挖掘,map‑reduce系统中包含有map(映射)单元和reduce(归约)单元,map单元用于进行数据映射,实现分拣和分堆,reduce单元进行数据合并。hql的出现极大地降低了数仓分析人员的学习成本,对数据分析发挥着重要的作用。3.然而随着业务的发展,往往数据分布在不同的集群上,由于hql只能在单集群下的数据分析,在这种跨集群的场景下,hql将不能发挥优势,现有的技术方案就是由集群运维人员将数据同步到同一集群,并将数据映射成一张hive表,这样不仅费事费力,不利于数仓分析人员对数据的快速分析,同时也增加了对数据的维护成本。技术实现要素:4.本发明目的在于提供一种基于hql的跨集群数据处理系统及方法,解决跨集群hql的数据计算、处理;本发明通过该系统,数仓分析人员将较好地利用hql便利性来实现多个集群的数据分析,同时也减少了运维人员对数据的维护成本。5.本发明通过下述技术方案实现:6.第一方面,本发明提供了一种基于hql的跨集群数据处理系统,该系统包括客户端、计算引擎管理模块、集群管理模块、跨集群表管理模块;7.所述客户端,用于将待查询的hql语句发送到计算引擎管理模块,同时接收所述计算引擎管理模块查询的结果数据;8.所述计算引擎管理模块,用于使用hive引擎解析客户端发送过来的hql语句,分析出hql中的所用到的表、以及表所属的集群(可能是本集群,也可能是非本集群),实现本集群或跨集群计算;同时该模块支持跨集群hql的语法检查;9.所述集群管理模块,用于实时地获取所有集群的计算资源和存储资源,并计算出当前最空闲的集群,供所述计算引擎管理模块获取得到最空闲的集群来执行hql语句;10.所述跨集群表管理模块,用于管理和维护这些跨集群同步过来的表,即管理由非本集群同步到本集群的表;该模块默认是开启自动清除同步过来的表,如果关闭,将通过该模块实现手动删除。11.进一步地,考虑到本系统的设计目标为满足多集群的hql计算,需要对集群的一些配置属性信息需要维护管理,即所述集群管理模块还用于对集群的配置属性信息进行维护管理。所述集群的配置属性信息包括集群名称(hql语句中的表名称会使用该属性)、集群yarn地址信息、集群hivethriftservcer地址信息和集群hdfs的地址信息;获取这些信息主要目的是选择一个最空闲的集群,将最终由计算引擎管理模块解析后的hql语句,提交到该集群,以提升集群的利用率和任务的运算效率。其中:12.(1)集群名称:hql中的表名称会使用,表名称的约定的规则为:[集群名称.数据库名称.表名称];[0013](2)集群yarn地址信息:周期性的通过yarn地址获取该集群的资源(cpu核数、内存)信息;[0014](3)集群hdfs的地址信息:周期性的获取集群中hdfs的存储容量信息;[0015](4)集群hivethriftservcer地址信息:是最终通过解析生产的hql,将其提交给hivethriftservcer。至于选择哪一个hivethrfitserve,将依据(2)、(3)中获取的资源信息,选择剩余资源多的集群。[0016]进一步地,所述计算引擎管理模块的执行过程具体包括:[0017]使用hive引擎解析客户端发送过来的hql语句,解析该hql语句的类型,hql语句的类型包括dml类型、ddl类型;其中,dml(datamanipulationlanguage)数据操纵语言,对数据库中的数据进行一些简单操作,如insert、delete、update、select等;ddl(datadefinitionlanguage)数据定义语言,对数据库中的某些对象(例如database、table)进行管理,如create、alter和drop。[0018]如果解析出的hql语句为ddl类型,那么继续解析该hql语句所操作的对应集群,同时把hql语句发送到对应的本集群去执行;[0019]如果解析出的hql语句为dml类型,那么继续解析该hql语句为select语句还是非select语句;[0020]若解析出来为select语句,则继续解析该hql所涉及的表以及表所对应的集群,同时调用所述集群管理模块,查询出当前资源比较空闲的集群,同时把hql语句发送到该集群执行;此处当前资源比较空闲的集群可以是本集群,也可以是非本集群(即跨集群);[0021]若解析出来为非select语句,则继续解析要插入或者删除或更新表所在的集群,同时解析该hql语句所涉及到的其他表以及表所属的集群;如果该hql语句所涉及到的其他表以及表所属的集群,与要插入或者删除或更新表所在的集群均在本集群,那么在本集群执行,并把执行结果数据返回给客户端;如果该hql语句所涉及到的其他表以及表所属的集群,与要插入或者删除或更新表所在的集群不在同一集群,那么采用跨集群同步方法进行处理,并把执行结果数据返回给客户端。[0022]具体地,如果该hql语句所涉及到的其他表以及表所属的集群,与要插入或者删除或更新表所在的集群不在同一集群,那么采用跨集群同步方法进行处理,并把执行结果数据返回给客户端;具体包括:[0023]要插入或者删除或更新表所在的集群记作clustera,该hql语句所涉及到的其他表以及表所属的集群记作clusterb、其他表记作clusterb.d.t;[0024]获取表clusterb.d.t的建表语句和所在的hdfs路径,记作路径为path001,同时在集群clustera中创建与表clusterb.d.t对应的hiv表clustera.d.t,为防止表名重复,在clustera.d.t后可加上时间戳后缀;在集群clustera中使用discp命令从集群clusterb中复制path001到tmp/path001目录,使用load命令将集群clusera中/tmp/path001的数据加载到新建的hive表clustera.d.t中;并在集群clustera中执行该非select语句,并将执行的结果发送到客户端,同时删除集群clustera中的hiv表clustera.d.t。[0025]进一步地,所述计算引擎管理模块在执行使用hive引擎解析客户端发送过来的hql语句,解析出该hql语句的类型之前还执行如下:[0026]使用antlr4技术框架分析客户端发送过来的hql语句的语法是否正确,若hql语句的语法正确,则执行解析该hql语句的类型;若hql语句的语法错误,则将错误信息返回给客户端。[0027]第二方面,本发明还提供了一种基于hql的跨集群数据处理方法,该方法应用于所述的一种基于hql的跨集群数据处理系统,该方法包括:[0028]s1:使用hive引擎解析客户端发送过来的待查询hql语句的类型,hql语句的类型包括dml类型、ddl类型;[0029]s2:如果解析出的hql语句为ddl类型,那么继续解析该hql语句所操作的对应集群,同时把hql语句发送到对应的本集群去执行;[0030]s3:如果解析出的hql语句为dml类型,那么继续解析该hql语句为select语句还是非select语句;[0031]s4:若解析出来为select语句,则继续解析该hql所涉及的表以及表所对应的集群,同时调用所述集群管理模块,查询出当前资源比较空闲的集群,同时把hql语句发送到该集群执行;所述当前资源比较空闲的集群包括本集群或者非本集群;[0032]s5:若解析出来为非select语句,则继续解析要插入或者删除或更新表所在的集群,同时解析该hql语句所涉及到的其他表以及表所属的集群;如果该hql语句所涉及到的其他表以及表所属的集群,与要插入或者删除或更新表所在的集群均在本集群,那么在本集群执行,并把执行结果数据返回给客户端;如果该hql语句所涉及到的其他表以及表所属的集群,与要插入或者删除或更新表所在的集群不在同一集群,那么采用跨集群同步方法进行处理,并把执行结果数据返回给客户端。[0033]进一步地,步骤s5中如果该hql语句所涉及到的其他表以及表所属的集群,与要插入或者删除或更新表所在的集群不在同一集群,那么采用跨集群同步方法进行处理,并把执行结果数据返回给客户端;具体包括:[0034]要插入或者删除或更新表所在的集群记作clustera,该hql语句所涉及到的其他表以及表所属的集群记作clusterb、其他表记作clusterb.d.t;[0035]获取表clusterb.d.t的建表语句和所在的hdfs路径,记作路径为path001,同时在集群clustera中创建与表clusterb.d.t对应的hiv表clustera.d.t,为防止表名重复,在clustera.d.t后可加上时间戳后缀;在集群clustera中使用discp命令从集群clusterb中复制path001到tmp/path001目录,使用load命令将集群clusera中/tmp/path001的数据加载到新建的hive表clustera.d.t中;并在集群clustera中执行该非select语句,并将执行的结果发送到客户端,同时删除集群clustera中的hiv表clustera.d.t。[0036]进一步地,步骤s1之前还包括:[0037]s0:使用antlr4技术框架分析客户端发送过来的hql语句的语法是否正确,若hql语句的语法正确,则执行解析该hql语句的类型;若hql语句的语法错误,则将错误信息返回给客户端。[0038]本发明与现有技术相比,具有如下的优点和有益效果:[0039]1、本发明一种基于hql的跨集群数据处理系统及方法,仅通过配置简单的hql语法规则,分析出待查询hql语句中的所用到的表以及表所属那个集群,内部系统通过集群之间的数据同步技术,使业务分析人员无感知的情况下实现跨集群的hql计算,解决跨集群hql的数据计算、处理;且本发明将hql提交到最空闲的集群中,提升运算速度和集群的资源利用率。[0040]2、本发明系统及方法,无学习成本,简单的hql语句就能实现跨集群计算,实用性强,更易于推广。[0041]3、本发明通过该系统,数仓分析人员将较好地利用hql便利性来实现多个集群的数据分析,同时也减少了运维人员对数据的维护成本。附图说明[0042]此处所说明的附图用来提供对本发明实施例的进一步理解,构成本技术的一部分,并不构成对本发明实施例的限定。在附图中:[0043]图1为本发明一种基于hql的跨集群数据处理系统架构图。[0044]图2为本发明实施例待查询hql语句解析成语法树的示意图。[0045]图3为本发明一种基于hql的跨集群数据处理方法的流程图。具体实施方式[0046]为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明作进一步的详细说明,本发明的示意性实施方式及其说明仅用于解释本发明,并不作为对本发明的限定。[0047]实施例1[0048]如图1所示,本发明一种基于hql的跨集群数据处理系统,该系统包括客户端、计算引擎管理模块、集群管理模块、跨集群表管理模块;[0049]所述客户端,用于将待查询的hql语句发送到计算引擎管理模块,同时接收所述计算引擎管理模块查询的结果数据;[0050]所述计算引擎管理模块,用于使用hive引擎解析客户端发送过来的hql语句,分析出hql中的所用到的表、以及表所属的集群(可能是本集群,也可能是非本集群),实现本集群或跨集群计算;同时该模块支持跨集群hql的语法检查;[0051]所述集群管理模块,用于实时地获取所有集群的计算资源(cpu核数和内存大小)和存储资源(hdfs存储空间使用率),并运用一定的规则计算出当前最空闲的集群,供所述计算引擎管理模块获取得到最空闲的集群来执行hql语句;[0052]所述跨集群表管理模块,用于管理和维护这些跨集群同步过来的表,即管理由非本集群同步到本集群的表;该模块默认是开启自动清除同步过来的表,如果关闭,将通过该模块实现手动删除。[0053]具体地,考虑到本系统的设计目标为满足多集群的hql计算,需要对集群的一些配置属性信息需要维护管理,即所述集群管理模块还用于对集群的配置属性信息进行维护管理。所述集群的配置属性信息包括集群名称(hql语句中的表名称会使用该属性)、集群yarn地址信息、集群hivethriftservcer地址信息和集群hdfs的地址信息;获取这些信息主要目的是选择一个最空闲的集群,将最终由计算引擎管理模块解析后的hql语句,提交到该集群,以提升集群的利用率和任务的运算效率。其中:[0054](1)集群名称:hql中的表名称会使用,表名称的约定的规则为:[集群名称.数据库名称.表名称];[0055](2)集群yarn地址信息:周期性的通过yarn地址获取该集群的资源(cpu核数、内存)信息;[0056](3)集群hdfs的地址信息:周期性的获取集群中hdfs的存储容量信息;[0057](4)集群hivethriftservcer地址信息:是最终通过解析生产的hql,将其提交给hivethriftservcer。至于选择哪一个hivethrfitserve,将依据(2)、(3)中获取的资源信息,选择剩余资源多的集群。[0058]具体地,如图3所示,所述计算引擎管理模块的执行过程具体包括:[0059]使用antlr4技术框架分析客户端发送过来的hql语句的语法是否正确,若hql语句的语法正确,则执行解析该hql语句的类型,hql语句的类型包括dml类型、ddl类型;其中,dml(datamanipulationlanguage)数据操纵语言,对数据库中的数据进行一些简单操作,如insert、delete、update、select等;ddl(datadefinitionlanguage)数据定义语言,对数据库中的某些对象(例如database、table)进行管理,如create、alter和drop。[0060]其中,本发明系统采用现有的antlr4技术框架来分析hql语句,antlr4将hql语句解析成一棵语法树,在这个语法树中我们可以获取两个重要的信息:(1)该hql的类型为dml类型或者是ddl类型,(2)hql中所涉及的表,表的命名格式本系统约定如下:[集群名称.数据库名称.表名称],本实施例的待查询的hql语句为:selectt1.id,t1.name,t2.agefromclustera.student.stt1leftjoinclusterb.teacher.tct2ont2.id=t1.id。[0061]如图2所示,图2为hql:selectt1.id,t1.name,t2.agefromclustera.student.stt1leftjoinclusterb.teacher.tct2ont2.id=t1.id解析出的语法树。[0062]从图2的语法树中可以看出,该语句为select语句,为dml类型的,同时解析到两张表为clustera.student.st(集群clustera中student数据库中的st表)t1和clusterb.teacher.tc(集群clusterb中teacher数据库中的tc表)。[0063]若hql语句的语法错误,则将错误信息返回给客户端。[0064]如果解析出的hql语句为ddl类型,那么继续解析该hql语句所操作的对应集群,同时把hql语句发送到对应的本集群去执行;[0065]如果解析出的hql语句为dml类型,那么继续解析该hql语句为select语句还是非select语句;[0066]若解析出来为select语句,则继续解析该hql所涉及的表以及表所对应的集群,同时调用所述集群管理模块,查询出当前资源比较空闲的集群,同时把hql语句发送到该集群执行;此处当前资源比较空闲的集群可以是本集群,也可以是非本集群(即跨集群);[0067]若解析出来为非select语句,则继续解析要插入或者删除或更新表所在的集群,同时解析该hql语句所涉及到的其他表以及表所属的集群;[0068]如果该hql语句所涉及到的其他表以及表所属的集群,与要插入或者删除或更新表所在的集群均在本集群,那么在本集群执行,并把执行结果数据返回给客户端;[0069]如果该hql语句所涉及到的其他表以及表所属的集群,与要插入或者删除或更新表所在的集群不在同一集群,那么采用跨集群同步方法进行处理,并把执行结果数据返回给客户端。[0070]其中:[0071]要解析出要插入或者删除或更新表所在的集群,该集群暂时称之为clustera,同时也解析出该hql所涉及到的其他表,以及表所属的集群,假如此时的hql解析出来其他集群的表只有一张,该表暂时称之为clusterb.teacher.tc。[0072]获取clusterb.teacher.tc的建表语句和所在的hdfs路径,暂路径为path001,同时在clustera中创建tc,为防止表名重复,在tc后加上时间戳后缀。[0073]在集群clustera中使用discp命令从集群clusterb中复制path001到tmp/path001目录,使用load命令将集群clusera中/tmp/path001的数据加载到新建的hive表tc中;并在集群clustera中执行该非select语句,并将执行的结果发送到客户端,同时删除集群clustera中的hiv表tc。[0074]discp命令为远程复制命令;load命令为装入命令。[0075]本发明一种基于hql的跨集群数据处理系统,仅通过配置简单的hql语法规则,分析出待查询hql语句中的所用到的表以及表所属那个集群,内部系统通过集群之间的数据同步技术,使业务分析人员无感知的情况下实现跨集群的hql计算,解决跨集群hql的数据计算、处理;且本发明将hql提交到最空闲的集群中,提升运算速度和集群的资源利用率。[0076]本发明通过该系统,数仓分析人员将较好地利用hql便利性来实现多个集群的数据分析,同时也减少了运维人员对数据的维护成本。[0077]实施例2[0078]如图2、图3所示,本实施例与实施例1的区别在于,本实施例提供了一种基于hql的跨集群数据处理方法,该方法应用于实施例1所述的一种基于hql的跨集群数据处理系统,该方法包括:[0079]s0:使用antlr4技术框架分析客户端发送过来的hql语句的语法是否正确,若hql语句的语法正确,则执行解析该hql语句的类型;若hql语句的语法错误,则将错误信息返回给客户端;[0080]s1:使用hive引擎解析客户端发送过来的待查询hql语句的类型,hql语句的类型包括dml类型、ddl类型;[0081]s2:如果解析出的hql语句为ddl类型,那么继续解析该hql语句所操作的对应集群,同时把hql语句发送到对应的本集群去执行;[0082]s3:如果解析出的hql语句为dml类型,那么继续解析该hql语句为select语句还是非select语句;[0083]s4:若解析出来为select语句,则继续解析该hql所涉及的表以及表所对应的集群,同时调用所述集群管理模块,查询出当前资源比较空闲的集群,同时把hql语句发送到该集群执行;所述当前资源比较空闲的集群包括本集群或者非本集群;[0084]s5:若解析出来为非select语句,则继续解析要插入或者删除或更新表所在的集群,同时解析该hql语句所涉及到的其他表以及表所属的集群;如果该hql语句所涉及到的其他表以及表所属的集群,与要插入或者删除或更新表所在的集群均在本集群,那么在本集群执行,并把执行结果数据返回给客户端;如果该hql语句所涉及到的其他表以及表所属的集群,与要插入或者删除或更新表所在的集群不在同一集群,那么采用跨集群同步方法进行处理,并把执行结果数据返回给客户端。[0085]为了进一步的对本实施例进行说明,步骤s5中如果该hql语句所涉及到的其他表以及表所属的集群,与要插入或者删除或更新表所在的集群不在同一集群,那么采用跨集群同步方法进行处理,并把执行结果数据返回给客户端;具体包括:[0086]要插入或者删除或更新表所在的集群记作clustera,该hql语句所涉及到的其他表以及表所属的集群记作clusterb、其他表记作clusterb.d.t;[0087]获取表clusterb.d.t的建表语句和所在的hdfs路径,记作路径为path001,同时在集群clustera中创建与表clusterb.d.t对应的hiv表clustera.d.t,为防止表名重复,在clustera.d.t后可加上时间戳后缀;在集群clustera中使用discp命令从集群clusterb中复制path001到tmp/path001目录,使用load命令将集群clusera中/tmp/path001的数据加载到新建的hive表clustera.d.t中;并在集群clustera中执行该非select语句,并将执行的结果发送到客户端,同时删除集群clustera中的hiv表clustera.d.t。[0088]本发明一种基于hql的跨集群数据处理方法,仅通过配置简单的hql语法规则,分析出待查询hql语句中的所用到的表以及表所属那个集群,内部系统通过集群之间的数据同步技术,使业务分析人员无感知的情况下实现跨集群的hql计算,解决跨集群hql的数据计算、处理;且本发明将hql提交到最空闲的集群中,提升运算速度和集群的资源利用率。[0089]本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd‑rom、光学存储器等)上实施的计算机程序产品的形式。[0090]本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。[0091]这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。[0092]这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。[0093]以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1