一种基于HDFS存储文件的去重方法及装置与流程

文档序号:11155424阅读:364来源:国知局
一种基于HDFS存储文件的去重方法及装置与制造工艺

本发明实施例涉及非结构化数据存储技术,尤其涉及一种基于HDFS存储文件的去重方法及装置。



背景技术:

Hadoop分布式文件系统(Hadoop Distributed File System,简称HDFS)是对超大规模数据集提供可靠存储功能的系统,建立在响应以“一次写入,多次读取”任务的基础上,对用户应用程序提供高带宽的输入输出数据流。HDFS具有高容错性,可以运行在低廉的硬件集群上。采用MASTER/SLAVES的主从架构,一个HDFS集群由一个Namenode节点(管理节点)和多个Datanode节点(存储节点)组成。管理节点是一个中心服务器,负责管理文件系统的元数据和客户端对文件的访问。管理节点存储着文件的元数据,因此管理节点的内存容量限制了文件的数量。HDFS默认会将文件分割成block(存储块),例如64M为1个存储块。然后将各存储块以键值对的形式存储在HDFS的存储节点中,并将键值对的映射存到内存中。每个文件、存储块以及索引目录在内存中均以对象的形式存储,每个对象约占150字节。举例来说,如果有1000000个小文件,每个文件占用一个存储块,则管理节点就至少需要300M的内存;如果存储1亿甚至更多的文件时,需要20G甚至更多的内存容量,解决办法是搭建支持集群的内存数据库,但增加系统成本。如果小文件太多,占用过多的内存资源,影响集群性能,需要对小文件进行合并,减少文件数量。

然而,在实际互联网应用中,存在着海量的小文件,尤其是随着博客、微博、Facebook等社交网站的兴起,改变了互联网存储内容的方式。用户基本上已经成为互联网内容的创造者,其数据具有海量、多样、动态变化等特点,由此产生了海量小文件,如状态文件、用户资料、头像等。这些数据按照数据的存储格式可以分为结构化数据和非结构化数据。结构化数据具有相同的层次和网格结构,可以用数字或文字来描述;而有一些信息则无法用数字或者统一的结构表示,例如,扫描图像、传真、照片、计算机生成的报告、字处理文档、电子表格、演示文稿、语音和视频等,这些即为非结构化数据。非结构化数据在经过结构化的提取之后,需要把原始文件进行保存,以供后续使用。

在很多领域中,非结构化数据所占比例远远高于结构化数据所占比例。非结构化数据信息量非常大,如果直接存储于数据库中,除了大幅度加大数据库的容量外,还会降低维护和应用的效率。尤其是在互联网获得的非结构化数据往往具有重复性,热点事件在短时间内会带来大量的网民关注,导致少量非结构化数据在短时间内被大量重复利用,占用系统存储空间。现有技术中,采用压缩技术对数据按照一定的比例进行压缩,但是非结构化数据不具备严格的结构,较之结构化信息更难以标准化,管理起来更困难。针对这些特点,目前HDFS存储的海量非结构化小文件采用Mapfile技术合并为大文件后,没有经过压缩处理,占用的存储空间多,因此,如何去除海量非结构化数据中重复的内容,节约存储空间是急需解决的问题。



技术实现要素:

本发明实施例提供一种基于HDFS存储文件的去重方法及装置,以使HDFS处理存储的海量非结构化小文件时,有效去重,节约存储空间。

第一方面,本发明实施例提供了一种基于HDFS存储文件的去重方法,包括:

将待去重文件的文件指纹,与已存储文件的文件指纹进行比对;

如果比对结果为相同,根据所述待去重文件的文件标识计算链接标识;

以所述链接标识和相同的已存储文件在存储节点中的存储地址,替换所述待去重文件的文件内容,作为所述待去重文件的文件标识的键值存储到存储节点中。

优选的,将待去重文件的文件指纹,与已存储文件的文件指纹进行比对之前,还包括:

将接收到的文件存储至所述存储节点中设定区域中,并标记为未去重处理区域;

从所述未去重处理区域中逐一获取文件,作为待去重文件。

优选的,将接收到的文件存储至所述存储节点中设定区域中包括:

为接收到的文件生成主键,作为文件标识;

将所述文件的文件内容转换为二进制数据,与所述文件标识对应存储至所述存储节点中设定区域中。

优选的,将接收到的文件存储至所述存储节点中设定区域中包括:

按照文件的接收日期,将接收到的文件存储至所述存储节点中不同的设定区域中。

优选的,根据所述待去重文件的文件标识计算链接标识包括:

