一种小文件存储架构的存储和读取方法与流程

文档序号:17398415发布日期:2019-04-13 01:00阅读:146来源:国知局
一种小文件存储架构的存储和读取方法与流程

本发明属于大数据技术领域,特别是涉及一种小文件存储架构的存储和读取方法。



背景技术:

随着互联网的不断发展,数字信息正在呈爆炸式增长,如何高效地处理和存储海量数据成为一个亟待解决的问题。凭借其开源、。易用的特点,hadoop分布式平台已成为管理和处理海量数据的首选方案。以hadoop分布式文件系统为基本存储,并通过mapreduce计算框架提供各种服务,使得用户可以在低廉硬件环境下搭建hadoop集群,利用hbase等组建完成海量数据的处理和分析任务,从而为超大数据集的处理以及应用提供一种低成本的分布式存储解决方案。

hdfs的主要工作对象是大文件,对于存储海量小文件并不合适,小文件是指那些size比hdfs的blocksize(默认64mbyte)小得多的文件,hdfs在存储小文件时存在以下具体问题:1、海量小文件势必会造成元数据庞大,耗费元数据服务器的内存。2、小文件存储和读取效率不佳,因为hdfs设计初衷是便于存储超大文件,具有较大的数据吞吐量,以一定延时为代价。然而,在实际应用中,小文件比比皆是,如个人应用中产生的日常文件及web应用中产生的小文件等。当海量的小文件在hdfs文件系统中进行存储时,这些小文件的元数据信息将会占用namenode节点中的大量内存空间,对namenode节点造成极大负载。同时,每次反问小文件事,都要通过拍namenode节点获取路径等信息,因此,大量小文件的并发访问势必造成namenode节点瓶颈,也会对整个hdfs文件系统的性能造成严重的影响。因此针对以上问题提供一种小文件存储架构的存储和读取方法来解决以上问题具有重要的意义。



技术实现要素:

本发明的目的在于提供一种小文件存储架构的存储和读取方法,通过在文件写入的时候,将小文件直接存储于hbase表结构中,在读取的时候,利用hbase自身索引机制,解决了实现读取效率低,并且相对于hdfs而言,解决了需要对大量小文件的元数据信息管理的过程,存储和读取效率低的问题。

为解决上述技术问题,本发明是通过以下技术方案实现的:

本发明的一种小文件存储架构,所述存储架构由上至下包括用户层、接入层、存储层,所述存储层包括hbase存储和hdfs存储;

所述用户层采用http协议或https协议与接入层进行交互;

所述接入层包括up/downsever、cgiproxysever两类服务器和hbase文件接口;所述接入层通过hbase文件接口调用对外封装好的类vfs,并与hbase存储进行交互,所述接入层用于负责接受用户的文件操作请求,并将请求转发给相应的服务器,与所述存储层交互进行文件的读写;

所述hbase存储用于实现对文件信息和文件内容的存储。

进一步地,所述up/downsever服务器主要负责处理用户端对文件的第一类操作,包括上传、下载操作,并与所述hbase文件接口、存储层进行文件交互,同时与所述存储层的hdfs存储进行数据读、写交互。

进一步地,所述cgiproxysever负责处理用户端对文件的第二类操作,包括遍历文件目录、创建目录、删除目录、拷贝文件、删除文件、重命名文件等操作,并与所述hbase文件接口进行交互,所述hbase文件接口用于与存储层进行读、写交互。

一种小文件存储架构的存储方法,包括如下步骤:

s01:用户上传待存储的文件;

s02:所述接入层的up/downsever服务器判断文件大小,当文件大小大于设定阀值,转至步骤s04;否则转至步骤s03;

s03:所述up/downsever服务器端进一步对文件请求进行解析,从请求中获取用户标识符、文件上传路径等信息,利用用户“标识符_文件”作为rowkey在存储层的hbase记录表中进行检索,若有记录存在,则表明目标上传路径中已上传有相同文件名的文件,此时,向用户层返回提示信息,提示用户端已上传文件;否则,up/downsever服务器端向hbase存储发起创建相应文件记录和写入文件的请求,并转至步骤s05;

s04:所述up/downsever服务器端直接调用hdfs文件写入接口进行操作;

s05:将文件信息写入hbase存储中相应表。

一种小文件存储架构的读取方法,包括如下步骤:

t01:所述up/downsever服务器端接收文件读取请求,获取用户“标识符_文件”的路径信息;

t02:所述up/downsever服务器端利用所获得的信息在hbase数据表中进行检索,若定位到用户所请求读取文件的记录,则转至步骤t03,否则转至步骤t04;

t03:所述up/downsever服务器端读取hbase文件记录中的列簇,由接入层直接返回“文件内容”列的数据给用户端;

t04:调用传统的hdfs文件读取接口进行操作。

本发明具有以下有益效果:

本发明通过在文件写入的时候,将小文件直接存储于hbase表结构中,在读取的时候,利用hbase自身索引机制,具有读取效率高的优点,并且相对于hdfs而言,减小了对大量小文件的元数据信息管理的过程,具有存储和读取效率高的优点。

当然,实施本发明的任一产品并不一定需要同时达到以上所述的所有优点。

附图说明

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

图1为本发明的一种小文件存储架构的结构示意图;

图2本发明的cgiproxyserver服务器的工作方法的步骤示意图;

图3本发明的up/dowenserver服务器的工作方法的步骤示意图;

图4本发明的up/dowenserver服务器的文件读取的方法步骤示意图;

图5为本发明的小文件写入的实验结果柱形图;

图6为本发明的小文件读取的实验结果柱形图。

具体实施方式

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

