分布式存储方法和设备与流程

文档序号:11544863阅读:282来源:国知局
分布式存储方法和设备与流程

本发明涉及计算机领域,尤其涉及计算机技术中的分布式存储方法和设备。



背景技术:

分布式计算(hadoop)分布式文件系统(hadoopdistributedfilesystem,简称“hdfs”)是一个以块的形式存储文件的分布式文件系统,其中,名字节点(namenode)用于存储文件的元数据,包括目录树的结构和文件存储的快信息,数据节点(datanode)用于存储数据块。

小文件是指文件的大小小于一个块的大小的文件。hdfs是基于google的谷歌文件系统(googlefilesystem,简称“gfs”)论文设计的,目的是存储大文件。目前,在hdfs中,块大小的默认值128mb,过去旧版本的块大小的默认值是64mb,块大小的趋势是越来越大。然而,hdfs在大量小文件的场景下,并不能很好地工作。

在hdfs中,小文件存储的问题主要是namenode的内存管理问题和映射归约(mapreduce,简称“mr”)的性能问题。

一方面,namenode的内存管理问题具体在于:从经验上来看,hdfsnamenode中的每一个文件,目录和块对象占用的内存大小是150个字节。如果有一千万个文件,每个文件使用的一个块,即每个文件的大小小于一个块,则namenode将使用大约3gb的内存。如果扩大系统规模,就会远远超出这一水平,因而需要硬件支撑和软件优化,带来新的问题。

另外,hdfs不是针对小文件设计的,因而,不能有效地支持访问小文件。hdfs主要是用来输入输出流式的大型文件的访问,读取小文件通常会导致从一个datanode到另一个datanode的大量地查找和检索,是一个低效率的数据访问模式。

另一方面,mr的性能问题具体在于:

mr任务是先执行映射再执行归约,映射的任务数是根据文件数和块数 目综合得来的,如果我们每个文件的大小都小于块大小,那对每个文件都有一个映射任务(task),这样每个task读取的文件大小都很小,造成task的启停时间远远大于task计算执行的时间,造成性能上的退化。

如果将小文件合成大文件,每个映射任务处理一个或多个大文件,则每个task就能处理很多小文件。

因此,综合以上两个方面,在hdfs中,大量存储小文件时,存在名字节点的内存开销过大以及映射归约的计算性能较低的问题。



技术实现要素:

本发明实施例提供了一种分布式存储方法,以解决在文件系统中存储小文件时,名字节点的内存开销大以及映射归约的计算性能较低的问题。

第一方面,本发明实施例提供了一种分布式存储方法,该方法应用于分布式存储系统,系统包括文件系统、第一线程服务和第二线程服务,

第一线程服务按照第一规则将文件系统中的m个小文件离线合并成一个第一文件,小文件小于预定字节,m为大于1的整数;

第一线程服务在离线合并的过程中生成m个元数据,m个元数据用于分别指示m个小文件在第一文件中的位置;

第二线程服务将m个元数据加载到元数据集合中,元数据集合包括任意离线合并过程中产生的元数据;

当第二线程服务接收用户发来的第一指令时,第二线程在元数据集合中查找是否存在第一小文件的元数据,第一指令用于指示对第一小文件进行操作;

若第二线程服务在元数据集合中查找到存在第一小文件的元数据,则执行第一指令对应的操作。

因此,本发明实施例的分布式存储方法,通过第一线程服务和第二线程服务,在文件系统上存储小文件时,能够大幅降低名字节点的内存开销和数据节点的句柄开销,并且能够提高映射归约的计算效率,从而能够提高存储小文件的效率。

可选地,第一指令用于指示对第一小文件进行读取时,方法还包括:

若第二线程服务在元数据集合中没有查找到第一小文件的元数据,第二线程服务向用户返回第一小文件不存在的消息。

因此,本发明实施例的分布式存储方法,第二线程服务接收到读取第一小文件的指示后,在元数据集合中没有查找到第一小文件的元数据,第二线程服务向用户返回第一小文件不存在的消息,能够方便用户使用,提高用户体验。

可选地,第一指令用于指示对第一小文件进行读取时,第二线程服务根据执行第一指令对应的操作包括:第二线程服务读取第一小文件的元数据。