对所述待去重文件的文件标识计算32位MD5值,作为所述链接标识。

优选的,以所述链接标识和相同的已存储文件在存储节点中的存储地址,替换所述待去重文件的文件内容,作为所述待去重文件的文件标识的键值存储到存储节点中之后,还包括:

根据所述存储节点中各文件标识及对应键值的存储位置,重写所述存储节点的索引文件。

优选的,所述方法还包括:

根据接收到的文件读取请求,获取待读取文件的文件标识;

根据所述文件标识计算对应的链接标识;

根据所述文件标识从存储节点中读取对应的键值的设定位数据;

如果比对所述链接标识与所述设定位数据匹配,则从所述键值中读取存储地址;

根据所述存储地址在所述存储节点中定位查找对应的文件,并读取后响应所述文件读取请求。

第二方面,本发明实施例还提供了一种基于HDFS存储文件的去重装置,包括:

指纹比对模块,用于将待去重文件的文件指纹,与已存储文件的文件指纹进行比对;

链接标识计算模块,用于如果比对结果为相同,根据所述待去重文件的文件标识计算链接标识;

内容替换模块,用于以所述链接标识和相同的已存储文件在存储节点中的存储地址,替换所述待去重文件的文件内容,作为所述待去重文件的文件标识的键值存储到存储节点中。

优选的,所述装置还包括:

文件存储模块,用于将待去重文件的文件指纹,与已存储文件的文件指纹进行比对之前,将接收到的文件存储至所述存储节点中设定区域中,并标记为未去重处理区域;

文件获取模块,用于从所述未去重处理区域中逐一获取文件,作为待去重文件。

优选的,所述文件存储模块包括:

主键生成单元,用于为接收到的文件生成主键,作为文件标识;

内容转换单元,用于将所述文件的文件内容转换为二进制数据,与所述文件标识对应存储至所述存储节点中设定区域中。

优选的,所述文件存储模块具体用于:

按照文件的接收日期,将接收到的文件存储至所述存储节点中不同的设定区域中。

优选的,所述链接标识计算模块具体用于:

对所述待去重文件的文件标识计算32位MD5值,作为所述链接标识。

优选的,所述装置还包括:

重写索引模块,用于以所述链接标识和相同的已存储文件在存储节点中的存储地址,替换所述待去重文件的文件内容,作为所述待去重文件的文件标识的键值存储到存储节点中之后,根据所述存储节点中各文件标识及对应键值的存储位置,重写所述存储节点的索引文件。

优选的,所述装置还包括:

文件标识读取模块,用于根据接收到的文件读取请求,获取待读取文件的文件标识;

对应标识计算模块,用于根据所述文件标识计算对应的链接标识;

设定位数据读取模块,用于根据所述文件标识从存储节点中读取对应的键值的设定位数据;

匹配模块,用于如果比对所述链接标识与所述设定位数据匹配,则从所述键值中读取存储地址;

文件查找模块,用于根据所述存储地址在所述存储节点中定位查找对应的文件,并读取后响应所述文件读取请求。

本发明实施例针对HDFS中文件内容相同的海量非结构化文件,对内容相同的文件只保留一份,删除与已存储文件指纹相同的文件内容,替换为链接标识和链接地址,有效去除内容重复的文件,减少文件数量,节约了大量的存储空间,释放内存资源,提升系统性能,同时,能够满足快速存储和正确读取的需求。

附图说明

图1A是本发明实施例一中的一种基于HDFS存储文件的去重方法的流程图;

图1B是本发明实施例一中的一种基于HDFS存储文件的去重方法的示意图;

图2是本发明实施例二中的一种基于HDFS存储文件的去重方法的流程图;

图3是本发明实施例三中的一种基于HDFS存储文件的去重方法的流程图;

图4A是本发明实施例四中的一种基于HDFS存储文件的去重装置的结构示意图;

图4B是本发明实施例四中的一种基于HDFS存储文件的去重装置的结构示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。

实施例一

图1A为本发明实施例一提供的一种基于HDFS存储文件的去重方法的流程图,本实施例可适用于Hadoop分布式文件系统,该系统一般可包括管理节点和多个存储节点。该方法可以由基于HDFS存储文件的去重装置来执行,该装置可以采用软件和/或硬件的方式实现,一般集成于Hadoop分布式文件系统中的管理节点中。

本发明实施例一的方法具体包括:

S101、将待去重文件的文件指纹,与已存储文件的文件指纹进行比对。

