分布式海量数据处理方法及装置与流程

文档序号:14871032发布日期:2018-07-06 23:50阅读:187来源:国知局

本发明涉及分布式存储技术领域,尤其涉及一种分布式海量数据处理方法及装置。



背景技术:

b+树索引结构是多级索引结构中的一种,因其较快的查询速度,在文件系统中广泛用作建立索引。现有的b+及其变种索引结构在分布式环境下,为了维持索引结构本身的平衡性,每编辑一条索引都需要对结构进行左旋或者右旋操作,当数据量很大时候,这些操作方式就会导致数据在节点之间来回移动,带来了巨大的网络通信成本。

基于现有技术中的压缩算法、位图索引结构和分布式计算,以期寻求一种方法来解决上述问题。其中,压缩算法是减少数据大小的一种有效方式,可以分为有损压缩和无损压缩两种,在索引过程中一般使用无损压缩,常用的算法主要有gzip,bzip2和lzop几种,这些算法用在数据索引过程中会存在索引信息需要解压缩才能使用索引信息的问题,同样这个解压缩的操作会带来时间和空间成本开销,而且在压缩比比较高的时候,压缩产生的文件会比未压缩的数据大。位图索引结构使用位图来对数据进行索引,可以利用计算机高效的按位逻辑操作来快速处理组合查询,充分发挥了位图的计算优势,目前位图索引的压缩方式有按行程编码、字节编码、混合行程编码、字节对其编码等方式,这些索引方式都极大的提高了执行速度,并且可以减少索引信息大小,可以在不解压缩的情况下对数据进行处理;其中字对齐位图索引较好的利用了现有计算机字处理为单位的特性,具有非常好的性能优势。分布式计算为海量数据的存储和管理提供了可能,因为其可以有效地利用多台独立的服务器资源来满足海量数据对计算和存储的需要。这种方式是当前应对海量数据增长的一种有效方案,但是随着数据量的急剧增长,大数据的高性能索引和查询成为了当前计算和存储过程中的一项迫切需求。

目前的分布式b+树几乎没有产品级的工业应用,压缩-字对齐位图索引主要在单机和并行环境下使用比较多,一些分布式下的索引使用异构方式,即部分使用b+,部分使用位图的混合方式,这种结构的缺点会导致全局索引不均衡,导致系统索引和查询的吞吐量降低,而一些分布式位图索引没有进行压缩,因此在数据量非常大的时候索引数据会比数据大几倍,这就带来了巨大的索引成本。



技术实现要素:

为了解决上述问题,本发明提供一种分布式海量数据处理方法及装置,以提高存储和检索的效率。

本发明第一方面提供一种分布式海量数据处理方法,包括:

客户端向元数据服务器发送索引请求;

客户端接收所述元数据服务器返回的可用服务器列表;可用服务器列表包括一个或多个第一数据索引服务器标识,所述第一数据索引服务器标识与所述第一数据索引服务器一一对应;

客户端对待索引的原始数据进行拆分,以获得拆分后的分块数据,并为所述分块数据分配数字编号;所述分块数据包括分块信息,所述分块信息包括所述分块数据所属的原始数据的文件名称、当前时间戳、数字编号和通用唯一识别码uuid;

客户端根据分布式一致性哈希算法,以所述分块数据的所述分块信息为键值,将所述分块数据的存储位置映射到所述可用服务器标识列表中,以获得与所述分块数据对应的第二数据索引服务器标识,其中,第一数据索引服务器标识包括第二数据索引服务器标识;

客户端将与第二数据索引服务器标识对应的所述分块数据发送给第二数据索引服务器,以使得所述第二数据索引服务器对所述分块数据进行存储;

客户端接收元数据服务器返回的索引完成信息,其中,所述索引完成信息包括索引存储目录,所述索引存储目录为所述第二数据索引服务器对所述分块数据进行存储后生成的用于查找所述分块数据的目录,所述索引存储目录由所述第二数据索引服务器发送给所述元数据服务器。

本发明第二方面提供一种分布式海量数据处理方法,包括:

元数据服务器接收客户端发送的索引请求;所述索引请求包括待索引的原始数据所包括的记录的数量、每条记录包括的列数及每列数据类型的大小;

元数据服务器向客户端发送可用服务器列表,可用服务器列表包括一个或多个第一数据索引服务器标识,所述第一数据索引服务器标识与所述第一数据索引服务器一一对应;

第二数据索引服务器接收客户端发送的分块数据;第二数据索引服务器为可用服务器列表中接收分块数据的第一数据索引服务器;