因此,本发明实施例的分布式存储方法,第二线程服务通过读取元数据集合中第一文件的元数据进而读取小文件,能够提高读取文件系统中小文件的速率。

可选地,第一指令用于指示对第一小文件进行创建时,方法还包括:

若元数据集合不包括第一小文件的元数据,第二线程服务在文件系统中创建第一小文件。

因此,本发明实施例的分布式存储方法,第二线程服务接收到创建第一小文件的指示后,在元数据集合中没有查找到第一小文件的元数据时,第二线程服务创建第一小文件,能够减少系统不必要的内存开销,提高存储小文件的效率。

可选地,第一指令用于指示对第一小文件进行创建时,第二线程服务根据执行第一指令对应的操作包括:

向用户发送是否覆盖第一小文件内容的提示;

若用户没有输入是否覆盖第一小文件内容时,第二线程服务向用户返回创建失败的消息。

因此,本发明实施例的分布式存储方法,第二线程服务接在元数据集合中查找到第一小文件的元数据后,且用户没有输入是否覆盖第一小文件内容时,第二线程服务向用户返回创建失败的消息,能够方便用户使用,同时减少系统不必要的内存开销,提高存储小文件的效率。

可选地,第一指令用于指示对第一小文件进行创建时,第二线程服务根据执行第一指令对应的操作还包括:

向用户发送是否覆盖第一小文件内容的提示;

若用户输入要覆盖第一小文件内容时,第二线程服务删除元数据集合中的第一小文件的元数据,重新创建元数据集合中第一小文件的元数据。

因此,本发明实施例的分布式存储方法,第二线程服务接在元数据集合 中查找到第一小文件的元数据后,且用户输入要覆盖第一小文件内容时,第二线程服务重新创建元数据集合中第一小文件的元数据,能够减少系统内存开销,提高存储小文件的效率。

可选地,第一指令用于指示对第一小文件进行创建时,第二线程服务根据执行第一指令对应的操作还包括:

向用户发送是否覆盖第一小文件内容的提示;

若用户输入要覆盖第一小文件内容时,第二线程服务替换元数据集合中第一小文件的元数据。

因此,本发明实施例的分布式存储方法,第二线程服务接在元数据集合中查找到第一小文件的元数据后,且用户输入要覆盖第一小文件内容时,第二线程服务替换元数据集合中第一小文件的元数据,能够减少系统内存开销,提高存储小文件的效率。

可选地,第一指令用于指示对第一小文件进行删除时,方法还包括:

当元数据集合不包括第一小文件的元数据时,第二线程服务删除文件系统中的第一小文件。

因此,本发明实施例的分布式存储方法,第二线程服务接收到删除第一小文件的指示后,在元数据集合中没有查找到第一小文件的元数据,第二线程服务删除第一小文件,能够减少文件系统中冗余数据,提高存储小文件的效率。

可选地,第一指令用于指示对第一小文件进行删除时,第二线程服务根据执行对第一指令对应的操作包括:

当用户有删除第一文件的权限时,第二线程服务删除元数据集合中的第一小文件的元数据。

因此,本发明实施例的分布式存储方法,用户有删除第一文件的权限时,第二线程服务删除元数据集合中的第一小文件的元数据,能够提供一定的用户管理权限,增强用户体验,提高存储小文件的效率。

可选地,在第二线程服务删除元数据集合中的第一小文件元数据后,第二线程服务将删除过程中生成的增量元数据和deletelog加载到文件系统中,deletelog包括删除信息,删除信息用于指示删除第一文件中第一小文件。

因此,本发明实施例的分布式存储方法,第二线程服务将删除过程中生成的增量元数据和deletelog加载到文件系统中,便于后续删除第一文件中小 文件的操作。

可选地,按照第一规则将文件系统中的m个小文件离线合并成一个第一文件,包括:

第一线程服务遍历文件系统中小文件的目录;

第一线程服务按照第二规则将文件系统中所有小文件进行分组;

第一线程服务启动映射归约mr任务,按照第一规则,将每组内至少m个小文件离线合并成一个第一文件;

第一线程服务在离线合并的过程中生成m个元数据,m个元数据用于分别指示m个小文件在第一文件中的位置;