待去重文件是接收到的文件,可以先将该文件存储到存储节点中,而后在离线状态下进行本实施例的去重操作,也可以在接收到待去重文件时,进行在线的去重操作。由于在线去重需要占用较大的资源,运行速度慢,响应时间长,所以优选是进行离线去重。从存储节点中提取没有进行过去重处理的文件,作为待去重文件。

具体的,文件指纹是根据每一个文件的内容计算得出的,不管文件名称如何变化,只要文件的内容没有变化,计算出的文件指纹就是相同的。如果待去重文件与已存储文件的文件内容相同,计算出的文件指纹就相同。文件指纹的计算方法可以是计算文件的消息摘要算法第五版(Message-Digest Algorithm 5,简称MD5值)、安全哈希算法(Secure Hash Algorithm 1,简称SHA1值)或循环冗余校验(Cyclic Redundancy Check,简称CRC32值)。其中,MD5值具有高度的离散性,原信息内容的微小变化会导致MD5值的巨大变化,可靠性高。本实施例中,优选获取文件前1K二进制数据和文件最后1K二进制数据进行MD5值计算,计算的结果作为文件指纹。

在离线状态下,定期对待去重文件的文件指纹与已存储文件的文件指纹进行比对。在每天0点之后,利用Hadoop分布式文件系统中的MapReduce计算模型离线比对所述待去重文件的文件指纹与已存储文件的文件指纹,筛选出与所述已存储文件具有相同内容的待去重文件,并获取对应的已存储文件及其在数据存储节点中的存储地址。

S102、如果比对结果为相同,根据所述待去重文件的文件标识计算链接标识。

具体的,在文件写入Hadoop分布式文件系统中时,是在映射文件(Mapfile)中以键值对Key-Value的形式存储的,主键Key是文件标识,是在文件存储时分配给该文件能唯一标识该文件的字符串。键值Value是Key对应的二进制值,即文件内容对应的全部二进制数据。如果文件指纹比对结果为相同,根据所述待去重文件的文件标识Key计算出链接标识,该链接标识对已经进行去重处理的文件起到特殊标识作用。在文件读取阶段,如果从文件的键值中读取的是链接标识而不是实际的二进制数据,则表明该文件进行了去重处理。如果文件指纹比对结果不相同,则说明该文件与已存储文件的文件内容不相同,保留该文件的文件内容,不进行去重处理。

优选的,步骤S102包括:

对所述待去重文件的文件标识计算32位MD5值,作为所述链接标识。

本实施例中,根据所述待去重文件的文件标识Key计算出32位MD5值,作为所述链接标识。类似于加密过程,对去重处理的文件进行加密标识,计算出32位MD5值,在响应文件读取请求时进行解密。并且,读取文件阶段,可以根据文件标识计算出链接标识,从而识别该文件是否进行了去重处理。

S103、以所述链接标识和相同的已存储文件在存储节点中的存储地址,替换所述待去重文件的文件内容,作为所述待去重文件的文件标识的键值存储到存储节点中。

本实施例中,进行去重处理的文件,其键值中不再存储文件内容的二进制数据,而是替换为链接标识和存储地址,该存储地址存储的内容是与去重处理文件的内容完全相同的。如图1B所示,假设Key2对应的文件内容与已存储文件的内容相同,则读出Key2文件内容对应的二进制数据,在原位置写入链接标识和存储地址,即32位MD5值和相同文件存储的实际地址,完成所述待去重文件内容的替换。Key1和Key3对应的文件内容与已存储文件的内容不同,保留Key1和Key3文件内容对应的二进制数据。

优选的,步骤S103包括:

根据所述存储节点中各文件标识及对应键值的存储位置,重写所述存储节点的索引文件。

具体的,根据索引文件可以快速定位数据,所述存储节点中各文件标识对应的键值数据已经被替换,原有的索引文件不能正确表示新的映射关系,需要根据替换后的所述存储节点中各文件标识及对应键值的存储位置,重写所述存储节点的索引文件。

本发明实施例一提供的一种基于HDFS存储文件的去重方法,在离线状态下比对文件指纹并进行数据去重处理,可以适当延长处理时间,增加了系统的可靠性,节约内存资源,降低了对硬件设备的要求,进而节约大量设备成本,并且能够有效去除内容重复的文件,减少文件数量,节约存储空间。

实施例二

图2为本发明实施例二提供的一种基于HDFS存储文件的去重方法的流程图,本发明实施例二以实施例一为基础进行了优化改进,对如何离线去重操作进行进一步说明,如图2所示,本发明实施例二的具体包括:

S201、将接收到的文件存储至所述存储节点中设定区域中,并标记为未去重处理区域。