当元数据服务器判断所述分块数据的数量等于实际数量时,元数据服务器向第二数据索引服务器发送存储指令,以使得所述第二数据索引服务器对接收到的所述分块数据进行存储,并向所述元数据服务器发送索引完成子信息,其中,实际数量根据所述索引请求和所述分块数据所包括的记录的数量计算获得;索引完成子信息包括索引存储目录;所述索引存储目录为所述第二数据索引服务器对所述分块数据进行存储后生成的用于查找所述分块数据的目录;

所述元数据服务器根据接收到的索引完成子信息判断各分块数据是否存储完成,若是,元数据服务器向所述客户端发送索引完成信息,其中,所述索引完成信息包括所有索引完成子信息。

本发明第三方面提供一种分布式海量数据处理装置,包括:

索引请求模块,用于向元数据服务器发送索引请求;

可用服务器列表接收模块,用于接收所述元数据服务器返回的可用服务器列表;可用服务器列表包括一个或多个第一数据索引服务器标识,所述第一数据索引服务器标识与所述第一数据索引服务器一一对应;

拆分模块,用于对待索引的原始数据进行拆分,以获得拆分后的分块数据,并为所述分块数据分配数字编号;所述分块数据包括分块信息,所述分块信息包括所述分块数据所属的原始数据的文件名称、当前时间戳、数字编号和通用唯一识别码uuid;

存储位置获取模块,用于根据分布式一致性哈希算法,以所述分块数据的所述分块信息为键值,将所述分块数据的存储位置映射到所述可用服务器标识列表中,以获得与所述分块数据对应的第二数据索引服务器标识,其中,第一数据索引服务器标识包括第二数据索引服务器标识;

分块数据发送模块,用于将与第二数据索引服务器标识对应的所述分块数据发送给第二数据索引服务器,以使得所述第二数据索引服务器对所述分块数据进行存储;

索引完成信息接收模块,用于接收元数据服务器返回的索引完成信息,其中,所述索引完成信息包括索引存储目录,所述索引存储目录为所述第二数据索引服务器对所述分块数据进行存储后生成的用于查找所述分块数据的目录,所述索引存储目录由所述第二数据索引服务器发送给所述元数据服务器。

本发明第四方面提供一种分布式海量数据处理装置,包括元数据服务器和第一数据索引服务器,其中,元数据服务器包括索引请求接收模块、可用服务器列表发送模块、存储指令发送模块、判断模块和索引完成信息发送模块,第一数据索引服务器包括分块数据接收模块、存储指令接收模块和存储模块;

索引请求接收模块,用于接收客户端发送的索引请求;所述索引请求包括待索引的原始数据所包括的记录的数量、每条记录包括的列数及每列数据类型的大小;

可用服务器列表发送模块,用于向客户端发送可用服务器列表,可用服务器列表包括一个或多个第一数据索引服务器标识,所述第一数据索引服务器标识与所述第一数据索引服务器一一对应;

存储指令发送模块,用于当所述分块数据的数量等于实际数量时,向第二数据索引服务器发送存储指令;第二数据索引服务器为可用服务器列表中接收分块数据的第一数据索引服务器;

判断模块,用于根据接收到的索引完成子信息判断各分块数据是否存储完成,若是,触发索引完成信息发送模块;

索引完成信息发送模块,用于向所述客户端发送索引完成信息,其中,所述索引完成信息包括所有索引完成子信息;

分块数据接收模块,用于接收客户端发送的分块数据;

存储指令接收模块,用于接收元数据服务器发送的存储指令,并触发存储模块;

存储模块,用于对接收到的所述分块数据进行存储,并向所述元数据服务器发送索引完成子信息,其中,实际数量根据所述索引请求和所述分块数据所包括的记录的数量计算获得;索引完成子信息包括索引存储目录;所述索引存储目录为所述第二数据索引服务器对所述分块数据进行存储后生成的用于查找所述分块数据的目录。

本发明提供的分布式海量数据处理方法及装置,客户端对待索引的原始数据进行拆分,并根据分布式一致性哈希算法,将拆分后获得的分块数据与元数据服务器返回的可用服务器列表中的第一数据索引服务器进行映射,从而为每个分块数据分配一个第二数据索引服务器用于存储。上述方法在对分块数据进行存储时,根据分块数据自身的分块信息获得存储的第二数据索引服务器,每个分块数据存储的第二数据索引服务器不尽相同,因此,多个第二数据索引服务器可同时对接收到的分块数据进行存储,极大的提高了存储效率。另外,在完成原始数据包括的分块数据的存储后,客户端会收到与存储的原始数据对应的索引完成信息,后续客户端在查找该原始数据时,通过索引完成信息即可,极大的提高了检索的效率。

附图说明

在下文中将基于实施例并参考附图来对本发明进行更详细的描述。其中:

图1为本发明实施例一提供的分布式海量数据处理方法的一流程示意图;

图2所示为本发明实施例一提供的分布式海量数据处理方法中各实体装置之间的关系图;

图3为本发明实施例一提供的分块数据中某列的位图索引原理示意图;

图4本发明实施例一提供的分块数据中各列的位图索引示意图;

图5为本发明实施例一提供的分布式海量数据处理方法的另一流程示意图;

图6为本发明实施例二提供的分布式海量数据处理方法的一流程示意图;

图7为本发明实施例二提供的分布式海量数据处理方法的另一流程示意图;

图8为本发明实施例三提供的分布式海量数据处理装置的一结构示意图;

图9为本发明实施例四提供的分布式海量数据处理装置的一结构示意图。

在附图中,相同的部件使用相同的附图标记。附图并未按照实际的比例绘制。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

实施例一

本实施例中的方法适用于客户端。

图1为本发明实施例提供的分布式海量数据处理方法的一流程示意图,图2为本发明实施例提供的分布式海量数据处理方法中各实体装置之间的关系图。如图1、图2所示,本发明提供一种分布式海量数据处理方法,包括步骤101-步骤106。

其中,步骤101,客户端a向元数据服务器b发送索引请求。

客户端a读取本地存储的配置文件中元数据服务器b的地址和端口,向元数据服务器b发送索引请求,以请求索引数据。元数据服务器b通过其本地存储的协调服务器c配置文件中读取协调服务器c的地址和端口,并向协调服务器c发出数据索引消息,数据索引消息中包括待索引的原始文件位置、文件记录数、文件列数和文件每一列的数据类型;进一步的,索引请求包括待索引的原始数据所包括的记录的数量、每条记录包括的列数及每列数据类型的大小。

协调服务器c从其本地配置库中读取索引服务器列表,并向数据索引服务器列表中的各数据索引服务器d发送是否在线消息。数据索引服务器d收到消息后,向协调服务器c回复应答消息,协调服务器c收到应答消息后,记录下当前可用的数据索引服务器d的ip地址和可用端口号,同时把这些可用的数据索引服务器d的ip地址和对应端口反馈给元数据服务器b,元数据服务器b最终回复客户端a可用服务器列表,同时告知可用的数据索引服务器d准备好数据接收。若所有的数据索引服务器d都不可用,则元数据服务器b拒绝客户端a发送的索引请求。

步骤102,客户端a接收所述元数据服务器b返回的可用服务器列表;可用服务器列表包括一个或多个第一数据索引服务器标识,所述第一数据索引服务器标识与所述第一数据索引服务器一一对应。

具体的,可用服务器列表包括一个或多个第一数据索引服务器标识,即可用服务器列表至少包括一个第一数据索引服务器标识。若当前没有可用的数据索引服务器,则元数据服务器b拒绝客户端a发送的索引请求,若元数据服务器b返回可用服务器列表给客户端a,说明当前至少有一个可用的数据索引服务器。

数据索引服务器包括第一数据索引服务器,第一数据索引服务器即当前可用的数据索引服务器。第一数据索引服务器标识可为ip地址或服务器编号,只要能唯一标识该第一数据索引服务器即可,在此不做限定。在本实施例中,第一数据索引服务器标识采用其ip地址。

步骤103,客户端a对待索引的原始数据进行拆分,以获得拆分后的分块数据,并为所述分块数据分配数字编号;所述分块数据包括分块信息,所述分块信息包括所述分块数据所属的原始数据的文件名称、当前时间戳、数字编号和通用唯一识别码uuid。

客户端a对待索引的原始数据进行拆分,以将拆分后获得的分块数据进行分段存储。对于拆分后获得的分块数据,按照分块数据中包括的数据出现的先后顺序,对分块数据进行编号,例如对于数字0-99的原始数据进行拆分,每个分块数据包括20个数字,那么该原始数据需要被拆分成5段,分别为0-19、20-39、40-59、60-79和80-99,对于存储上述5段数字的分块数据,应依次分配数字编号1-5。

每个分块数据均包括有分块信息,分块信息用于对该分块数据进行描述,包括分块数据所属的原始数据的文件名称、当前时间戳、数字编号和uuid。

步骤104,客户端a根据分布式一致性哈希算法,以所述分块数据的所述分块信息为键值,将所述分块数据的存储位置映射到所述可用服务器标识列表中,以获得与所述分块数据对应的第二数据索引服务器标识,其中,第一数据索引服务器标识包括第二数据索引服务器标识。