第一线程服务启动检查点(checkpoint)操作,第二线程服务将上述离线合并过程中生成的m个元数据,加载到元数据集合中。

因此,本发明实施例的分布式存储方法,通过第一线程服务和第二线程服务,能够将文件系统中m个小文件离线合并成第一文件,能够大幅降低名字节点的内存开销和数据节点的句柄开销,并且能够提高映射归约的计算效率,从而能够提高存储小文件的效率。

可选地,系统还包括第三线程服务,第三线程服务读取deletelog,并和元数据集合中m个小文件的元数据进行匹配;

若deletelog指示删除第一文件中的n个小文件,删除n个小文件,n为小于m的正整数;

若deletelog指示删除第一文件中的m个小文件,删除第一文件。

因此,本发明实施例的分布式存储方法,通过第三线程服务能够删除第一文件中的无效的小文件或删除第一文件,清除文件系统中的冗余数据,从而提高存储小文件的效率。

可选地,系统还包括第四线程服务,第四线程服务遍历文件系统中小文件的目录,并和元数据集合中元数据进行匹配;

若目录中没有小文件索引到第一文件上,第四线程服务删除第一文件;

若目录中小文件和元数据集合中小文件重名,则调用第二线程服务,删除元数据集合中小文件的元数据;

第四线程服务清除删除过程中生成的增量元数据和deletelog。

因此,本发明实施例的分布式存储方法,通过第四线程服务能够清除系统中的冗余的数据,从而提高存储小文件的效率。

可选地,第一线程服务为离线合并小文件的线程服务,第二线程服务为命名空间的线程服务。

可选地,第三线程服务为离线删除第一文件中小文件的线程服务。

可选地,第四线程服务为清理冗余的线程服务。

可选地,第二规则为按照用户文件权限和用户组文件权限进行分组。

因此,本发明实施例的分布式存储方法,第一线程服务按照第二规则将文件系统中所有小文件按照用户文件权限和用户组文件权限进行分组,能够增强用户权限管理,增强用户体验,提高系统的存储效率。

第二方面,一种分布式存储的设备,其特征在于,包括存储器和处理器以及总线,存储器与处理器通过总线连接通信,存储器存储有程序和指令,处理器调用存储器中的程序和指令,用于执行如第一方面或第一方面的任一可能的实现方式中的方法。

因此,本发明实施例的分布式存储方法和设备,通过第一线程服务和第二线程服务,在文件系统上存储小文件时,能够大幅降低名字节点的内存开销和数据节点的句柄开销,并且能够提高映射归约的计算效率,从而能够提高在文件系统上存储小文件的效率。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例的分布式存储方法的示意性流程图;

图2是本发明实施例的分布式存储系统的示意性架构图;

图3是根据本发明实施例的leveldb的结构示意图;

图4是根据本发明实施例的分布式存储系统的可用性(highavailability,简称“ha”)流程图;

图5是根据本发明实施例的分布式存储系统的另一架构图;

图6是根据本发明实施例的分布式存储方法中离线合并小文件的示意性流程图;

图7是根据本发明实施例的分布式存储方法中目录操作的示意性流程图;

图8是根据本发明实施例的分布式存储方法中读取第一小文件的示意性流程图;

图9是根据本发明实施例的分布式存储方法中删除第一小文件的示意性流程图;

图10是根据本发明实施例的分布式存储方法中删除大文件中小文件的示意性流程图;

图11是根据本发明实施例的分布式存储方法中清除冗余数据的示意性流程图;

图12是根据本发明实施例的分布式存储设备的示意图。

具体实施方式

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

图1是根据本发明实施例的分布式存储方法的示意性流程图,该方法包括s110至s150。如图1所示,该方法应用于分布式存储系统100,系统100包括文件系统120、第一线程服务111和第二线程服务112,

s110,第一线程服务111按照第一规则将文件系统120中的m个小文件离线合并成一个第一文件,小文件小于预定字节,m为大于1的整数;

s120,第一线程服务111在离线合并的过程中生成m个元数据,m个元数据用于分别指示m个小文件在第一文件中的位置;

s130,第二线程服务112将m个元数据加载到元数据集合中,元数据集合包括任意离线合并过程中产生的元数据;