本实施例中,Hadoop分布式文件系统中包含多个映射文件,所述映射文件用于归档海量非结构化小文件,并生成归档文件对应的映射关系。系统连续接收文件并进行缓存,当缓存占用空间达到容量阈值或者接收时间达到预设时限时,系统根据接收非结构化文件的顺序依次写入各存储节点的映射文件中,并标记为未去重处理区域。其中,所述容量阈值的范围可设置为128M到2G之间,所述预设时限的范围可以设置为5分钟到20分钟之间,写入方式可以通过多线程并发写入,以保证写入的速度。

优选的,步骤S201包括:

为接收到的文件生成主键,作为文件标识;

将所述文件的文件内容转换为二进制数据,与所述文件标识对应存储至所述存储节点中设定区域中。

具体的,系统为接收到的文件生成主键Key,作为文件标识,根据主键Key进行索引存储,将所述文件的文件内容转换为二进制数据,作为主键Key对应的键值Value,主键Key和对应的键值Value以键值对的形式存储至所述存储节点的映射文件中。

优选的,步骤S201还包括:

按照文件的接收日期,将接收到的文件存储至所述存储节点中不同的设定区域中。

具体的,存储文件时,按照接收日期将接收到的文件存储至所述存储节点中不同的映射文件中。针对每天写入的文件在Hadoop分布式文件系统中新建一个目录进行保存,以天为单位分区存储。

S202、从所述未去重处理区域中逐一获取文件,作为待去重文件。

S203、将待去重文件的文件指纹,与已存储文件的文件指纹进行比对。

S204、如果比对结果为相同,根据所述待去重文件的文件标识计算链接标识。

S205、以所述链接标识和相同的已存储文件在存储节点中的存储地址,替换所述待去重文件的文件内容,作为所述待去重文件的文件标识的键值存储到存储节点中。

本发明实施例二提供的一种基于HDFS存储文件的去重方法,按照文件的接受日期对文件进行分区存储,便于离线处理,针对当天的存储文件暂时不进行去重处理,能够保证数据的存储效率,满足快速存储数据的需求,提高了数据存储的实时性。

实施例三

图3为本发明实施例三提供的一种基于HDFS存储文件的去重方法的流程图,本发明实施例三以实施例二为基础进行了优化改进,对在文件经过去重处理后,获取文件内容的过程进行进一步说明,如图3所示,本发明实施例三的具体包括:

S301、根据接收到的文件读取请求,获取待读取文件的文件标识。

S302、根据所述文件标识计算对应的链接标识。

S303、根据所述文件标识从存储节点中读取对应的键值的设定位数据。

S304、如果比对所述链接标识与所述设定位数据匹配,则从所述键值中读取存储地址。

S305、根据所述存储地址在所述存储节点中定位查找对应的文件,并读取后响应所述文件读取请求。

在本实施例中,获取文件内容的过程对文件使用者屏蔽内部处理流程,系统根据接收到的文件读取请求,获取待读取文件的文件标识主键Key,根据所述主键Key计算待读取文件主键Key对应的链接标识,该链接标识可以通过计算MD5值获取。根据所述主键Key从存储节点中读取对应键值的前32位MD5值,比对链接标识的MD5值和读取的前32位MD5值,如果一致,则说明该待读取文件经过去重处理,文件内容存储的是内容相同的已存储文件在存储节点中的存储地址,而不是文件本身真实的内容,去掉该文件内容中的前32位数据,从所述键值中读取存储地址,根据所述存储地址在所述存储节点中定位查找对应的文件,并读取后响应所述文件读取请求。比对链接标识的MD5值和读取的前32位MD5值,如果不一致,则说明该待读取文件没有经过去重处理,从所述键值中读取文件内容后响应所述文件读取请求。

本发明实施例三提供的一种基于HDFS存储文件的去重方法,对于重复的非结构化文件只保存了对应的存储地址,读取文件时对访问者屏蔽内部处理流程,能够满足正确读取的需求,节约了存储空间,提升了系统性能。

实施例四

图4A是本发明实施例四中的一种基于HDFS存储文件的去重装置的结构示意图,该装置应用于Hadoop分布式文件系统。如图4A所示,该装置包括:

指纹比对模块401,用于将待去重文件的文件指纹,与已存储文件的文件指纹进行比对;

链接标识计算模块402,用于如果比对结果为相同,根据所述待去重文件的文件标识计算链接标识;

内容替换模块403,用于以所述链接标识和相同的已存储文件在存储节点中的存储地址,替换所述待去重文件的文件内容,作为所述待去重文件的文件标识的键值存储到存储节点中。

