本申请涉及计算机技术领域,尤其涉及一种分布式存储方法及装置、数据处理方法及装置。
背景技术:
并行计算与分布式存储成为大数据时代进行数据处理及数据存储的关键技术。在分布式存储中,出于数据可靠性和可用性的考虑,通常采用将同一数据块复制多个副本的方式进行数据存储,也即将同一个数据块的多个副本分布到集群的不同节点上,以此达到负载均衡的目的。
如图1所示,在hadoop分布式文件系统(hadoopdistributedfilesystem,hdfs)中,对于原始的数据块(图中relation表示的数据块),以连续的若干行为一组,将数据块内的数据分成多个行组(rowgroup),对每一个行组中的数据,采用先行后列的方式进行存储。将原始数据块按照5行构成一个行组进行划分,以第一个行组为例,基于行列存储格式(recordcolumnarfile,rcfile),先将原始数据块的第一个行组中的第一列作为存储的第一个行组的第一行的数据,再将原始数据块的第一个行组中的第二列作为存储的第一个行组的第二行的数据,以此类推,最终在rcfile存储格式下原始数据块的一个行组中的每列分别对应rcfile存储格式中的每一行。比如原始数据块的每个行组中有5行4列,对应到rcfile存储格式中就是4行5列,相当于进行行列转置。在rcfile存储格式中每个行组还包括16字节(bytes)的sync,主要作用是作为分割标记,用以分割两个连续的行组。而元数据头(metadataheader)用于存储行组的元数据信息,包括行组中的记录数、每个列的字节数、列中每个域的字节数。
在并行计算映射归约(mapreduce)框架中,将顺序处理数据块中的每个行组。当处理一个行组时,无需读取行组的全部内容到内存,仅仅需要读取metadataheader和给定查询需要的列。这样可以跳过不必要的列以获得列存储的输入/输出(input/output,i/o)优势。例如,表tbl(a,b,c,d)有4个列,做一次查询“selectafromtblwhered=1”,对每个行组,仅需要读取a列和d列的内容,不需要读取其它列的内容,因此可以在一定程度上减少i/o次数,降低数据处理开销,提升应用处理速度。
基于这种存储格式,在进行数据查询时虽然能过滤掉不相关的列的数据,但是对相关列的数据再无进一步过滤。例如,在对表tbl(a,b,c,d)做查询“selectafromtblwhered=1”时,对每个行组,rcfile虽然只需要读取a列和d列的内容,但读取的数据中还是存在大量不相关数据,比如d列中不满足d=1的域。在rcfile存储格式下,同一数据块的多个副本是同构的,也即同一数据块的多个副本的内容具有完全一致的布局。在这种存储方式下,在对一个数据块进行数据处理时,选择其中任何一个副本进行处理的数据处理开销都是相同的,不存在某个副本能够达到降低计算处理开销、加速应用处理的效果。
可见,分布式系统的数据处理性能需进一步提高。
技术实现要素:
本申请实施例提供一种分布式存储方法及装置、数据处理方法及装置,用以减少分布式系统中的i/o次数、降低计算处理开销、加速应用处理。
本申请实施例提供一种分布式存储方法,包括:
针对数据文件中每个数据块的m个副本,按照m种属性信息对所述m个副本中的各条数据记录分别进行排序;其中,同一数据块的不同的副本所对应的用于排序的属性信息不同;m为大于1的正整数;
将所述数据文件中每个数据块的m个排序后的副本存储在m个数据节点 中;其中,同一数据块的不同的副本存储在不同的数据节点中。
该方法对数据块的每个副本中的数据按照对应的属性进行全局排序可以缩小在该副本的每个行组(rowgroup)中属性的域的取值范围,这个范围越小,越能快速定位到该行组中是否有符合要求的数据,从而达到减少i/o次数、加速应用处理、降低应用处理开销的目标。
可选地,将数据文件中每个数据块的m个副本存储在m个数据节点中,具体包括:
将数据文件中按相同属性信息排序的不同数据块的副本均匀存储在不同的数据节点中。
上述将按相同属性信息排序的不同数据块的副本均匀存储在不同的数据节点中的方式,可以避免数据文件中按相同属性信息布局的三个数据块都集中在一个数据节点,造成该数据节点成为应用的瓶颈而造成计算负载不均衡的情况。
可选地,上述方法还包括:
为所述副本中的每个行组添加索引信息,所述索引信息包括取值范围和/或排序方式指示位;所述数值范围包括用于排序的属性信息对应的域的取值范围,和/或没有用于排序的属性信息对应的域的取值范围。
采用这种添加索引的方式,可以实现精确过滤无关数据,快速定位数据,减少i/o次数。
可选地,上述方法还包括:
按照预设的时间长度,统计每种属性信息的引用次数;
按照每种属性信息的引用次数,调整用于排序的m种属性信息;
按照调整后的属性信息,对所述m个数据节点中每个数据块的各条数据记录的排列顺序进行调整。
采用这种方式,在每次进行数据处理时,分布式存储系统可以根据应用程序对不同属性的引用情况,选择最佳匹配的副本进行数据处理,从而达到快速 定位数据、减少i/o次数、加速应用处理、降低应用处理开销的目标。
可选地,按照每种属性信息的引用次数,调整用于排序的m种属性信息,包括:
按照每种属性信息的引用次数,以及每种属性信息被引用的时间点信息,调整用于排序的m种属性信息。
通过上述方式,可以识别出引用时间局部性最佳的m种属性信息。
可选地,上述方法还包括:
在接收到数据访问请求后,根据所述数据访问请求所引用的属性信息,确定按照该属性信息进行排序的数据块的副本;
调度所述副本所在的数据节点处理所述数据访问请求。
相应地,本申请实施例还一种数据处理方法,用于数据节点的数据处理,包括:
接收包含数据位置信息的数据访问请求处理任务;所述数据位置信息用于指示待处理的数据块的副本;
根据在所述副本中按照属性信息排序后的各个域的取值,从所述副本中读取客户端请求的数据;
将读取的数据发送给客户端。
可选地,根据在所述副本中按照属性信息排序后的各个域的取值,从所述副本中读取客户端请求的数据,包括:
针对所述副本中的每个行组,根据该行组的索引信息,判断该行组中是否存在客户端请求的数据;所述索引信息包括取值范围和/或排序方式指示位;所述数值范围包括用于排序的属性信息对应的域的取值范围;
若存在,则根据在该行组中按照属性信息排序后的各个域的取值,从该行组中读取客户端请求的数据。
基于本申请实施例提供的上述数据存储及数据处理方式,在接收到客户端的数据访问请求后,可以识别出应用引用的属性,然后分布式存储系统根据识 别出的属性选择按此属性排序布局的副本给应用处理。在应用处理过程中,可以利用数据块内的索引信息过滤掉无关数据,只读取符合要求的数据,从而需要载入的数据量可以大大减少,进而减少i/o操作,同时也减少了对内存的消耗。另外,由于数据已经在分布式存储系统中经过了过滤操作,从而无需cpu再执行数据过滤的操作,也降低了cpu的开销,同时数据的有序性也会减少部分有排序要求的应用对cpu资源的消耗。
本申请实施例还提供一种数据处理方法,该方法的有益效果参见上述分布式存储方法中的说明,这里不再赘述,该数据处理方法包括:
接收对数据文件的数据访问请求;
根据所述数据访问请求所引用的属性信息,确定按照该属性信息进行数据排序的所述数据文件中每个数据块的副本;
调度每个所述副本所在的数据节点处理所述数据访问请求。
可选地,根据以下步骤对所述数据文件中每个数据块的副本进行数据排序及存储:
针对数据文件中每个数据块的m个副本,按照m种属性信息对所述m个副本中的各条数据记录分别进行排序;其中,同一数据块的不同的副本所对应的用于排序的属性信息不同;m为大于1的正整数;
将所述数据文件中每个数据块的m个副本存储在m个数据节点中;其中,同一数据块的不同的副本存储在不同的数据节点上。
可选地,所述将所述数据文件中每个数据块的m个副本存储在m个数据节点中,包括:
将所述数据文件中按相同属性信息排序的不同数据块的副本均匀存储在不同的数据节点中。
可选地,所述方法还包括:
为所述副本中的每个行组添加索引信息,所述索引信息包括数值范围和/或排序方式指示位。
可选地,所述方法还包括:
按照预设的周期,统计每种属性信息的引用热度;
按照每种属性信息的引用热度,调整用于排序的m种属性信息;
按照调整后的属性信息,对所述m个数据节点中每个数据块的各条数据记录的排列顺序进行调整。
可选地,按照每种属性信息的引用次数,调整用于排序的m种属性信息,包括:
按照每种属性信息的引用次数,以及每种属性信息被引用的时间点信息,调整用于排序的m种属性信息。
本申请实施例提供一种分布式存储装置,包括:
排序模块,用于针对数据文件中每个数据块的m个副本,按照m种属性信息对所述m个副本中的各条数据记录分别进行排序;其中,同一数据块的不同的副本所对应的用于排序的属性信息不同;m为大于1的正整数;
存储模块,用于将所述数据文件中每个数据块的m个由所述排序模块排序后的副本存储在m个数据节点中;其中,同一数据块的不同的副本存储在不同的数据节点中。
该装置对数据块中的数据按照对应的属性进行全局排序可以缩小rcfile存储格式中每个行组中属性的域的取值范围,这个范围越小,越能快速定位到该行组中是否有符合要求的数据,从而达到减少i/o次数、加速应用处理、降低应用处理开销的目标。
可选地,存储模块具体用于:
将数据文件中按相同属性信息排序的不同数据块的副本均匀存储在不同的数据节点中。
上述将按相同属性信息排序的不同数据块的副本均匀存储在不同的数据节点中的方式,可以避免数据文件中按相同属性信息布局的三个数据块都集中在一个数据节点,造成该数据节点成为应用的瓶颈而造成计算负载不均衡的情 况。
可选地,存储模块还用于:
为所述副本中的每个行组添加索引信息,所述索引信息包括取值范围和/或排序方式指示位;所述数值范围包括用于排序的属性信息对应的域的取值范围,和/或没有用于排序的属性信息对应的域的取值范围。
采用这种添加索引的方式,可以实现精确过滤无关数据,快速定位数据,减少i/o次数。
可选地,排序模块还用于:
按照预设的时间长度,统计每种属性信息的引用次数;按照每种属性信息的引用次数,调整用于排序的m种属性信息;按照调整后的属性信息,对所述m个数据节点中每个数据块的各条数据记录的排列顺序进行调整。
采用这种方式,在每次进行数据处理时,分布式存储系统可以根据应用程序对不同属性的引用情况,选择最佳匹配的副本进行数据处理,从而达到快速定位数据、减少i/o次数、加速应用处理、降低应用处理开销的目标。
可选地,排序模块具体用于:
按照每种属性信息的引用次数,以及每种属性信息被引用的时间点信息,调整用于排序的m种属性信息。
通过上述方式,可以识别出引用时间局部性最佳的m种属性信息。
可选地,所述装置还包括:
处理模块,用于在接收到数据访问请求后,根据所述数据访问请求所引用的属性信息,确定按照该属性信息进行排序的数据块的副本;调度所述副本所在的数据节点处理所述数据访问请求。
本申请实施例提供一种数据处理装置,包括:
接收模块,用于接收对数据文件的数据访问请求;
确定模块,用于根据所述接收模块接收的数据访问请求所引用的属性信息,确定按照该属性信息进行数据排序的所述数据文件中每个数据块的副本;
调度模块,用于调度所述确定模块确定的每个所述副本所在的数据节点处理所述数据访问请求。
可选地,所述装置还包括:
排序模块,用于针对数据文件中每个数据块的m个副本,按照m种属性信息对所述m个副本中的各条数据记录分别进行排序;其中,同一数据块的不同的副本所对应的用于排序的属性信息不同;m为大于1的正整数;
存储模块,用于将所述数据文件中每个数据块的m个由排序模块排序后的副本存储在m个数据节点中;其中,同一数据块的不同的副本存储在不同的数据节点上。
可选地,存储模块具体用于:
将所述数据文件中按相同属性信息排序的不同数据块的副本均匀存储在不同的数据节点中。
可选地,存储模块还用于:
为所述副本中的每个行组添加索引信息,所述索引信息包括数值范围和/或排序方式指示位。
可选地,排序模块还用于:
按照预设的周期,统计每种属性信息的引用热度;
按照每种属性信息的引用热度,调整用于排序的m种属性信息;
按照调整后的属性信息,对所述m个数据节点中每个数据块的各条数据记录的排列顺序进行调整。
可选地,排序模块具体用于:
按照每种属性信息的引用次数,以及每种属性信息被引用的时间点信息,调整用于排序的m种属性信息。
相应地,本申请实施例提供一种数据处理装置,可部署在每个数据节点中,包括:
接收模块,用于接收包含数据位置信息的数据访问请求处理任务;所述数 据位置信息用于指示待处理的数据块的副本;
读取模块,用于根据在所述副本中按照属性信息排序后的各个域的取值,从所述副本中读取客户端请求的数据;
发送模块,用于将所述读取模块读取的数据发送给客户端。
可选地,所述读取模块具体用于:
针对所述副本中的每个行组,根据该行组的索引信息,判断该行组中是否存在客户端请求的数据;所述索引信息包括取值范围和/或排序方式指示位;所述数值范围包括用于排序的属性信息对应的域的取值范围;若存在,则根据在该行组中按照属性信息排序后的各个域的取值,从该行组中读取客户端请求的数据。
基于本申请实施例提供的上述进行数据存储及数据处理的装置,在接收到客户端的数据访问请求后,可以识别出应用引用的属性,然后分布式存储系统根据识别出的属性选择按此属性排序布局的副本给应用处理。在应用处理过程中,可以利用数据块内的索引信息过滤掉无关数据,只读取符合要求的数据,从而需要载入的数据量可以大大减少,进而减少i/o操作,同时也减少了对内存的消耗。另外,由于数据已经在分布式存储系统中经过了过滤操作,从而无需cpu再执行数据过滤的操作,也降低了cpu的开销,同时数据的有序性也会减少部分有排序要求的应用对cpu资源的消耗。
附图说明
图1为rcfile存储格式示意图;
图2(a)为本申请实施例提供的分布式存储及数据处理方法流程图;
图2(b)为每个数据节点处理被分配的数据访问请求处理任务的流程图;
图3(a)是原始的数据块示意图;
图3(b)是原始数据块按照属性b进行升序排列后的数据块;
图3(c)中是将原始数据块分别按不同属性排序后的示意图;
图4(a)是node#1中数据存储结构示意图;
图4(b)是node#2中数据存储结构示意图;
图4(c)是node#3中数据存储结构示意图;
图5为在行组的元数据头中增加索引信息的示意图;
图6为基于时间戳和时间窗进行属性引用计数的示意图;
图7为hadoophive的原始查询处理流程;
图8为加入了本申请方案的hadoophive的查询处理流程;
图9为本申请实施例的分布式存储装置90结构示意图;
图10为本申请实施例提供的数据处理装置100结构示意图;
图11为本申请实施例提供的一种数据处理装置110结构示意图;
图12为本申请实施例提供的分布式存储设备120结构示意图;
图13为本申请实施例提供的数据处理设备130结构示意图;
图14为本申请实施例提供的数据处理设备140结构示意图。
具体实施方式
在传统的rcfile存储格式下,同一数据块的多个副本是同构的,也即同一数据块的多个副本的内容具有完全一致的布局。在这种存储方式下,在对一个数据块进行数据处理时,选择其中任何一个副本进行处理的数据处理开销都是相同的,不存在某个副本能够达到降低计算处理开销、加速应用处理的效果。
基于此,本申请实施例提出了对数据块的副本进行异构布局以加速数据处理的方法:在各个副本内分别按照不同的属性(包括独立属性和由两个以上独立属性组成的合成属性)进行排序(也即针对每个副本按照在某个属性下的各个域的取值进行排序),构成数据布局各异的副本。在部署好异构副本后,分布式存储系统可以根据应用程序对不同属性的引用情况,选择最佳匹配的副本进行数据处理,从而达到快速定位数据、减少i/o次数、加速应用处理、降低应用处理开销的目标。
下面结合说明书附图对本申请实施例作进一步详细描述。
本申请实施例的方法应用于分布式存储系统中,如图2(a)所示,为本申请实施例提供的分布式存储及数据处理方法流程图,包括以下步骤:
s201:针对数据文件中每个数据块的m个副本,按照m种属性信息对所述m个副本中的各条数据记录分别进行排序;其中,同一数据块的不同的副本所对应的用于排序的属性信息不同;m为大于1的正整数。
这里,将同一数据块的不同副本分别按照在对应属性下的各个域的取值进行排序,也即该数据块的每个副本对应一个用于排序的属性。
需要说明的是,本申请实施例中的属性可以包括单一属性(例如对于格式化数据,对应原始数据的一个列,对于非格式化数据,如文本的记录中以分隔符分割的区段),也可以包括合成属性(例如原始数据的两个或两个以上的列的组合)。
如图3(a)~(c)所示,为本申请基于rcfile存储格式的异构副本的实现过程。图3(a)是原始的数据块,也就是未经过任何预处理的数据块;图3(b)是原始数据块按照属性b进行升序排列后的数据块;图3(c)中最左侧的数据块是将图3(b)再按照rcfile格式转存得到的数据块,中间及右侧两个数据块是将原始数据块分别按属性c降序和属性e升序排序后,再按照rcfile格式转存得到的。这样,就得到了原始数据块的三个布局各异的副本,每个副本分别按照属性b、属性c、属性e排序。
这里,在将数据按照rcfile格式转存之前对数据块的每个副本中的数据按照该副本对应的属性进行全局排序的目的是进一步缩小数据块的每个行组(rowgroup)中属性的域的取值范围,这个范围越小,越能快速定位到该行组中是否有符合要求的数据,从而达到减少i/o次数、加速应用处理、降低应用处理开销的目标。
s202:将所述数据文件中每个数据块的m个排序后的副本存储在m个数据节点中;其中,同一数据块的不同的副本存储在不同的数据节点中。
这里,将每个数据块的各个副本分别部署在不同的数据节点上,以实现负载均衡。
作为一种优选的实施方式,s202中,将所述数据文件中每个数据块的m个副本存储在m个数据节点中,包括:将所述数据文件中按相同属性信息排序的不同数据块的副本均匀存储在不同的数据节点中。
这里,每个数据节点中存储有所述数据文件的n个数据块的副本,不同数据节点存储的n个副本对应的用于排序的属性信息的数量相同。如图4(a)~(c)所示,标有不同底纹的数据块在集群中3个节点上的均匀分布。
图4(a)~(c)中node#1、node#2、node#3分别表示集群中的3个数据节点,datablock1、datablock2、datablock3分别表示一个数据文件的3个数据块,3个数据节点上的datablock1、datablock2和datablock3为数据文件的三个数据块,每个数据块分别有3个异构的副本。从图4(a)~(c)可见,datablock1、datablock2、和datablock3的按照相同属性布局的副本(如按b列排序并进行rcfile格式转存的三个数据块的副本)均匀分分布到3个数据节点中。
上述将按相同属性信息排序的不同数据块的副本均匀存储在不同的数据节点中的方式,可以避免数据文件中按相同属性信息布局的三个数据块都集中在一个数据节点,造成该数据节点成为应用的瓶颈而造成计算负载不均衡的情况。比如,如果不采用将按相同属性信息排序的不同数据块的副本均匀存储在不同的数据节点中的方式,可能会出现图4中node#1中的datablock2、node#2中的datablock1、和node#3中的datablock3存储在一个数据节点上(比如都存储在node#1),那么如果应用引用属性c的话,对数据文件的3个数据块的访问都将集中到一个数据节点上(比如node#1),该数据节点就会成为应用的瓶颈,造成负载不均衡。
作为另一种优选的实施方式,为了进一步快速定位到该行组中是否有符合要求的数据,可以为所述副本中的每个行组添加索引信息,所述索引信息包括 取值范围和/或排序方式指示位;所述数值范围包括用于排序的属性信息对应的域的取值范围,和/或没有用于排序的属性信息对应的域的取值范围。
如图5所示,可以在行组的元数据头(metadataheader)中增加索引信息(图5中右侧最下方的两种信息:行组中排序的属性信息对应的域的取值范围与升序/降序排列指示位,比如用1表示升序排列,用0表示降序排列)。采用排序的属性信息对应的域的取值范围可以快速定位行组中是否有符合条件的数据,而升序/降序排列指示位可以快速定位符合条件的数据在行组中的偏移。除此之外,metadataheader的索引信息还可以包括行组对应的没有用于排序的属性信息对应的域的取值范围,这样,对于一个对没有用于排序的属性信息的引用查询,也能粗粒度判断行组中是否有符合条件的数据。
可见,采用这种添加索引的方式,可以实现精确过滤无关数据,快速定位数据,减少i/o次数。
在具体实施中,初始用于排序的属性可以是随机选择的。应用对数据属性的引用可能是随时间发生改变的,例如在第一个时间段内,应用主要引用a、b、c三个属性,而在第二个时间段内,应用主要引用数据的b、c、d三个属性或者e、f、g三个属性。为了达到基于三个异构副本的最优化应用处理效果,就需要在第二个时间段内将数据块的副本按照属性b、c、d或者e、f、g排序后重新布局。
因此,作为一种优选的实施方式,所述方法还包括:
按照预设的时间长度,统计每种属性信息的引用次数;
按照每种属性信息的引用次数,调整用于排序的m种属性信息;
按照调整后的属性信息,对所述m个数据节点中每个数据块的各条数据记录的排列顺序进行调整。
如图6所示,可以基于时间戳(timestamp)和时间窗进行属性引用计数。时间戳(图中timestamptmin~timestamptmax)用于标记每种属性的具体引用时刻,每个时间戳表示对应时间点有应用对该属性进行了引用。时间窗tw是 一个可配置的预定义的时间长度,也就是最大时间戳tmax与最小时间戳tmin的时间间隔不大于时间窗tw。
本申请实施例中对属性的引用热度进行识别,并对副本的布局进行动态重组的具体实施过程可以为:
首先确定进行引用热度统计的属性。这里的属性可以包括单一属性(比如对应原始数据的一个列)和/或合成属性(比如对应原始数据的两个或两个以上的列的组合)。然后,基于时间戳和时间窗对属性引用进行计数。
在按照每种属性信息的引用次数调整用于排序的m种属性信息时,可以将引用次数最多的前m种属性信息(也即按引用次数由多到少排列后的前m名)确定为调整后的用于排序的m种属性信息。
若无法确定出引用次数最多的前m种属性信息,比如存在引用次数最多的前k1+k2(k1+k2>m,k1<m)种属性信息,其中k2种属性信息的引用次数相同。针对这k2种属性信息,此时可以按照每种属性信息的引用次数,以及每种属性信息被引用的时间点信息,确定用于排序的m种属性信息。比如,情况一:若在这k2种属性信息中,存在m-k1种属性信息在时间窗tw范围内,位于时间窗后半段的时间戳记录条数占比超过位于时间窗前半段的时间戳记录条数占比,则将存在的该m-k1种属性信息以及所述前k1种属性信息选择为所述m种用于排序的属性信息。或者,情况二:若存在m-k1种属性信息在时间窗tw范围内,位于时间窗后半段的时间戳记录对应的时间间隔逐渐递减,则将该m-k1种属性信息以及所述前k1种属性信息选择为所述m种用于排序的属性信息。或者,结合上述两种情况,在这k2种属性信息中优先选择符合情况一的属性信息,若选择出来的属性信息不足m-k1种,再选择符合情况二的属性信息。
除此之外,还可以在这k2种属性信息中,随机选择m-k1种属性信息,与所述前k1种属性信息一起作为所述m种用于排序的属性信息。
上述方式仅是识别属性引用热度的一些具体实现方式,本领域技术人员在 本申请思想的指导下,所实施的任何通过对数据属性计数来识别属性引用热度,并基于识别结果触发后台进程进行副本重组的方式都在本申请保护范围内。
通过上述方式,就可以识别出在时间窗tw内引用时间局部性最佳的m种属性。如果现有异构副本中用于排序的属性不属于当前识别出来的m种属性中的一种,则对其进行排序重组。比如,若在当前识别出来的引用热度最佳的m种属性中,有l种被用于现有的异构副本的排序,有m-l种没有被用于排序,则将现有的用于排序的除所述l种之外的m-l种属性替换为调整后的m-l种属性进行重新排序。在具体实施中,可以依次选择现有布局中引用热度最低的属性所对应的副本,按照新识别出来的所述m-l种属性的引用热度从高到底的顺序,启动后台进程对副本进行动态重组。这样可以最大可能地保留属性引用时间局部性最佳的m种副本。
在上述实施方式中,基于时间戳和时间窗对属性进行引用计数,识别出引用最热的m种属性,并基于识别结果实时对各个副本进行布局重组,一次调整排序后可以用于多次数据处理,实现一次计算多次服务。在每次进行数据处理时,分布式存储系统可以根据应用程序对不同属性的引用情况,选择最佳匹配的副本进行数据处理,从而达到快速定位数据、减少i/o次数、加速应用处理、降低应用处理开销的目标。
s203:在接收到数据访问请求后,根据所述数据访问请求所引用的属性信息,确定按照该属性信息进行排序的数据块的副本,调度所述副本所在的数据节点处理所述数据访问请求。
如图2(b)所示,每个数据节点可以基于以下步骤处理被分配的数据访问请求处理任务:
s2a:接收包含数据位置信息的数据访问请求处理任务;所述数据位置信息用于指示待处理的数据块的副本;
s2b:根据在所述副本中按照属性信息排序后的各个域的取值,从所述副 本中读取客户端请求的数据;
s2c:将读取的数据发送给客户端。
对应在数据存储时为每个行组添加索引信息的步骤,s2b具体可以包括:
针对所述副本中的每个行组,根据该行组的索引信息,判断该行组中是否存在客户端请求的数据;所述索引信息包括取值范围和/或排序方式指示位;所述数值范围包括用于排序的属性信息对应的域的取值范围;
若存在,则根据在该行组中按照属性信息排序后的各个域的取值,从该行组中读取客户端请求的数据。
另外,所述索引信息还可以包含没有用于排序的属性信息所对应的域的取值范围。如果所述待处理的数据块的副本没有按照客户端请求查询的引用属性进行排序,则可以按照行组的索引信息中包含的没有用于排序的属性信息所对应的域的取值范围来判断该行组中是否有需要读取的数据。
基本申请实施例提供的上述数据存储及数据处理方式,在接收到客户端的数据访问请求后,可以识别出应用引用的属性,然后分布式存储系统根据识别出的属性选择按此属性排序布局的副本给应用处理。在应用处理过程中,可以利用数据块内的索引信息过滤掉无关数据,只读取符合要求的数据,从而需要载入的数据量可以大大减少,进而减少i/o操作,同时也减少了对内存的消耗。另外,由于数据已经在分布式存储系统中经过了过滤操作,从而无需cpu再执行数据过滤的操作,也降低了cpu的开销,同时数据的有序性也会减少部分有排序要求的应用对cpu资源的消耗。
本申请方案在hadoophive查询下的具体实现:
准备工作:客户端提交数据写入请求,分布式存储系统中的写入进程将数据文件的m个副本写入到m个数据节点中,也即每个数据节点中被写入数据文件的一个副本(具体包括该数据文件的n个数据块中每个数据块的m个副本)。针对数据文件中每个数据块的m个副本,按照m种属性信息对m个副本中的各条数据记录分别进行排序(这里同一数据块的不同的副本所对应的用 于排序的属性信息不同),并将排序后的副本存储在各自的数据节点中。
如图7所示,为hadoophive的原始查询处理流程,包括以下步骤:
步骤一:客户端提交数据访问请求(比如请求查询“selectafromtblwhered=1”)。
步骤二:hive的驱动(driver)层解析查询语句,转换为mapreducejob提交给hadoop的jt/am。这里,jt全称jobtracker,为hadoop1.0版本中job调度管理组件,am全称applicationmaster,为hadoop2.0版本中job调度管理组件。
步骤三:jt/am向nn请求数据位置信息。这里,nn全称namenode,为hdfs文件系统数据管理组件。
步骤四:nn返回数据位置信息给jt/am。
步骤五:jt/am将数据访问请求处理任务(task)调度到所述数据位置信息对应的数据节点(datanode,dn)上执行。图7中,tt全称tasktracker,为hadoop1.0版本中的task调度管理组件,nm全称nodemanager,为hadoop2.0版本中的task调度管理组件。
如图8所示,为加入了本申请方案的hadoophive的查询处理流程,右侧有底纹的新增模块是本申请的核心模块,具体地,在应用的驱动层(这里是hive的驱动层)新增一个识别查询中的引用属性的模块:识别模块(recongnition);在hdfs文件系统的nn中新增一个识别判断模块(identification),用于判断在异构副本中,是否有采用应用驱动层的recongition识别到的引用属性组织布局的副本;在nn中还新增一个判断是否要启动后台进程进行副本布局动态重组的模块:动态重组模块(dynamicreorganizition),该模块记录应用对数据的各个属性的引用情况,在需要进行副本布局调整时,对副本布局进行动态重组。具体地,在采用本申请方案后,hadoophive的处理流程可以包括以下步骤:
步骤一:客户端提交针对某个数据文件的数据访问请求(具体为查询请 求)。
步骤二:hive的driver层解析查询语句,新增的recognition模块识别查询引用的属性信息。
步骤三:hive将查询语句转换为带有属性引用信息的mapreducejob提交给hadoop的jt/am。
步骤四:jt/am向nn请求数据位置信息,请求中附带查询引用属性。
步骤五:nn中的identification模块根据jt/am提交的查询引用属性确定最终选择的每个数据块的副本。
步骤六:nn返回每个副本的数据位置信息给jt/am。
步骤七:jt/am将查询任务调度到每个副本的数据位置信息对应的数据节点上执行。
步骤八(执行顺序不受限制):nn中的dynamicreorganizition模块根据历史查询对各个属性的引用情况实时触发副本布局动态重组。
在采用本申请方案的hadoophive的查询处理过程中,如果识别到跟应用引用属性匹配的副本,那么对数据的处理任务就调度到匹配的副本对应的数据节点上执行,在每个数据节点上,可以根据副本中各条数据记录按照引用属性的排列顺序,并结合行组中的索引信息进行数据查询,从而可以最小化i/o次数,最小化资源消耗,降低数据处理开销,提升应用处理速度。
基于同一发明构思,本申请实施例中还提供了一种与分布式存储及数据处理方法对应的分布式存储装置及数据处理装置,由于本申请装置解决问题的原理与上述方法实施例相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
如图9所示,对应上述分布式存储方法,本申请实施例提供一种分布式存储装置90,包括:
排序模块91,用于针对数据文件中每个数据块的m个副本,按照m种属性信息对所述m个副本中的各条数据记录分别进行排序;其中,同一数据块 的不同的副本所对应的用于排序的属性信息不同;m为大于1的正整数;
存储模块92,用于将所述数据文件中每个数据块的m个由排序模块91排序后的副本存储在m个数据节点中;其中,同一数据块的不同的副本存储在不同的数据节点中。
可选地,存储模块92具体用于:
将所述数据文件中按相同属性信息排序的不同数据块的副本均匀存储在不同的数据节点中。
可选地,存储模块92还用于:
为所述副本中的每个行组添加索引信息,所述索引信息包括取值范围和/或排序方式指示位;所述数值范围包括用于排序的属性信息对应的域的取值范围,和/或没有用于排序的属性信息对应的域的取值范围。
可选地,排序模块91还用于:
按照预设的时间长度,统计每种属性信息的引用次数;按照每种属性信息的引用次数,调整用于排序的m种属性信息;按照调整后的属性信息,对所述m个数据节点中每个数据块的各条数据记录的排列顺序进行调整。
可选地,排序模块91具体用于:
按照每种属性信息的引用次数,以及每种属性信息被引用的时间点信息,调整用于排序的m种属性信息。
可选地,所述装置还包括:
处理模块93,用于在接收到数据访问请求后,根据所述数据访问请求所引用的属性信息,确定按照该属性信息进行排序的数据块的副本;调度所述副本所在的数据节点处理所述数据访问请求。
如图10所示,对应上述调度数据节点进行数据处理的数据处理方法,本申请另一实施例提供一种数据处理装置100,包括:
接收模块101,用于接收对数据文件的数据访问请求;
确定模块102,用于根据接收模块101接收的数据访问请求所引用的属性 信息,确定按照该属性信息进行数据排序的所述数据文件中每个数据块的副本;
调度模块103,用于调度确定模块102确定的每个所述副本所在的数据节点处理所述数据访问请求。
可选地,所述装置还包括:
排序模块104,用于针对数据文件中每个数据块的m个副本,按照m种属性信息对所述m个副本中的各条数据记录分别进行排序;其中,同一数据块的不同的副本所对应的用于排序的属性信息不同;m为大于1的正整数;
存储模块105,用于将所述数据文件中每个数据块的m个由排序模块排序后的副本存储在m个数据节点中;其中,同一数据块的不同的副本存储在不同的数据节点上。
可选地,存储模块105具体用于:
将所述数据文件中按相同属性信息排序的不同数据块的副本均匀存储在不同的数据节点中。
可选地,存储模块105还用于:
为所述副本中的每个行组添加索引信息,所述索引信息包括数值范围和/或排序方式指示位。
可选地,排序模块104还用于:
按照预设的周期,统计每种属性信息的引用热度;
按照每种属性信息的引用热度,调整用于排序的m种属性信息;
按照调整后的属性信息,对所述m个数据节点中每个数据块的各条数据记录的排列顺序进行调整。
可选地,排序模块104具体用于:
按照每种属性信息的引用次数,以及每种属性信息被引用的时间点信息,调整用于排序的m种属性信息。
如图11所示,对应上述每个数据节点进行数据处理的数据处理方法,本 申请另一实施例提供一种数据处理装置110,包括:
接收模块111,用于接收包含数据位置信息的数据访问请求处理任务;所述数据位置信息用于指示待处理的数据块的副本;
读取模块112,用于根据在所述副本中按照属性信息排序后的各个域的取值,从所述副本中读取客户端请求的数据;
发送模块113,用于将读取模块112读取的数据发送给客户端。
可选地,读取模块112具体用于:
针对所述副本中的每个行组,根据该行组的索引信息,判断该行组中是否存在客户端请求的数据;所述索引信息包括取值范围和/或排序方式指示位;所述数值范围包括用于排序的属性信息对应的域的取值范围;若存在,则根据在该行组中按照属性信息排序后的各个域的取值,从该行组中读取客户端请求的数据。
如图12所示,本申请实施例提供一种分布式存储设备120,包括处理器121、存储器122、和总线123;存储器122用于存储执行指令,包括内存122a和外部存储器122b;这里的内存122a也称内存储器,用于暂时存放处理器121中的运算数据,以及与硬盘等外部存储器122b交换的数据,处理器121通过内存122a与外部存储器122b进行数据交换,当所述设备120运行时,所述处理器121与所述存储器122之间通过总线123通信,使得所述处理器121执行以下指令:
针对数据文件中每个数据块的m个副本,按照m种属性信息对所述m个副本中的各条数据记录分别进行排序;其中,同一数据块的不同的副本所对应的用于排序的属性信息不同;m为大于1的正整数;
将所述数据文件中每个数据块的m个排序后的副本存储在m个数据节点中;其中,同一数据块的不同的副本存储在不同的数据节点中。
可选地,处理器121执行的指令中,将所述数据文件中每个数据块的m个排序后的副本存储在m个数据节点中,包括:
将所述数据文件中按相同属性信息排序的不同数据块的副本均匀存储在不同的数据节点中。
可选地,处理器121执行的指令还包括:
为所述副本中的每个行组添加索引信息,所述索引信息包括取值范围和/或排序方式指示位;所述数值范围包括用于排序的属性信息对应的域的取值范围,和/或没有用于排序的属性信息对应的域的取值范围。
可选地,处理器121执行的指令还包括:
按照预设的时间长度,统计每种属性信息的引用次数;
按照每种属性信息的引用次数,调整用于排序的m种属性信息;
按照调整后的属性信息,对所述m个数据节点中每个数据块的各条数据记录的排列顺序进行调整。
可选地,处理器121执行的指令中,按照每种属性信息的引用次数,调整用于排序的m种属性信息,包括:
按照每种属性信息的引用次数,以及每种属性信息被引用的时间点信息,调整用于排序的m种属性信息。
可选地,处理器121执行的指令还包括:
在接收到数据访问请求后,根据所述数据访问请求所引用的属性信息,确定按照该属性信息进行排序的数据块的副本;
调度所述副本所在的数据节点处理所述数据访问请求。
如图13所示,本申请实施例提供一种数据处理设备130,包括处理器131、存储器132、和总线133;存储器132用于存储执行指令,包括内存132a和外部存储器132b;这里的内存132a也称内存储器,用于暂时存放处理器131中的运算数据,以及与硬盘等外部存储器132b交换的数据,处理器131通过内存132a与外部存储器132b进行数据交换,当所述设备130运行时,所述处理器131与所述存储器132之间通过总线133通信,使得所述处理器131执行以下指令:
接收对数据文件的数据访问请求;
根据所述数据访问请求所引用的属性信息,确定按照该属性信息进行数据排序的所述数据文件中每个数据块的副本;
调度每个所述副本所在的数据节点处理所述数据访问请求。
可选地,处理器131执行的执行指令还包括:
针对数据文件中每个数据块的m个副本,按照m种属性信息对所述m个副本中的各条数据记录分别进行排序;其中,同一数据块的不同的副本所对应的用于排序的属性信息不同;m为大于1的正整数;
将所述数据文件中每个数据块的m个副本存储在m个数据节点中;其中,同一数据块的不同的副本存储在不同的数据节点上。
可选地,处理器131执行的执行指令中,将所述数据文件中每个数据块的m个副本存储在m个数据节点中,包括:
将所述数据文件中按相同属性信息排序的不同数据块的副本均匀存储在不同的数据节点中。
可选地,处理器131执行的执行指令还包括:
为所述副本中的每个行组添加索引信息,所述索引信息包括数值范围和/或排序方式指示位。
可选地,处理器131执行的执行指令还包括:
按照预设的周期,统计每种属性信息的引用热度;
按照每种属性信息的引用热度,调整用于排序的m种属性信息;
按照调整后的属性信息,对所述m个数据节点中每个数据块的各条数据记录的排列顺序进行调整。
可选地,处理器131执行的执行指令中,按照每种属性信息的引用次数,调整用于排序的m种属性信息,包括:
按照每种属性信息的引用次数,以及每种属性信息被引用的时间点信息,调整用于排序的m种属性信息。
如图14所示,本申请另一实施例提供一种数据处理设备140,包括处理器141、存储器142、和总线143;存储器142用于存储执行指令,包括内存142a和外部存储器142b;这里的内存142a也称内存储器,用于暂时存放处理器141中的运算数据,以及与硬盘等外部存储器142b交换的数据,处理器141通过内存142a与外部存储器142b进行数据交换,当所述设备140运行时,所述处理器141与所述存储器142之间通过总线143通信,使得所述处理器141执行以下指令:
接收包含数据位置信息的数据访问请求处理任务;所述数据位置信息用于指示待处理的数据块的副本;
根据在所述副本中按照属性信息排序后的各个域的取值,从所述副本中读取客户端请求的数据;
将读取的数据发送给客户端。
可选地,处理器141执行的执行指令中,根据在所述副本中按照属性信息排序后的各个域的取值,从所述副本中读取客户端请求的数据,包括:
针对所述副本中的每个行组,根据该行组的索引信息,判断该行组中是否存在客户端请求的数据;所述索引信息包括取值范围和/或排序方式指示位;所述数值范围包括用于排序的属性信息对应的域的取值范围;
若存在,则根据在该行组中按照属性信息排序后的各个域的取值,从该行组中读取客户端请求的数据。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和 /或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。