具体的,客户端a的数据传输子系统(也即下文中的分块数据发送模块)启动服务,数据传输子系统的线程j从分块数据堆中获取待传输的分块数据dj,并利用通用唯一识别码(universallyuniqueidentifier,简称uuid)为该数据分配唯一的编号。根据分布式一致性哈希算法(dht),以分块数据的分块信息为键值,即以分块数据所属的原始数据的文件名称、当前时间戳t、uuid和数字编号为键值,计算得到分块数据dj所应存储的第二数据索引服务器的ip地址及端口号,由此将分块数据dj的存储位置映射到所述可用服务器标识列表包括的第一数据索引服务器标识上,从而获得分块数据dj的存储位置。

步骤105,客户端a将与第二数据索引服务器标识对应的所述分块数据发送给第二数据索引服务器,以使得所述第二数据索引服务器对所述分块数据进行存储。

通过步骤104计算出分块数据dj的存储位置后,线程j通过第二数据索引服务器ip地址和端口号与第二数据索引服务器建立连接,并传输分块数据dj。当分块数据dj传输完成后,线程j通知协调服务器c“文件f的分块数据dj已经传输完毕”,协调服务器c等待文件f的所有分块数据传输完成,通过文件f的分块数据数字编号的连续性(如步骤103示例中的数字编号1-5,1-5具有连续性),可知道文件f包括的所有分块数据是否完成,若未完成则等待预设时间,当超过预设时间时,协调服务器c向元数据服务器b发送分块数据传输超时信息,然后元数据服务器b向客户端a发出重试指令,以便客户端a重新向第二数据索引服务器发送分块数据。若分块数据传输成功,元数据服务器b通知第二数据索引服务器存储。

步骤106,客户端a接收元数据服务器b返回的索引完成信息,其中,所述索引完成信息包括索引存储目录,所述索引存储目录为所述第二数据索引服务器对所述分块数据进行存储后生成的用于查找所述分块数据的目录,所述索引存储目录由所述第二数据索引服务器发送给所述元数据服务器b。

具体的,第二数据索引服务器接收到元数据服务器b的存储通知后,便利用本地的压缩-字对齐位图索引模块(即下文中出现的存储模块)对接收的分块数据进行索引压缩,并将压缩后的索引信息存储于本地,具体过程为:

如图3所示,首先分析分块数据的列数和行数,获取所述分块数据的列集合{col1,col2,col3,...,coln},其中,coli表示所述分块数据中存储的各条记录第i列的集合,i∈[1,n];

遍历每一列coli以构建位图索引,构建位图索引具体包括:

获取coli包括的所有子数据dataori;

对子数据dataori进行排序去重获得数据集datanew;

构建二维表t2d,二维表的宽度为数据集datanew中元素的总数,高度为子数据dataori中元素的总数;

遍历t2d,判断t2d中的第u行和第v列的值是否相等,若相等,则把t2d中该位置赋值为1,否则赋值为0,以获得位图tb;

利用压缩-字对齐位图算法对tb中的每一列进行压缩编码,如图4所示,对每一列进行压缩编码后存储至第二数据索引服务器的本地目录下,并向所述元数据服务器b发送索引完成子信息。具体为:第二数据索引服务器向协调服务器c发送索引完成子信息,同时元数据服务器b监听到协调服务器c上该信息,然后根据文件f包括的分块数据的个数和当前已经接收的索引完成子信息校验索引过程是否全部完成,如果全部完成,则向客户端a发送索引完成信息,索引完成信息包括所有索引完成子信息,索引完成子信息包括每个第二数据索引服务器上存储的分块数据的索引存储目录。索引存储目录为所述第二数据索引服务器对所述分块数据进行存储后生成的用于查找所述分块数据的目录。

本实施例提供的分布式海量数据处理方法,客户端a对待索引的原始数据进行拆分,并根据分布式一致性哈希算法,将拆分后获得的分块数据与元数据服务器b返回的可用服务器列表中的第一数据索引服务器进行映射,从而为每个分块数据分配一个第二数据索引服务器用于存储。上述方法在对分块数据进行存储时,根据分块数据自身的分块信息获得存储的第二数据索引服务器,每个分块数据存储的第二数据索引服务器不尽相同,因此,多个第二数据索引服务器可同时对接收到的分块数据进行存储,极大的提高了存储效率。另外,在完成原始数据包括的分块数据的存储后,客户端a会收到与存储的原始数据对应的索引完成信息,后续客户端a在查找该原始数据时,通过索引完成信息即可,极大的提高了检索的效率。

在本发明一个具体实施例中,步骤103具体包括:

根据表达式计算获得一个所述分块数据所包括的记录的数量;其中,每条记录由n个列组成,第j列数据类型的大小为sj,j∈[0,n-1],b表示分块数据的存储容量,m表示一个所述分块数据所能存储的记录的数量;