优选的,所述链接标识计算模块具体用于:

对所述待去重文件的文件标识计算32位MD5值,作为所述链接标识。

优选的,所述装置还包括:

重写索引模块404,用于以所述链接标识和相同的已存储文件在存储节点中的存储地址,替换所述待去重文件的文件内容,作为所述待去重文件的文件标识的键值存储到存储节点中之后,根据所述存储节点中各文件标识及对应键值的存储位置,重写所述存储节点的索引文件。

具体的,在离线状态下,利用指纹比对模块比对所述待去重文件的文件指纹与已存储文件的文件指纹,筛选出与所述已存储文件具有相同内容的待去重文件,并获取对应的已存储文件及其在数据存储节点中的存储地址。如果文件指纹比对结果为相同,根据所述待去重文件的文件标识Key,在链接标识计算模块中计算出32位MD5值,作为链接标识,该链接标识对已经进行去重处理的文件起到标识作用。通过内容替换模块,以所述链接标识和相同的已存储文件在存储节点中的存储地址,替换所述待去重文件的文件内容,作为所述待去重文件的文件标识的键值存储到存储节点中。根据所述存储节点中各文件标识及对应键值的存储位置,在重写索引模块重写所述存储节点的索引文件。

优选的,如图4A所示,所述装置还包括:

文件存储模块405,用于将待去重文件的文件指纹,与已存储文件的文件指纹进行比对之前,将接收到的文件存储至所述存储节点中设定区域中,并标记为未去重处理区域;

文件获取模块406,用于从所述未去重处理区域中逐一获取文件,作为待去重文件。

优选的,所述文件存储模块包括:

主键生成单元,用于为接收到的文件生成主键,作为文件标识;

内容转换单元,用于将所述文件的文件内容转换为二进制数据,与所述文件标识对应存储至所述存储节点中设定区域中。

优选的,所述文件存储模块具体用于:

按照文件的接收日期,将接收到的文件存储至所述存储节点中不同的设定区域中。

具体的,文件存取模块连续接收文件并进行缓存,当缓存占用空间达到容量阈值或者接收时间达到预设时限时,系统按照文件的接受日期,根据接收非结构化文件的顺序多线程并发写入各存储节点的映射文件中。其中,所述容量阈值的范围可设置为128M到2G之间,所述预设时限的范围可以设置为5分钟到20分钟之间。主键生成单元为接收到的文件生成主键Key,作为文件标识,利用内容转换单元将所述文件的文件内容转换为二进制数据,作为主键Key对应的键值Value,主键Key和对应的键值Value以键值对的形式存储至所述存储节点的映射文件中。根据文件获取模块从所述未去重处理区域中逐一获取文件,作为待去重文件。

优选的,如图4B所示,所述装置还包括:

文件标识读取模块407,用于根据接收到的文件读取请求,获取待读取文件的文件标识;

对应标识计算模块408,用于根据所述文件标识计算对应的链接标识;

设定位数据读取模块409,用于根据所述文件标识从存储节点中读取对应的键值的设定位数据;

匹配模块410,用于如果比对所述链接标识与所述设定位数据匹配,则从所述键值中读取存储地址;

文件查找模块411,用于根据所述存储地址在所述存储节点中定位查找对应的文件,并读取后响应所述文件读取请求。

具体的,利用文件标识读取模块根据接收到的文件读取请求,获取待读取文件的文件标识主键Key,利用对应标识计算模块根据所述主键Key计算待读取文件主键Key对应的MD5值。利用设定位数据读取模块根据所述主键Key从存储节点中读取对应键值的前32位MD5值,在匹配模块中比对链接标识的MD5值和读取的前32位MD5值,如果一致,则说明该待读取文件经过去重处理,文件内容存储的是内容相同的已存储文件在存储节点中的存储地址,而不是文件本身真实的内容,去掉该文件内容中的前32位数据,通过文件查找模块从所述键值中读取存储地址,根据所述存储地址在所述存储节点中定位查找对应的文件,并读取后响应所述文件读取请求。如果不一致,则说明该待读取文件没有经过去重处理,从所述键值中读取文件内容后响应所述文件读取请求。

本发明实施例四提供的一种基于HDFS存储文件的去重装置,能够有效去除内容重复的文件,减少文件数量,节约了大量的存储空间,释放内存资源,提升系统性能,同时,能够满足快速存储和正确读取的需求。

本发明实施例提供的装置可执行本发明任意实施例提供的方法,具备执行方法相应的功能模块和有益效果。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

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