发明内容
本发明提供了一种数据存储计算方法和系统,解决了资源浪费的问题。
一种数据存储计算方法,包括:
对海量数据进行日志收集并预处理;
对预处理后的日志进行多维度日志分类;
根据分布式系统Block的大小,将分类后的日志数据打包,所述Block为分布式文件系统的最小存储单位;
在所述Block上存储数据,建立数据空间索引;
利用所述数据空间索引,维护分布式集群计算资源的负载均衡。
优选的,所述对海量数据进行日志收集并预处理包括:
对存储在服务器中的海量数据进行日志收集,所述海量数据指的是用户的网络行为数据;
分析日志格式,获取日志中的维度;
从所述日志中的维度中选取多个维度建立空间坐标,其中,每一个维度代表一种数据类型。
优选的,从所述日志中的维度中选取多个维度建立空间坐标包括:
接收用户指令,所述用户指令中携带有多个维度的标识;
根据所述维度的标识,从所述日志中的维度中选择相应的维度建立空间坐标。
优选的,对预处理后的日志进行多维度日志分类包括:
根据所述空间坐标的范围和各维度划分块的数目,采用均值划分法确定各个维度上的划分范围,逐条分析日志;
将每条日志写入对应的空间坐标的范围中,并生成新的日志文件;
将新生成的文件进行压缩,并记录每个文件对应的空间范围以及压缩后的文件大小。
优选的,根据分布式系统Block的大小,将分类后的日志数据打包包括:
将压缩后的文件的元信息依次写入内存中;
根据每个文件所对应的空间范围,将文件的元信息映射到空间坐标系中;
根据文件的空间信息,建立r-tree数据结构,所述r-tree的每个叶子节点的数据将作为一个数据包,每个数据包里包含多个文件,同时保证叶子节点存放的整体文件大小大于1/2block的值,同时小于1block值。
优选的,在所述Block上存储数据,建立数据空间索引包括:
调用分布式文件系统的文件读写函数,将所述r-tree的每个叶子节点里的文件写入分布式系统的一个文件中,并记录文件的空间范围;
通过与分布式系统的文件管理器进行交互,获得每个文件所对应的block的id和相应复本的block的id,得到每个block对应的文件空间范围;
将文件的空间范围映射到空间坐标系中,对文件建立空间索引,通过文件与新产生的所有的block进行关联,以建立基于block的空间索引,在内存中维持一个动态的索引数据。
优选的,所述对所述block进行分布式数据包存储,建立数据空间索引的步骤之后,还包括:
建立新的计算模式,实现计算时集群的负载均衡。
优选的,利用所述数据空间索引,维护分布式集群计算资源的负载均衡包括:
用户向分布式系统提交运行程序请求,所述请求中包括需求数据的维度空间范围;
分布式系统通过系统中的空间索引系统获取需要执行的空间区域所对应的所有block原文件及block复本文件;
分布式系统中的存储管理器与集群进行交互得到集群中各个服务器的负载状况,并返回给系统中的计算管理器,计算管理器根据不同服务器的负载情况,计算最优的block的id,并返回给程序请求的对应的block的id,运行程序。
本发明提供了一种数据存储计算系统,包括:
数据收集模块,用于对海量数据进行日志收集并预处理;
日志分类模块,用于对预处理后的日志进行多维度日志分类;
数据打包模块,用于根据分布式系统Block的大小,将分类后的日志数据打包,所述Block为分布式文件系统的最小存储单位;
索引建立模块,用于在所述Block上存储数据,建立数据空间索引;
负载均衡模块,用于利用所述数据空间索引,维护分布式集群计算资源的负载均衡。
优选的,所述负载均衡模块包括:
请求接收单元,用于接收用户向分布式系统提交运行程序请求,所述请求中包括需求数据的维度空间范围;
索引单元,用于分布式系统通过系统中的空间索引系统获取需要执行的空间区域所对应的所有block原文件及block复本文件;
存储管理器,用于集群进行交互得到集群中各个服务器的负载状况,并返回给系统中的计算管理器;
计算管理器,用于根据不同服务器的负载情况,计算最优的block的id,并返回给程序请求的对应的block的id,运行程序。
本发明提供了一种数据存储计算方法和系统,对海量数据进行日志收集并预处理,对预处理后的日志进行多维度日志分类,根据分布式系统Block的大小,将分类后的日志数据打包,所述Block为分布式文件系统的最小存储单位,在所述Block上存储数据,建立数据空间索引,利用所述数据空间索引,维护分布式集群计算资源的负载均衡,实现了数据存储过程中的负载均衡,解决了资源浪费的问题。
具体实施方式
现有的r-tree算法对数据进行组织时,不能将叶节点的文件大小控制在一定范围之内,导致叶节点在分布式系统中分布极不均匀,一个叶节点可能横跨几个block(分布式文件系统的最小存储单位),造成集群中单台服务器计算资源的浪费;再者,分布式系统的数据复本也是以block为单位的,横跨多个block的叶节点也对在分布式系统中利用冗余资源建立多维的数据索引造成了困难;此外,现有的分布式系统中,无法在计算时利用冗余资源实现集群之内不同服务器间的负载均衡。
为了解决上述问题,本发明的实施例提供了一种数据存储计算方法和系统。下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
首先结合附图,对本发明的实施例一进行说明。
本发明实施例提出了一种基于分片的数据存储计算方法,使用该方法完成数据存储的过程如图1所示,包括:
步骤101、对海量数据进行日志收集并预处理;
本步骤具体如图2所示,包括:
步骤1011、对存储在服务器中的海量数据进行日志收集,所述海量数据指的是用户的网络行为数据;
本步骤中,对存储在服务器中的海量数据进行日志收集,所述海量数据指的是用户的网络行为数据。例如,用户的IP地址,唯一ID等。
步骤1012、分析日志格式,获取日志中的维度;
本步骤中,分析日志格式后,得到日志中包含的多个维度及各个维度的代表内容。
步骤1013、从所述日志中的维度中选取多个维度建立空间坐标;
本步骤中,每一个维度代表一种数据类型。维度选择可根据用户指令完成,即用户发出指令,在指令中携带所选择的多个维度的标识,根据该用户指令选择相应的维度建立空间坐标;也可以随机的从日志的维度中选择规定个数的维度以建立空间坐标。
步骤102、对预处理后的日志进行多维度日志分类;
本步骤具体如图3所示,包括:
步骤1021、根据所述空间坐标的范围和各维度划分块的数目,采用均值划分法确定各个维度上的划分范围,逐条分析日志;
本步骤中所采用的均值划分法,即通过“空间坐标的范围/划分块数”得到每块的范围。如空间坐标范围为100,划分快数为10,得到每块的范围为100/10=10。根据日志量的大小以及分布式系统中block的值确定日志在各个维度上的划分方法,逐条分析日志,例如,可以将ip地址在20至80之间的日志为一个空间进行划分。
步骤1022、将每条日志写入对应的空间坐标的范围中,并生成新的日志文件;
每条日志均有一个空间坐标点,本步骤中,具体的,将该空间坐标点的日志写入对应的空间坐标的范围中。
步骤1023、将新生成的文件进行压缩,并记录每个文件对应的空间范围以及压缩后的文件大小。
步骤103、根据分布式系统Block的大小,将分类后的日志数据打包,所述Block为分布式文件系统的最小存储单位;
本步骤具体如图4所示,包括:
步骤1031、将压缩后的文件的元信息(文件的文件名,大小,以及文件的空间范围)依次写入内存中。
步骤1032、根据每个文件所对应的空间范围,将文件的元信息映射到空间坐标系中。
步骤1033、根据文件的空间信息,建立类似于r-tree的数据结构,每个叶子节点的数据将作为一个数据包,每个数据包里包含多个文件,同时保证叶子节点存放的整体文件大小大于1/2block的值,同时小于1block值。
步骤104、在所述Block上存储数据,建立数据空间索引;
本步骤具体如图5所示,包括:
步骤1041、调用分布式文件系统的文件读写函数,将r-tree的每个叶子节点里的文件写入分布式系统的一个文件中,并记录文件的空间范围。
步骤1042、通过与分布式系统的文件管理器进行交互,获得每个文件所对应的block的id和相应复本的block的id,得到每个block对应的文件空间范围。(分布式系统采取了冗余数据的形式来保证数据的安全性,即系统在存储文件的时候,会在其他服务器上同时生成几个副本文件,这样即使一台服务器上的数据丢失也不会对数据安全性造成影响。)
步骤1043、将文件的空间范围映射到空间坐标系中,对文件建立空间索引,通过文件与新产生的所有的block进行关联,以建立基于block的空间索引,在内存中维持一个动态的索引数据。
步骤105、利用所述数据空间索引,维护分布式集群计算资源的负载均衡;
本步骤具体如图6所示,包括:
步骤1051、用户向分布式系统提交运行程序请求,所述请求中包括需求数据的维度空间范围。
步骤1052、分布式系统(存储管理器)通过系统中的空间索引系统获取需要执行的空间区域所对应的所有block原文件及block复本文件。
步骤1053、分布式系统中的存储管理器与集群进行交互得到集群中各个服务器的负载状况,并返回给系统中的计算管理器,计算管理器根据不同服务器的负载情况,计算最优的block的id,并返回给程序请求的对应的block的id,运行程序。所述服务器的负载包括cpu使用率,io使用率,内存使用率等。
下面结合附图,对本发明的实施例二进行说明。
本发明实施例提出了一种基于分片的数据存储计算系统,该系统如图7所示,包括:
数据收集服务器,用于收集用户网络行为数据,并定期将数据的内容传输到数据预处理服务器中。
数据预处理服务器,用于将海量的数据进行预处理,选取合适的维度和划分方法,将数据分片压缩,将预处理后的数据发送给分布式数据存储计算平台。
分布式数据存储计算平台。所述计算平台存储所有数据,并提供海量数据分析计算的平台。所述分布式数据存储计算平台包括:
存储管理器,此装置按维度打包预处理服务器传送的数据,向分布式集群中写入数据,存储文件存储信息(文件大小、所在服务器、以及对应的block的id),负责分布式集群交互(获取服务器的负载状况),并对存储的数据的所有block的id建立索引。
计算管理器,响应用户的数据处理请求,计算最合理的block的id,发送给计算处理器,维护分布式集群的负载均衡。
计算处理器,执行用户提交的数据处理程序。
分布式集群,由很多服务器组成,负责海量数据存储和运算。
使用上述系统完成数据计算的流程如图8所示,包括:
步骤801、用户提交给计算管理器的程序执行代码和将要执行的数据维度的范围。
步骤802、计算管理器发送数据维度的范围给存储管理器,并发送读取数据索引的请求。
步骤803、存储管理器向数据所在服务器发送获取集群中服务器负载的请求(向数据所在的服务器发送请求)。
步骤804、集群中服务器向存储管理器发送服务器负载状况信息。
步骤805、存储管理器向计算管理器发送数据维度范围内的文件名,以及对应的所有block的id,和block所在存储服务器的负载情况。
步骤806、计算管理器向计算处理器发送程序执行代码和需要执行的数据的blockid。
步骤807、计算处理器在分布式集群的相应服务器上处理数据。
步骤808、计算处理器向用户发送数据处理的结果。
下面结合附图,对本发明的实施例三进行说明。
本发明实施例提供了一种数据存储计算方法。本发明实施例中,以需要对大量的互联网用户行为其进行存储和分析运算的场景为应用场景,采用的分布式系统的block大小为64M,分布式系统将对文件建立两份副本为例进行说明。具体流程如图9所示,包括:
收集的数据格式如表1所示。
表1
维度 |
维度含义 |
取值 |
a1 |
用户id |
0~1000000000的整数 |
a2 |
用户ip |
0~4294967296的整数 |
a3 |
活动id |
整数 |
a4 |
监测点id |
整数 |
a5 |
用户访问时间 |
年.月.日时:分:秒 |
a6 |
用户访问行为 |
整数 |
步骤901:利用监测系统,收集互联网用户行为数据,数据文件大小为2T。根据分析选取a1,a2两维(一个日志文件有多少维度与日志收集的内容有关系,比如这条日志只记录了四个内容:cookiesID、ip、用户浏览网页的url、浏览时间,那么这条日志就有四个维度,原则上日志是可以有无限个维度的。a1和a2是日志中合适的数据维度,比如ip,cookiesId)建立空间坐标系,将日志投入的空间向量中,分成262144(512*512)个文件,维度a1切分成512份,每一份包含的范围为1000000000/512=1953125;维度a2切分成512份,每一份包含的范围为4294967296/512=8388608。
例:日志115647^20000000^100485^10004845^2013.04.2313:56:12^0,
该日志的空间坐标为(115647,20000000)坐落在空间区域(0~1953125,16777217~25165824)。
将数据的所有日志依次写入这个空间区域所对应的文件中,并将文件压缩,压缩后的数据分块情况如表2所示(每个分块对应一个收集到的日志)。
表2
步骤902:将压缩好的分块文件的元信息插入到空间坐标中,保证每个数据包(将步骤1中的数据块进行组合,一个数据包可能含有一个或多个数据块)在mbr(空间最小的外接矩形)最小的情况下,使所含文件的大小在32M到64M中保持最大。数据包MBR大小及文件大小如表3所示。
表3
步骤903:依次将数据包里的文件写入分布式系统的一个block中(每个数据包对应一个block),并获得该block Id以及两个副本的block Id,对所有数据建立索引,完成海量数据的分布式存储。空间区域对应的block Id和文件大小如表4所示。
表4
步骤904:程序向分布式集群发送请求对(a11~a12,b11~b12),(a21~a22,b21~b22),(a31~a32,b31~b33),(a41~a42,b41~b42)空间区域的数据进行处理,通过索引获得数据对应的block分布情况如表5所示。
表5
通过与相应服务器交互,获得集群当前服务器的负载情况(以cpu使用
率为例),如表6所示。
表6
服务器2 |
50% |
服务器3 |
40% |
服务器4 |
40% |
服务器5 |
50% |
服务器6 |
40% |
服务器7 |
40% |
服务器8 |
50% |
步骤905:计算各个空间区域内选取不同block的分数。
Score((an1~an2,bn1~bn2),block_m)代表空间区域(an1~an2,bn1~bn2)选用block_m时的得分:
n(服务器n)代表服务器n上各个block的数目;
c(服务器n)代表服务器n上现在的cpu使用率;
Score((an1~an2,bn1~bn2),block_m)
=(1-c(block_n所在的服务器))*100/n(block_n所在的服务器);
Score((a11~a12,b11~b12),block_11)=(1–40%)*100/1=60。
各个空间区域的得分如表7所示。
表7
步骤906:依次选取每个空间范围区域分数最高的block,被选过的block所在的服务器对应的其他block优先级将降低,选取block_11,block_23,block_32,block_42四个block的id返回给发送请求的程序,运行程序对这四个block的数据进行处理,使不同服务器的之间负载均衡,将程序的执行结果返回。
下面结合附图,对本发明的实施例四进行说明。
本发明实施例提供了一种数据存储计算系统,该系统的结构如图10所示,包括:
数据收集模块1001,用于对海量数据进行日志收集并预处理;
日志分类模块1002,用于对预处理后的日志进行多维度日志分类;
数据打包模块1003,用于根据分布式系统Block的大小,将分类后的日志数据打包,所述Block为分布式文件系统的最小存储单位;
索引建立模块1004,用于在所述Block上存储数据,建立数据空间索引;
负载均衡模块1005,用于利用所述数据空间索引,维护分布式集群计算资源的负载均衡。
优选的,所述负载均衡模块1005的结构如图11所示,包括:
请求接收单元1101,用于接收用户向分布式系统提交运行程序请求,所述请求中包括需求数据的维度空间范围;
索引单元1102,用于分布式系统通过系统中的空间索引系统获取需要执行的空间区域所对应的所有block原文件及block复本文件;
存储管理器1103,用于集群进行交互得到集群中各个服务器的负载状况,并返回给系统中的计算管理器;
计算管理器1104,用于根据不同服务器的负载情况,计算最优的block的id,并返回给程序请求的对应的block的id,运行程序。
本发明的实施例提供了一种数据存储计算方法和系统,对海量数据进行日志收集并预处理,对预处理后的日志进行多维度日志分类,根据分布式系统Block的大小,将分类后的日志数据打包,所述Block为分布式文件系统的最小存储单位,在所述Block上存储数据,建立数据空间索引,利用所述数据空间索引,维护分布式集群计算资源的负载均衡,实现了数据存储过程中的负载均衡,解决了资源浪费的问题。
本领域普通技术人员可以理解上述实施例的全部或部分步骤可以使用计算机程序流程来实现,所述计算机程序可以存储于一计算机可读存储介质中,所述计算机程序在相应的硬件平台上(如系统、设备、装置、器件等)执行,在执行时,包括方法实施例的步骤之一或其组合。
可选地,上述实施例的全部或部分步骤也可以使用集成电路来实现,这些步骤可以被分别制作成一个个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
上述实施例中的各装置/功能模块/功能单元可以采用通用的计算装置来实现,它们可以集中在单个的计算装置上,也可以分布在多个计算装置所组成的网络上。
上述实施例中的各装置/功能模块/功能单元以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。上述提到的计算机可读取存储介质可以是只读存储器,磁盘或光盘等。
任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求所述的保护范围为准。