根据将原始数据拆分为k段,即[0,m1],[m1+1,m2],….[mk-1+1,mk],每段存储于一个分块数据上,并依次为每个分块数据分配数字编号,t为原始数据所包括的记录的数量。优选的,数字编号应连续编号,如用1-10为某一文件包括的10个分块数据进行编号,而不是用1-4和6-11为该10个分块数据进行编号。

在本发明另一个具体实施例中,如图5所示,上述方法还包括步骤107-步骤108。

步骤107,客户端a向所述元数据服务器b发送查询请求,以使得所述元数据服务器b将查询请求发送给配置表中与所述索引存储目录相对应的第三数据索引服务器,所述查询请求包括查询语句和索引存储目录,所述配置表包括所述索引存储目录和对应的第三数据索引服务器;第二数据索引服务器包括第三数据索引服务器。

具体的,元数据服务器b包括有配置表,配置表包括索引存储目录和对应的第三数据索引服务器,此处与索引存储目录相对应的第三数据索引服务器可有多个。第二数据索引服务器包括第三数据索引服务器,即此处的第三数据索引服务器应为存储了分块数据的第二数据索引服务器。通过索引存储目录可查找到原始数据包括的多个分块数据存储的第三数据索引服务器。

客户端a向元数据服务器b提交查询请求,查询请求以类sql查询语句提交,同时在查询请求中包括索引存储目录。元数据服务器b查看配置表,查找到对应的第三数据索引服务器,然后将查询语句发送给第三数据索引服务器。

第三数据索引服务器把索引存储目录转换为其本地的索引目录后进行数据查询操作;具体的,首先对类sql查询语句进行词法分析和语法分析,从中获取需要查询的列,查询条件等信息,然后把查询请求中的索引存储目录转换为本地目录,若本地目录不存在,返回查询结果;否则,对本地目录下的数据进行查找,得到查询子结果,并向所述元数据服务器b返回查询子结果。

步骤108,客户端a接收所述元数据服务器b返回的查询结果,所述查询结果由所述第三数据索引服务器根据所述查询请求进行查找后获得。

查询完成后,第三数据索引服务器便向协调服务器c发送检索完成通知,元数据服务器b监测协调服务器c收到检索完成通知后的配置变化,启动对应数据接收线程,协调服务器c通过反馈信息告知第三数据索引服务器向元数据服务器b发送查询结果,当所有第三数据索引服务器的查询工作完成后,元数据服务器b收到所有的查询子结果,并校验查询结果是否全部返回。若是,元数据服务器b通过解析类sql查询语句中的查询条件,对各个第三数据索引服务器返回的查询子结果进行汇总、去重、排序等操作,然后向客户端a返回查询结果。

实施例二

本实施中的方法适用于服务器端。在本实施例中,服务器端包括元数据服务器b和第一数据索引服务器。

图6为本发明实施例提供的分布式海量数据处理方法的一流程示意图,如图6所示,本发明提供一种分布式海量数据处理方法,包括步骤201-步骤204。

步骤201,元数据服务器b接收客户端a发送的索引请求;所述索引请求包括待索引的原始数据所包括的记录的数量、每条记录包括的列数及每列数据类型的大小。

步骤202,元数据服务器b向客户端a发送可用服务器列表,可用服务器列表包括一个或多个第一数据索引服务器标识,所述第一数据索引服务器标识与所述第一数据索引服务器一一对应。

具体的,可用服务器列表包括一个或多个第一数据索引服务器标识,即可用服务器列表至少包括一个第一数据索引服务器标识。若当前没有可用的数据索引服务器,则元数据服务器b拒绝客户端a发送的索引请求,若元数据服务器b返回可用服务器列表给客户端a,说明当前至少有一个可用的数据索引服务器。

数据索引服务器包括第一数据索引服务器,第一数据索引服务器即当前可用的数据索引服务器。第一数据索引服务器标识可为ip地址或服务器编号,只要能唯一标识该第一数据索引服务器即可,在此不做限定。在本实施例中,第一数据索引服务器标识采用其ip地址。

步骤203,第二数据索引服务器接收客户端a发送的分块数据;第二数据索引服务器为可用服务器列表中接收分块数据的第一数据索引服务器;

步骤204,当元数据服务器b判断接收到的所述分块数据的数量等于实际数量时,元数据服务器b向第二数据索引服务器发送存储指令,以使得所述第二数据索引服务器对接收到的所述分块数据进行存储,并向所述元数据服务器b发送索引完成子信息,其中,实际数量根据所述索引请求和所述分块数据所包括的记录的数量计算获得;索引完成子信息包括索引存储目录;所述索引存储目录为所述第二数据索引服务器对所述分块数据进行存储后生成的用于查找所述分块数据的目录。

