一种海量小文件存储及管理方法和系统
技术领域
本发明涉及一种存储和管理的方法和系统,具体涉及一种海量小文件存储及管理方法和系统。
背景技术
Hadoop平台采用管理者/工作者模式,由一个名称节点(NameNode)服务器和多个数据节点(DataNode)服务器组成。不论是NameNode服务器还是DataNode服务器都部署在普通的PC机上,大大节约了实施分布式系统投入的成本。在Hadoop中需要用NameNode来管理文件系统的元数据,以响应客户端请求返回文件位置等,因此文件数量大小的限制要由NameNode来决定。假设一个小型数据文件,其元数据所需1KB(1024B)内存空间。如果存在1000万个这样的文件,并且为每一个文件分配一个Block,那么就要消耗NameNode节点约为10GB的内存来保存这些Block的信息;如果每个Block的默认大小为64MB,并且默认备份数量为3,则这1000万个文件所需要的存储空间约为1.92PB(1920TB)。显然,仅仅存储1000万个小文件是不足以满足用户的需求,因为现如今的信息量在急剧的增加,这样很容易超出现阶段计算机硬件所能承受的极限,造成机器宕机。如果有更多文件,那么名称节点的工作压力更大,检索处理元数据所需要的时间就不可接受。特别是这些文件比Hadoop默认文件分块大小还小,Hadoop将认为这些文件是不可分块。海量小文件将耗费名称节点服务器的内存,并且其检索和更新效率低。另外,Hadoop存在的这个唯一的名称节点,它负责管理文件系统名称空间和控制外部客户端的访问,一旦NameNode出现故障就会导致数据访问失效。
发明内容
为了克服上述现有技术的不足,本发明提供一种海量小文件存储及管理方法和系统。
为了实现上述发明目的,本发明采取如下技术方案:
一种海量小文件存储及管理方法,所述方法包括:
存储海量小文件,并将元数据写入名称节点服务网络;
名称节点服务网络管理元数据,实现对客户端访问请求响应。
优选的,所述存储海量小文件包括如下步骤:
步骤1、将海量小文件进行分类,生成所述元数据文件;
步骤2、利用MapReduce编程框架对数据块进行分解、处理得到数据值;
步骤3、将所述数据值分布存储在Hadoop平台中。
优选的,所述步骤1包括如下步骤:
步骤1-1、根据查询文件的文件类型,分类出目标类型文件,并将所述目标类型文件索引进行分类,形成目标文件索引序列;
步骤1-2、对目标文件进行解析,提取出需要存储的小文件元数据信息并存入缓存;
步骤1-3、从缓存中获取所述小文件元数据信息,将其按照Hadoop平台中默认的块大小或指定大小进行文件合并,形成中间数据文件,即元数据文件,放入目标文件夹中。
优选的,所述步骤2采用MapReduce编程框架的Map、Reduce函数,所述Map函数对传入的中间数据文件进行分解处理,产生中间key/value数据序列,所述Reduce函数对所述中间key/value数据序列进行分析合并。
优选的,所述名称节点服务网络管理元数据包括如下步骤:
步骤Ⅰ、获取客户端提交的服务请求;
步骤Ⅱ、根据所述服务请求的key值,查找缓存中是否有所述服务请求的数据信息,若有直接返回给客户端,否则定位所述服务请求到网络中的具体存储节点,并转发所述服务请求到具体NameNode节点;
步骤Ⅲ、KBR服务根据所述key值定位查询所述具体存储节点中文件节点信息并返回客户端。
优选的,所述key值是根据服务请求信息提取的数据进行Hash计算得到的。
优选的,所述KBR服务采用了希尔伯特曲线的数据连续性,提供基于关键字的路由方法供其他NameNode节点查找。
优选的,一种海量小文件存储及管理系统,所述系统包括
名称节点服务网络系统,用于名称节点服务网络管理元数据,实现对客户端访问请求响应;
海量小文件存储系统,用于存储海量小文件,并将元数据写入名称节点服务网络。
优选的,所述海量小文件存储系统包括:
文件类型处理器,根据查询文件的文件类型,分类出目标类型文件,并将目标文件索引进行分类,形成目标文件索引序列,供海量小文件解析器模块调用;
海量小文件解析器模块,从文件类型处理器获得目标文件索引序列,使用多线程解析技术,对目标文件进行解析,提取出需要存储的小文件元数据信息,将提取的元数据存入缓存;
中间数据合并器,将所述元数据按照Hadoop平台中的默认块大小或指定大小进行文件合并,放入指定的目标文件夹中;
中间数据存储器,定时的扫描目标文件夹,获得中间数据文件,将其放入Hadoop平台中,并对所述中间数据文件进行备份;
分布式数据处理器,采用MapReduce编程模型的Map、Reduce函数;Map函数是按照规定的规则,对传入的中间数据文件进行分解处理,产生中间key/value数据序列,然后Reduce函数对这些中间key/value数据序列进行在分析、合并,最后将处理过的数据存入Hadoop平台中。
优选的,所述名称节点服务网络系统包括:
解析器模块,提取客户端提交服务请求的key值;
缓存层模块,对经常用的数据进行缓存;
覆盖网络层,定位所述服务请求到网络中的具体存储节点,并转发所述服务请求到具体NameNode节点,根据所述key值定位查询所述具体存储节点中文件节点信息并返回客户端。
与现有技术相比,本发明的有益效果在于:
本发明名称节点服务网络系统采用对等计算技术,避免了单点失效问题,提供基于关键字的路由查找方法,有效均衡网络负载,提高查询效率,采用同类型小文件合并技术,并使用多线程并行处理编程方法,提高大数据系统的小文件处理效率。
附图说明
图1是一种存储海量小文件方法流程图
图2是一种名称节点服务网络管理元数据的方法流程图
图3是一种存储海量小文件系统模块图
图4是一种名称节点服务网络管理元数据系统模块图
具体实施方式
下面结合附图对本发明作进一步详细说明。
一种海量小文件存储及管理方法,所述方法包括:
存储海量小文件,并将元数据写入名称节点服务网络;
名称节点服务网络管理元数据,实现对客户端访问请求响应。
如图1所示,一种存储海量小文件方法,包括如下步骤:
步骤101、将海量的小文件进行分类,生成所述元数据文件;
步骤102、再利用MapReduce编程框架对数据块进行分解、处理得到数据值;
采用MapReduce编程框架的Map、Reduce函数,所述Map函数对传入的中间数据文件进行分解处理,产生中间key/value数据序列,所述Reduce函数对所述中间key/value数据序列进行分析合并。
步骤103、最后将所述数据值分布存储在Hadoop平台中。
其中步骤101包括如下步骤:
步骤1101、根据查询文件的文件类型,分类出目标类型文件,并将所述目标类型文件索引进行分类,形成目标文件索引序列;
步骤1102、对目标文件进行解析,提取出需要存储的小文件元数据信息并存入缓存;
步骤1103、从缓存中获取所述小文件元数据信息,将其按照Hadoop平台中默认的块大小或指定大小进行文件合并,形成中间数据文件,即元数据文件,放入目标文件夹中。
为了解决名称节点的单点失效问题,本发明提出一种基于对等计算(P2P)技术的名称节点服务网络系统,简称P2PNS。P2P是英文Peer-to-Peer的缩写,Peer的英文含义是“(地位、能力等)同等者、同事、伙伴”,P2P也就可以理解为“伙伴对伙伴”的意思。每个节点地位对等,可以同时成为服务的使用者和提供者,这为大规模的信息共享、直接通信和协同工作提供了灵活的、可扩展的计算平台。P2P计算更关注于Internet上海量的边缘节点;P2P技术的价值也在于为对等节点间的资源共享、通信、协作提供平台,从而完成大规模的计算任务。
如图4所示,本发明所述的名称节点服务网络系统主要包含以下模块:P2PNS解析器、P2PNS缓存层和覆盖网络层。所述的P2PNS解析器模块用于对名称节点的数据存储信息进行管理,所述的P2PNS缓存层模块对经常用的数据进行缓存以提高访问效率,所述的覆盖网络层模块提供DHT和KBR服务。
DHT全称叫分布式哈希表(Distributed Hash Table),是一种分布式存储方法,在不需要服务器的情况下,每个DHT节点负责一定区域其他节点的路由,并存储网络中一部分数据,实现整个DHT网络的寻址和存储,主要提供2种方法:Get(key)和Put(Key,Value),Get(key)用于寻址,Put(Key,Value)用于存储。
KBR(key based route)服务提供的基于关键字的路由方法供其他NameNode查找。KBR服务采用了希尔伯特(Hilbert)曲线的数据连续性,支持资源的分层管理,提高查询效率、减轻网络负载。根据一定的路由算法把所有的P2P节点连接起来,每个节点都跟最近相邻的几个节点相连,并保存它们的信息作为路由表。这样所有的节点就构成了一个逻辑网络,任何一个节点都可以通过一定的中间节点作路由,到达目的节点,并且每一个节点都分配了一个全局唯一的ID值,路由时就是以目的节点的ID值作为关键字进行路由转发。同时对于任意的文件资源,通过资源定位算法,可以将文件定位到某个相应的节点上,然后通过逻辑网络的路由查找,找到相应节点,就可以进行文件的访问。
如图2所示,名称节点服务网络管理元数据的方法包括如下步骤:
步骤201、获取客户端提交的服务请求;
步骤202、根据所述服务请求的key值,查找缓存中是否有所述服务请求的数据信息,若有直接返回给客户端,否则定位所述服务请求到网络中的具体存储节点,并转发所述服务请求到具体NameNode节点;
步骤203、根据所述key值定位查询所述具体存储节点中文件节点信息并返回客户端。
所述key值是根据服务请求信息提取的数据进行Hash计算得到的。
如图3所示,一种存储海量小文件系统包括如下模块:
文件类型处理器。文件类型处理器主要的功能是根据查询文件的文件类型,分类出目标类型文件,并将目标文件索引进行分类,形成目标文件索引序列,供海量小文件解析器模块调用。
海量小文件解析器。本系统的核心组件,小文件解析器的功能是从文件类型处理器获得目标文件索引序列,使用多线程解析技术,对目标文件进行解析,提取出需要存储的小文件元数据信息,将提取的元数据存入缓存待数据合并器模块进行处理。
中间数据合并器。数据合并器即中间数据文件产生器,它是与小文件解析器相对应的一个功能模块。采用生产者-消费者模型,将小文件解析器看成生产者,数据合并器作为消费者。合并器定期的从缓存中获取数据信息,将其按照Hadoop平台中的默认Block块大小或指定的合并后大小进行文件合并,放入指定的目录中。
中间数据存储器。该模块定时的扫描目标文件夹,获得中间数据文件,将其放入Hadoop平台中,并对该中间数据文件进行备份。
分布式数据处理器。分布式数据处理器采用MapReduce编程模型的Map、Reduce函数。Map函数是按照规定的规则,对传入的中间数据文件进行分解处理,产生中间key/value数据序列,然后Reduce函数对这些中间key/value数据序列进行在分析、合并,最后将处理过的数据存入Hadoop平台中。
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求范围当中。