请参阅图1所示,本发明的一种小文件存储架构,存储架构由上至下包括用户层、接入层、存储层,存储层包括hbase存储和hdfs存储;

用户层采用http协议或https协议与接入层进行交互;

接入层包括up/downsever、cgiproxysever两类服务器和hbase文件接口;接入层通过hbase文件接口调用对外封装好的类vfs,并与hbase存储进行交互,接入层用于负责接受用户的文件操作请求,并将请求转发给相应的服务器,与存储层交互进行文件的读写;

hbase存储用于实现对文件信息和文件内容的存储。

其中,up/downsever服务器主要负责处理用户端对文件的第一类操作,包括上传、下载操作,并与所述hbase文件接口、存储层进行文件交互,同时与存储层的hdfs存储进行数据读、写交互。

其中,cgiproxysever负责处理用户端对文件的第二类操作,包括遍历文件目录、创建目录、删除目录、拷贝文件、删除文件、重命名文件等操作,并与hbase文件接口进行交互,hbase文件接口用于与存储层进行读、写交互。

如图2所示,ggiproxyserver服务器通过http或者https协议,接收client端的相关文件操作请求,然后内部调用hbase文件接口api实现这些操作;

如图3所示,up/downsever服务器对接收到的上传文件请求,先判断文件大小是否大于设定阈值,如果上传文件被判定为大文件,则调用hdfs文件写入api上传文件到hdfs,如果是小文件则内部调用hbase文件接口实现文件上传;

hbase文件接口用于将hbase关于文件和目录操作的借口封装成类似vfs的mkdir,rm接口函数;当底层文件操作系统发生变化时,不会导致上层调用接口的改变。该接口接收来自up/downsever服务器和ggiproxyserver服务器文件操作请求,进行必要的预处理,包括收集文件信息,再调用相应的hbase文件读写api,将文件信息和文件内容写入hbase或读取文件内容返回给上层服务;

一种小文件存储架构的存储方法,包括如下步骤:

s01:用户上传待存储的文件;

s02:接入层的up/downsever服务器判断文件大小,当文件大小大于设定阀值,转至步骤s04;否则转至步骤s03;

s03:up/downsever服务器端进一步对文件请求进行解析,从请求中获取用户标识符、文件上传路径等信息,利用用户“标识符_文件”作为rowkey在存储层的hbase记录表中进行检索,若有记录存在,则表明目标上传路径中已上传有相同文件名的文件,此时,向用户层返回提示信息,提示用户端已上传文件;否则,up/downsever服务器端向hbase存储发起创建相应文件记录和写入文件的请求,并转至步骤s05;

s04:up/downsever服务器端直接调用hdfs文件写入接口进行操作;

s05:将文件信息写入hbase存储中相应表。

如图4所示,一种小文件存储架构的读取方法,包括如下步骤:

t01:up/downsever服务器端接收文件读取请求,获取用户“标识符_文件”的路径信息;

t02:up/downsever服务器端利用所获得的信息在hbase数据表中进行检索,若定位到用户所请求读取文件的记录,则转至步骤t03,否则转至步骤t04;

t03:up/downsever服务器端读取hbase文件记录中的列簇,由接入层直接返回“文件内容”列的数据给用户端;

t04:调用传统的hdfs文件读取接口进行操作。

为了验证上述小文件存储方案的高效性,本实施例对传统的hdfs、基于hbase小文件高效存储方法进行读写的对比试验。

本实施例选用大量大小1kbyte小文件作为实验测试数据集,其中,1kbyte,2kbyte,4kbyte,8kbyte,16kbyte各500万个;

本实施例的试验环境为4个节点的hadoop集群,每个节点配置为16核intelxeoncpu2.4ghz,32gyte内存服务器,网络环境是千兆光纤,其中一台机器作为namenode,其余3台机器全部作为datanode和regionsever。

hbasemaster和hdfsnamendode运作在同一个节点上,zookeeper集群运行在除namenod外的3台机器上,每台节点安装的操作系统是centos5.4,hadoop版本为2.0,hbase版本hbase-0.96,jdk的版本1.6.0_35。

本文对hdfs,hbase的存储方法在小文件存储方面进行了实验分析,分析结果如图5和图6所示;

从图5的实验结果可以看出,基于hdfs的写入速度为20-30mbyte/s,基于hbase的高效存储方法的写入速度为60-80mbyte/s,这是因为在写入小文件的时候,基于hbase存储方法是直接写入hbase数据表中,而基于hdfs还需要管理元数据和数据块等信息,所以,本发明提出的方法在写入速度上具有较大提升;

从图6的实验结果可以看出,在小文件读取方面,基于hdfs读取速度为50-60mbyte/s,基于hbase的高效存储方法读取速度为111-120mbyte/s,hdfs需要先访问元数据,再与datanode交互进行读取,而hbase利用其自身索引机制,能够对数据表中信息进行快速读取。实验结果表明,在小文件读写方面,本发明剔除的机遇hbase的肖恩间高效存储方法比hdfs平均读取速度有显著提高,写入速度提升也明显。

本发明提出的基于hbase的小文件高效存储方法在文件写入的时候,将小文件直接存储于hbase表结构中,在读取的时候利用hbase自身索引机制实现高效读取,并且相对于hdfs而言,该方法减少了hdfs大量小文件的元数据信息管理的过程,综上所述,该方法用于海量小文件的读写是高效可行的,在下一步工作中,将继续研究海量数据中大。小文件的同一高效存储方案。

在本说明书的描述中,参考术语“一个实施例”、“示例”、“具体示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。

以上公开的本发明优选实施例只是用于帮助阐述本发明。优选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本发明的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本发明。本发明仅受权利要求书及其全部范围和等效物的限制。

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