具体的,当分块数据dj传输完成后,线程j通知协调服务器c“文件f的分块数据dj已经传输完毕”,协调服务器c等待文件f的所有分块数据传输完成,通过文件f的分块数据数字编号的连续性(如实施例一步骤103示例中的数字编号1-5,1-5具有连续性),可知道文件f包括的所有分块数据是否完成,或者通过比较接收到的分块数据的数据是否等于实际数量来判断文件f包括的所有分块数据是否完成。实际数量可通过索引请求中携带的信息计算获得,也可由客户端a计算后,将实际数量包括在索引请求中发给元数据服务器b,实际数量的获取方式不做限定。

若文件f包括的所有分块数据未完成,则等待预设时间,当超过预设时间时,协调服务器c向元数据服务器b发送分块数据传输超时信息,然后元数据服务器b向客户端a发出重试指令,以便客户端a重新向第二数据索引服务器发送分块数据。若分块数据传输成功,元数据服务器b通知第二数据索引服务器存储。

当元数据服务器b判断接收到的所述分块数据的数量等于实际数量时,元数据服务器b向第二数据索引服务器发送存储指令,第二数据索引服务器接收到元数据服务器b的存储通知后,便利用本地的压缩-字对齐位图索引模块(即下文中出现的存储模块)对接收的分块数据进行索引压缩,并将压缩后的索引信息存储于本地,具体过程为:

如图3所示,首先分析分块数据的列数和行数,获取所述分块数据的列集合{col1,col2,col3,...,coln},其中,coli表示所述分块数据中存储的各条记录第i列的集合,i∈[1,n];

遍历每一列coli以构建位图索引,构建位图索引具体包括:

获取coli包括的所有子数据dataori;

对子数据dataori进行排序去重获得数据集datanew;

构建二维表t2d,二维表的宽度为数据集datanew中元素的总数,高度为子数据dataori中元素的总数;

遍历t2d,判断t2d中的第u行和第v列的值是否相等,若相等,则把t2d中该位置赋值为1,否则赋值为0,以获得位图tb;

利用压缩-字对齐位图算法对tb中的每一列进行压缩编码后存储至第二数据索引服务器的本地目录下,并向所述元数据服务器b发送索引完成子信息。具体为:第二数据索引服务器向协调服务器c发送索引完成子信息,同时元数据服务器b监听到协调服务器c上该信息,然后根据文件f包括的分块数据的个数和当前已经接收的索引完成子信息校验索引过程是否全部完成,如果全部完成,则向客户端a发送索引完成信息,索引完成信息包括所有索引完成子信息,索引完成子信息包括每个第二数据索引服务器上存储的分块数据的索引存储目录。索引存储目录为所述第二数据索引服务器对所述分块数据进行存储后生成的用于查找所述分块数据的目录。

步骤205,所述元数据服务器b根据接收到的索引完成子信息判断各分块数据是否存储完成,若是,元数据服务器b向所述客户端a发送索引完成信息,其中,所述索引完成信息包括所有索引完成子信息。

本实施例提供的分布式海量数据处理方法,第二数据索引服务器对接收到的分块数据进行存储,在对客户端a发送的原始数据所包括的分块数据完成存储后,向客户端a发送与存储的原始数据对应的索引完成信息,后续客户端a在查找该原始数据时,通过索引完成信息即可,极大的提高了检索的效率。

在本发明一个具体的实施例中,步骤204具体包括:

获取所述分块数据的列集合{col1,col2,col3,...,coln},其中,coli表示所述分块数据中存储的各条记录第i列的集合,i∈[1,n];

遍历每一列coli以构建位图索引,构建位图索引具体包括:

获取coli包括的所有子数据dataori;

对子数据dataori进行排序去重获得数据集datanew;

构建二维表t2d,二维表的宽度为数据集datanew中元素的总数,高度为子数据dataori中元素的总数;

遍历t2d,判断t2d中的第u行和第v列的值是否相等,若相等,则把t2d中该位置赋值为1,否则赋值为0,以获得位图tb;

利用压缩字对齐位图算法对tb中的每一列进行压缩编码后存储至第二数据索引服务器的本地目录下,并向所述元数据服务器b发送索引完成子信息。

本实施例中采用压缩字对齐位图索引方法对分块数据进行存储,能够减少位图索引信息,节省空间成本,以进一步满足大规模数据量和高并发的数据处理需要。由于向客户端a返回压缩完成后的索引完成子信息,所以可以对分块数据在压缩的状态下进行索引,避免了解压缩带来的时间和空间成本。

在本发明一个具体的实施例中,如图7所示,上述方法还包括步骤206-步骤209。