s140,当第二线程服务112接收用户发来的第一指令时,第二线程服务112在元数据集合中查找是否存在第一小文件的元数据,第一指令用于指示对第一小文件进行操作;

s150,若第二线程服务112在元数据集合中查找到存在第一小文件的元数据,则执行第一指令对应的操作。

因此,本发明实施例的分布式存储方法,通过第一线程服务111和第二线程服务112,在文件系统120上存储小文件时,能够大幅降低名字节点的 内存开销和数据节点的句柄开销,并且能够提高映射归约的计算效率,从而能够提高在文件系统上存储小文件的效率。

应理解,该小文件可以是文件的大小小于一个块大小的文件,第一文件可以是文件的大小大于或等于一个块大小的文件,该块的大小可以是目前默认的块的大小,即128mb,也可以是旧版本块的大小,即64mb,本发明实施例不限制块的大小,为便于理解,本发明后续实施例中可以将第一文件称为“大文件”。

应理解,该分布式存储系统100包括文件系统110、第一线程服务111和第二线程服务112。该文件系统110可以为hdfs110、第一线程服务111可以为离线合并小文件的线程服务111,第二线程服务112可以为命名空间的线程服务112。在本发明后续实施例中,将第一线程服务111以“离线合并小文件的线程服务111”,将第二线程服务以“命名空间的线程服务112”,将文件系统以“hdfs120”为例进行说明,但本发明实施例对此不做任何限制。

还应理解,小文件后台服务主进程110,可以包括离线合并小文件的线程服务111和命名空间的线程服务112,小文件后台服务主进程,例如fgcservice110,fgcservice110可以用于负责调度离线合并数据任务和管理小文件的元数据。

还应理解,如图2所示,本发明实施例的分布式存储系统的示意性架构图,该系统100还可以包括小文件访问接口130,例如smallfsclient130,smallfsclient130用于提供fgcservice110的访问接口,例如fgcclient111和提供hdfs120的访问接口,例如hdfsclient112。

具体地,smallfsclient130,可以用于实现小文件访问接口,其中,fgcclient131,可以通过远程过程调用协议(remoteprocedurecallprotocol,简称“rpc”)访问fgcservice110,再通过命名空间的线程服务112访问小文件索引;hdfsclient132,可以通过rpc访问hdfs120,访问小文件或大文件。

应理解,该分布式存储系统中的fgcservice110、hdfs120和smallfsclient130可以在同一物理设备上,也可以分别在不同的物理设备上,或者是该分布式存储系统中的任意两个部分在同一物理设备上。

可选地,该分布式存储系统100还可以包括元数据集合。

应理解,fgcservice110可以访问该元数据集合,该元数据集合可以任意一种以键(key)值(value)形式存储的小文件的元数据集合,本发明对此不做任何限制。例如,该元数据集合可以是leveldb或者是元数据库等,本发明后续实施例中的元数据集合均以leveldb为例进行阐述。

在本发明的实施例中,为方便管理小文件的元数据,提高接口的访问性能,针对每个hdfs120上的小文件目录可以创建一个leveldb,用于存储小文件的元数据,该leveldb可以如图3所示。

具体地,如图3所示,该leveldb的元数据结构包括键和值,其中,键用于表示小文件的文件名,例如,小文件1、小文件2、小文件n;值包括大文件名、小文件的大小以及小文件在大文件中的偏移量,例如,值中的大文件1:1024:0表示,大文件名为大文件1,大文件中小文件的大小为1024k,小文件在大文件中的偏移量为0,同理,例如,大文件2:2345:1024或大文件n:1024:xxxx。

因此,通过fgcservice110能够将小文件离线合并成大文件,并且以键和值的形式存储hdfs120的小文件的元数据,能够减少hdfs120中文件和块的数据量,从而达到减少名字节点中内存开销和数据节点的句柄的目的,提高分布式存储系统的可扩展性。

可选地,分布式存储系统100还可以包括一个主fgcservice和至少一个备fgcservice。

应理解,备fgcservice可以包括离线合并小文件的线程服务111和命名空间的线程服务112,具体地,备fgcservice可以作为备用的fgcservice,例如,当主fgcservice出现故障时,分布式存储系统100可以使用备fgcservice代替主fgcservice。

如图4所示是根据本发明实施例的分布式存储系统的ha流程图,当分布式存储系统100中包括两个fgcservice时,两个fgcservice110启动后注册到分布式应用程序协调服务(zookeeper,简称“zk”)上,尝试自己升主,能够成功建立时域(session)目录的就是主(active)fgcservice110,另一个则为备(standby)fgcservice140。

应理解,该主fgcservice110可以访问leveldb1,该备fgcservice140可以访问leveldb2,该leveldb1和leveldb2都可以用于存储hdfs120上的小文件的元数据,并且该leveldb1和leveldb2之间的元数据同步, 可以通过增量元数据(editlog)进行,该增量元数据可以存储在hdfs120上,保证可靠性。

还应理解,zk可以是一个或者多个,该zk可以存储状态信息,具体地,可以存储fgcservice中哪一个fgcservice为主fgcservice110,哪一个为备fgcservice140。

具体地,fgcclient111可以通过rpc访问主fgcservice,hdfsclient112可以通过rpc访问hdfs120。

应理解,该zk可以包括一个zk或者可以是一个zk集群,该zk集群可以是包括至少一个zk。

应理解,主fgcservice110可以生成存储在hdfs120上的增量元数据,备fgcservice140可以定期获取该增量元数据,进行checkpoint操作,调用命名空间的服务线程112将该增量元数据加载到备fgcservice140的leveldb2中。

因此,本发明的实施例的分布式存储方法,通过主fgcservice110和备fgcservice140,在hdfs120上存储小文件时,能够提高系统的可靠性,并且能够提高映射归约的计算效率,从而能够提高在hdfs上存储小文件的效率。

可选地,fgcservice110还可以包括第三线程服务113,该第三线程服务可以为离线删除大文件中小文件的线程服务113,该离线删除大文件中小文件的线程服务113,可以用于删除大文件中的小文件。

可选地,fgcservice110还可以包括第四线程服务114,该第四线程服务可以为清理冗余的线程服务114,该清理冗余的线程服务114,可以用于清除hdfs120或fgcservice110上的冗余数据。

因此,应理解,fgcservice110可以用于调度离线合并、删除和清理冗余数据任务;管理小文件的元数据;提供远程过程调用协议rpc访问元数据的接口,并支持基于zk的ha部署。

可选地,如图5所示,是根据本发明实施例的分布式存储系统的架构图,该分布式存储系统100还可以包括:离线删除大文件中的小文件的线程服务113、清理冗余的线程服务114和一个备fgcservice140。

还应理解,当主fgcservice110没有出现故障时,系统通常不会启用备fgcservice120,因此,本发明后续实施例中的fgcservice均以主 fgcservice110为例进行阐述,并且将主fgcservice110简称为“fgcservice110”,主fgcservice110访问的leveldb1简称为“leveldb”。

具体地,如图6所示,用户可以根据需求,访问smallfsclient130,其中,用户可以通过访问fgcclient131,实现读取小文件、创建小文件、删除小文件以及目录相关的操作,同时,fgcservice110可以定时自启动合并小文件或者删除大文件中的小文件或者清理冗余数据的任务。

因此,本发明的实施例的分布式存储方法,通过该分布式存储系统,在hdfs120上存储小文件时,能提高映射归约的计算效率,并且能够支持删除小文件或者小文件目录,还能够提供用户的权限管理功能,从而能够提高在hdfs120上存储小文件的效率。

上述内容描述了本发明实施例的分布式存储方法,下面将具体描述该分布式存储方法中各部分功能的具体实现方式。

应理解,fgcservice110包括离线合并小文件的线程服务111,例如,mergeservice111,该离线合并小文件的线程服务111可以定时被启动。如图6所示,是根据本发明的分布式存储方法中离线合并小文件的方法的示意性流程图,当fgcservice110定时启动离线合并小文件的线程服务111时,在分布式存储系统100中,可以执行以下操作:

离线合并小文件的线程服务111,遍历hdfs120中的小文件目录,将小文件进行分组。

具体地,离线合并小文件的线程服务111,把文件系统中的小文件可以按照第二规则进行分组,例如,先按用户分组,再把每组内的小文件按照大小之和分组,应理解,离线合并小文件的线程服务111,还可以根据其他条件对小文件进行分组,本发明对此不做任何限制。