其中,步骤206,元数据服务器b接收所述客户端a的查询请求,并根据查询请求中的索引存储目录在配置表中进行查找,以获得与所述索引存储目录对应的第三数据索引服务器;所述查询请求包括查询语句和索引存储目录,所述配置表包括所述索引存储目录和对应的第三数据索引服务器;第二数据索引服务器包括第三数据索引服务器。

具体的,元数据服务器b包括有配置表,配置表包括索引存储目录和对应的第三数据索引服务器,此处与索引存储目录相对应的第三数据索引服务器可有多个。第二数据索引服务器包括第三数据索引服务器,即此处的第三数据索引服务器应为存储了分块数据的第二数据索引服务器。通过索引存储目录可查找到原始数据包括的多个分块数据存储的第三数据索引服务器。

步骤207,所述元数据服务器b将所述查询请求发送给第三数据索引服务器。

客户端a向元数据服务器b提交查询请求,查询请求以类sql查询语句提交,同时在查询请求中包括索引存储目录。元数据服务器b查看配置表,查找到对应的第三数据索引服务器,然后将查询语句发送给第三数据索引服务器。

步骤208,所述第三数据索引服务器根据所述索引存储目录,在本地索引目录下进行查找,并向所述元数据服务器b返回查询子结果。

第三数据索引服务器把索引存储目录转换为其本地的索引目录后进行数据查询操作;具体的,首先对类sql查询语句进行词法分析和语法分析,从中获取需要查询的列,查询条件等信息,然后把查询请求中的索引存储目录转换为本地目录,若本地目录不存在,返回查询结果;否则,对本地目录下的数据进行查找,得到查询子结果,并向所述元数据服务器b返回查询子结果。

步骤209,所述元数据服务器b根据接收到的查询子结果获得查询结果,并将查询结果发送给客户端a。

实施例三

本实施例为与实施例一对应的装置实施例,用于执行实施例一中的方法。

图8为本发明实施例三提供的分布式海量数据处理装置的一结构示意图;如图8所示,本实施例提供一种分布式海量数据处理装置,包括索引请求模块301、可用服务器列表接收模块302、拆分模块303、存储位置获取模块304、分块数据发送模块305和索引完成信息接收模块306。

其中,索引请求模块301,用于向元数据服务器发送索引请求。

可用服务器列表接收模块302,用于接收所述元数据服务器返回的可用服务器列表;可用服务器列表包括一个或多个第一数据索引服务器标识,所述第一数据索引服务器标识与所述第一数据索引服务器一一对应。

拆分模块303,用于对待索引的原始数据进行拆分,以获得拆分后的分块数据,并为所述分块数据分配数字编号;所述分块数据包括分块信息,所述分块信息包括所述分块数据所属的原始数据的文件名称、当前时间戳、数字编号和通用唯一识别码uuid。

存储位置获取模块304,用于根据分布式一致性哈希算法,以所述分块数据的所述分块信息为键值,将所述分块数据的存储位置映射到所述可用服务器标识列表中,以获得与所述分块数据对应的第二数据索引服务器标识,其中,第一数据索引服务器标识包括第二数据索引服务器标识。

分块数据发送模块305,用于将与第二数据索引服务器标识对应的所述分块数据发送给第二数据索引服务器,以使得所述第二数据索引服务器对所述分块数据进行存储。

索引完成信息接收模块306,用于接收元数据服务器返回的索引完成信息,其中,所述索引完成信息包括索引存储目录,所述索引存储目录为所述第二数据索引服务器对所述分块数据进行存储后生成的用于查找所述分块数据的目录,所述索引存储目录由所述第二数据索引服务器发送给所述元数据服务器。

由于本实施例是与实施例一对应的装置实施例,具体细节可参见实施例一中的记载,在此不再赘述。

在本发明一个具体实施例中,拆分模块303具体包括:

第一拆分子模块,用于根据表达式计算获得一个所述分块数据所包括的记录的数量;其中,每条记录由n个列组成,第j列数据类型的大小为sj,j∈[0,n-1],b表示分块数据的存储容量,m表示一个所述分块数据所能存储的记录的数量;

第二拆分子模块,用于根据将原始数据拆分为k段,每段存储于一个分块数据上,并依次为每个分块数据分配数字编号,t为原始数据所包括的记录的数量。

在本发明另一个具体实施例中,上述装置还包括第一查询请求发送模块和第一查询结果接收模块。

其中,第一查询请求发送模块,用于向所述元数据服务器发送查询请求,以使得所述元数据服务器将查询请求发送给配置表中与所述索引存储目录相对应的第三数据索引服务器,所述查询请求包括查询语句和索引存储目录,所述配置表包括所述索引存储目录和对应的第三数据索引服务器;