离线合并小文件的线程服务111,启动mr任务,按照第一规则,将每组小文件合并成一个大文件,并且启动checkpoint操作,调用命名空间的线程服务112将合并过程中生成的增量元数据,加载到leveldb中。

具体地,mr任务或者checkpoint操作都可以是定时启动的,第一规则可以是同目录下的文件的大小,小于一定的配置阈值,并且生成时间在一定时间以前的小文件,按文件权限的用户和用户组进行分组,组的大小达到大文件的大小时进行合并,本发明对文件系统中,将小文件离线合并成一个大文件的合并规则不作任何限制。

应理解,该配置阈值可以是提前设定的阈值也可以是随机设定的阈值,该一定时间以前可以指一天以前或者12个小时以前,本发明对此不做任何限制。

可选地,在离线合并小文件的线程服务111启动checkpoint操作后,离线合并小文件的线程服务111,删除hdfs120中完成合并的小文件。

因此,本发明的实施例,通过离线合并小文件的线程服务111和命名空间的线程服务112,能够将hdfs120中的小文件离线合并成大文件,并且支持删除完成合并的小文件,从而能够提高在hdfs120上存储小文件的效率。

可选地,如图7所示,是根据本发明实施例的分布式存储方法中目录操作的示意性流程图,在分布式存储系统100中,fgcservice110包括命名空间的线程服务112,当用户通过fgcclient131发出删除hdfs120目录的请求时,命名空间的线程服务112,可以删除hdfs120目录和leveldb,并且加载删除过程中生成的增量元数据到hdfs120中。

可选地,如图7所示,在分布式存储系统100中,当用户通过hdfsclient132,发出读或写或修改hdfs目录的请求时,hdfsclient132可以访问hdfs120,在hdfs120上实现读或写或修改hdfs120目录。

应理解,该hdfs目录和leveldb中的内容可以是对应的,包括小文件的元数据,只是对于小文件的元数据的存储形式可能有所不同。

因此,本发明的实施例,用户可以通过命名空间的线程服务112以及hdfs120,实现对小文件目录的相关操作,从而能够提高在hdfs120上存储小文件的效率。

可选地,如图8所示,是本发明实施例的分布式存储方法中读取小文件的示意性流程图,在分布式存储系统100中,当用户通过hdfsclient132,发出读取第一小文件的请求时,并且当hdfs120包括该第一小文件时,用户可以通过hdfsclient132读取该第一小文件;当hdfs120不包括该第一小文件时,fgcclient131,可以访问命名空间的线程服务112。

具体地,当leveldb中不包括第一小文件的元数据时,命名空间的线程服务112向用户返回第一小文件不存在的消息。

当leveldb中包括第一小文件的元数据时,命名空间的线程服务112,读取第一小文件的元数据,并通过该第一小文件的元数据,访问hdfs120 中的第一小文件对应的合并后的大文件。

因此,本发明的实施例,用户可以通过命名空间的线程服务112,能够读取hdfs120上的小文件,从而能够提高在hdfs120上读取小文件的效率。

可选地,在分布式存储系统100中,当用户通过fgcclient131,发出创建第一小文件的请求时,命名空间的线程服务112可以判断leveldb中是否存在第一小文件的元数据。

具体地,当leveldb包括第一小文件的元数据,且用户输入要覆盖第一小文件的内容时,命名空间的线程服务112,可以删除leveldb中的第一小文件的元数据,重新创建leveldb中的第一小文件的元数据。

当leveldb包括第一小文件的元数据,且用户没有输入是否覆盖第一小文件的内容时,命名空间的线程服务112,可以向用户返回创建失败的消息。

当leveldb不包括第一小文件的元数据时,hdfsclient132可以调用hdfs120,创建该第一小文件。

因此,本发明的实施例,用户可以通过命名空间的线程服务112,能够创建小文件,从而能够提高在hdfs120上存储小文件的效率。

可选地,如图9所示是根据本发明实施例的分布式存储方法中删除小文件的示意性流程图,在分布式存储系统100中,当用户通过fgcclient131,发出删除第一小文件的请求时,命名空间的线程服务112可以判断leveldb中是否存在第一小文件的元数据。