第一查询结果接收模块,用于接收所述元数据服务器返回的查询结果,所述查询结果由所述第三数据索引服务器根据所述查询请求进行查找后获得。

实施例四

本实施例为与实施例二对应的装置实施例,用于执行实施例二中的方法。

图9为本发明实施例四提供的分布式海量数据处理装置的一结构示意图;如图9所示,本实施例提供一种分布式海量数据处理装置,包括元数据服务器41和第一数据索引服务器42,其中,元数据服务器41包括索引请求接收模块401、可用服务器列表发送模块402、存储指令发送模块403、判断模块404和索引完成信息发送模块405,第一数据索引服务器42包括分块数据接收模块501、存储指令接收模块502和存储模块503。

其中,索引请求接收模块401,用于接收客户端发送的索引请求;所述索引请求包括待索引的原始数据所包括的记录的数量、每条记录包括的列数及每列数据类型的大小;

可用服务器列表发送模块402,用于向客户端发送可用服务器列表,可用服务器列表包括一个或多个第一数据索引服务器标识,所述第一数据索引服务器标识与所述第一数据索引服务器一一对应;

存储指令发送模块403,用于当所述分块数据的数量等于实际数量时,向第二数据索引服务器发送存储指令;第二数据索引服务器为可用服务器列表中接收分块数据的第一数据索引服务器;

判断模块404,用于根据接收到的索引完成子信息判断各分块数据是否存储完成,若是,触发索引完成信息发送模块;

索引完成信息发送模块405,用于向所述客户端发送索引完成信息,其中,所述索引完成信息包括所有索引完成子信息;

分块数据接收模块501,用于接收客户端发送的分块数据;

存储指令接收模块502,用于接收元数据服务器发送的存储指令,并触发存储模块;

存储模块503,用于对接收到的所述分块数据进行存储,并向所述元数据服务器发送索引完成子信息,其中,实际数量根据所述索引请求和所述分块数据所包括的记录的数量计算获得;索引完成子信息包括索引存储目录;所述索引存储目录为所述第二数据索引服务器对所述分块数据进行存储后生成的用于查找所述分块数据的目录。

由于本实施例是与实施例二对应的装置实施例,具体细节可参见实施例二中的记载,在此不再赘述。

在本发明一个具体实施例中,存储模块503具体用于:

获取所述分块数据的列集合{col1,col2,col3,...,coln},其中,coli表示所述分块数据中存储的各条记录第i列的集合,i∈[1,n];

遍历每一列coli以构建位图索引,构建位图索引具体包括:

获取coli包括的所有子数据dataori;

对子数据dataori进行排序去重获得数据集datanew;

构建二维表t2d,二维表的宽度为数据集datanew中元素的总数,高度为子数据dataori中元素的总数;

遍历t2d,判断t2d中的第u行和第v列的值是否相等,若相等,则把t2d中该位置赋值为1,否则赋值为0,以获得位图tb;

利用压缩字对齐位图算法对tb中的每一列进行压缩编码后存储至第二数据索引服务器的本地目录下,并向所述元数据服务器发送索引完成子信息。

在本发明另一个具体实施例中,元数据服务器41还包括查询请求接收模块、第二查询请求发送模块和第二查询结果接收模块,第一数据索引服务器42还包括查询子结果发送模块。

其中,查询请求接收模块,用于接收所述客户端的查询请求,并根据查询请求中的索引存储目录在配置表中进行查找,以获得与所述索引存储目录对应的第三数据索引服务器;所述查询请求包括查询语句和索引存储目录,所述配置表包括所述索引存储目录和对应的第三数据索引服务器;第二数据索引服务器包括第三数据索引服务器;

第二查询请求发送模块,用于将所述查询请求发送给第三数据索引服务器;

第二查询结果接收模块,用于根据接收到的查询子结果获得查询结果,并将查询结果发送给客户端。

查询子结果发送模块,用于根据所述索引存储目录,在本地索引目录下进行查找,并向所述元数据服务器返回查询子结果。

应该理解的是,本发明所公开的实施例不限于这里所公开的特定结构、处理步骤或材料,而应当延伸到相关领域的普通技术人员所理解的这些特征的等同替代。还应当理解的是,在此使用的术语仅用于描述特定实施例的目的,而并不意味着限制。

说明书中提到的“一个实施例”或“实施例”意指结合实施例描述的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,说明书通篇各个地方出现的短语“一个实施例”或“实施例”并不一定均指同一个实施例。

虽然上述示例用于说明本发明在一个或多个应用中的原理,但对于本领域的技术人员来说,在不背离本发明的原理和思想的情况下,明显可以在形式上、用法及实施的细节上作各种修改而不用付出创造性劳动。因此,本发明由所附的权利要求书来限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1