具体地,当leveldb不包括第一小文件的元数据时,则删除hdfs中的第一小文件。

当leveldb包括第一小文件的元数据时,且用户有删除第一小文件对应的合并后的大文件的权限时,删除leveldb中的第一小文件的元数据,并且加载删除过程中产生的增量元数据和deletelog到hdfs120。

应理解,该增量元数据可以用于同步主备节点的元数据,deletelog可以包括删除信息,删除信息可以用于后台删除服务删除大文件中第一小文件。

因此,本发明的实施例,用户可以通过命名空间的线程服务112,能够删除小文件以及leveldb中小文件的元数据,从而能够提高在hdfs120上存储小文件的效率。

可选地,在分布式存储系统100中,可以包括离线删除大文件中小文件 的线程服务113,该离线删除大文件中小文件的线程服务113可以定时被启动。当fgcservice110定时启动离线删除大文件中小文件的线程服务113时,如图10所示,本发明实施例的分布式存储方法中删除大文件中小文件的示意性流程图,在分布式存储系统100中,可以包括以下操作:

离线删除大文件中小文件的线程服务113,读取deletelog的大文件和元数据集合中小文件的元数据;大文件可能包括需要删除的小文件和需要保留的小文件,若deletelog指示删除大文件中的n个小文件,删除n个小文件;若deletelog指示删除大文件中的所有小文件,删除该大文件。

离线删除大文件中小文件的线程服务113,启动mr任务,从大文件中,获取要保留的小文件数据,重新生成新的大文件;启动checkpoint操作,调用命名空间的线程服务112,将删除过程中生成的增量元数据,加载到元数据集合中。

离线删除大文件中小文件的线程进程113,删除该大文件和deletelog。

因此,本发明的实施例的分布式存储的方法,用户可以通过离线删除大文件中小文件的线程服务113,能够删除大文件中的小文件,从而能够提高在hdfs120上存储小文件的效率。

可选地,在分布式存储系统100中,可以包括清除冗余的线程服务114,该清除冗余的线程服务114可以定时被启动。当fgcservice110定时启动清除冗余的线程服务114时,如图11所示,是根据本发明实施例的分布式存储方法中清除冗余的示意性流程图,在分布式存储系统100中,可以包括以下操作:

清理冗余的线程服务114,遍历hdfs120上的小文件的目录,并和leveldb中小文件的元数据进行匹配;当目录中的小文件没有索引到小文件的元数据中的大文件上,则删除该大文件;当目录中的小文件和小文件的元数据中的小文件重名,则调用命名空间的线程服务112,删除leveldb中的小文件的元数据;

可选地,清理冗余的线程服务114,在删除leveldb中的小文件的元数据之后,调用离线删除大文件中小文件的线程服务113,执行离线删除大文件中小文件的线程服务。

具体地,清理冗余的线程服务114,可以调用离线删除大文件中小文件的线程服务113,清除增量元数据、deletelog以及其他垃圾数据。

因此,本发明的实施例,通过清除冗余数据的线程服务114,能够清除系统中的冗余数据,从而能够提高在hdfs120上存储小文件的效率。

上文中结合图1至图11,详细描述了根据本发明实施例的分布式存储方法,下面将描述根据本发明实施例的分布式存储设备。

图12是根据本发明实施例的分布式存储设备的示意图,一种分布式存储的设备200,其特征在于,包括存储器210和处理器220以及总线230,存储器210与处理器220通过总线230连接通信,存储器210存储有程序和指令,处理器220调用存储器210中的程序和指令,用于执行图1的方法。

应理解,设备200还可以包括发送器240和接收器250,接收器250可以用于接收指令或信息等,发送器240可以用于发送指令或信息等。

应理解,图12中的设备200可用于执行本发明实施例中的方法,并且设备200中的各个部分的上述和其它操作和/或功能分别为了实现图1中各个方法的相应流程,为了简洁,在此不再赘述。

本发明实施例的分布式存储方法,通过分布式存储设备200,在文件系统上的存储小文件时,能够大幅降低名字节点的内存开销和数据节点的句柄开销,并且能够提高映射归约的计算效率,从而能够提高存储小文件的效率。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

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