一种分布式小文件的存储、读取方法、装置及存取系统与流程

文档序号:13804844阅读:110来源:国知局
本发明涉及计算机
技术领域
:,特别涉及一种分布式小文件的存储、读取方法、装置及存取系统。
背景技术
::随着互联网的不断普及与发展,数据呈现爆炸式增长,社交网络、电子商务等各种应用往往能产生亿级、十亿级甚至是百亿级的小文件。如何基于分布式文件系统(hadoopdistributedfilesystem,hdfs)实现这些小文件的存取成为现如今比较关注的问题。目前,在存储这些小文件时,只是对这些小文件的内容进行存储。但是,当需要读取某个或者某些小文件的内容时,则需要遍历所有的内容才能读取到所需的内容,导致读取效率较低。技术实现要素:本发明实施例提供了一种分布式小文件的存储、读取方法、装置及存取系统,能够提高读取效率。第一方面,本发明实施例提供了一种分布式小文件的存储方法,创建hbase表;还包括:针对于待存储的每一个小文件,均执行:确定当前小文件的内容、唯一标识以及元数据信息;根据所述元数据信息,将所述当前小文件的所述内容存储至相应的序列化文件sequencefile中;确定所述内容在相应的所述sequencefile中的起始偏移和终止偏移;确定所述sequencefile的位置信息;将所述唯一标识、所述起始偏移、所述终止偏移以及所述sequencefile的位置信息对应存储在所述hbase表中。优选地,所述将所述唯一标识、所述起始偏移、所述终止偏移以及所述sequencefile的位置信息对应存储在所述hbase表中,包括:将所述唯一标识、所述起始偏移、所述终止偏移、所述sequencefile的位置信息以及所述元数据信息对应存储在所述hbase表中。优选地,所述根据所述元数据信息,将所述当前小文件的所述内容存储至相应的序列化文件sequencefile中,包括:根据预设的存储规则,判断是否存在与所述元数据信息相对应的所述sequencefile;如果是,则将所述当前小文件的所述内容追加至所述sequencefile中;如果否,则创建与所述元数据信息相对应的所述sequencefile,并将所述当前小文件的所述内容存储至创建出的所述sequencefile中。第二方面,本发明实施例提供了一种分布式小文件的读取方法,包括:接收携带有至少一个检索词的读取请求;从hbase表中查找与所述至少一个检索词相对应的至少一个唯一标识;从所述hbase表中查找与所述至少一个唯一标识相对应的起始偏移、终止偏移以及sequencefile的位置信息;根据查找的所述sequencefile的位置信息,从所述sequencefile中读取由所述起始偏移至所述终止偏移的内容。优选地,所述从hbase表中查找与所述至少一个检索词相对应的至少一个唯一标识,包括:从所述hbase表中查找包括有所述至少一个检索词的至少一个元数据信息;从所述hbase表中查找与所述至少一个元数据信息相对应的所述至少一个唯一标识。第三方面,本发明实施例提供了一种分布式小文件的存储装置,包括:创建单元,用于创建hbase表;确定单元,用于针对于待存储的每一个小文件,确定当前小文件的内容、唯一标识以及元数据信息;存储单元,用于根据所述元数据信息,将所述当前小文件的所述内容存储至相应的序列化文件sequencefile中;索引单元,用于确定所述内容在相应的所述sequencefile中的起始偏移和终止偏移;确定所述sequencefile的位置信息;将所述唯一标识、所述起始偏移、所述终止偏移以及所述sequencefile的位置信息对应存储在所述hbase表中。优选地,所述索引单元,用于将所述唯一标识、所述起始偏移、所述终止偏移、所述sequencefile的位置信息以及所述元数据信息对应存储在所述hbase表中。优选地,所述存储单元,用于根据预设的存储规则,判断是否存在与所述元数据信息相对应的所述sequencefile;如果是,则将所述当前小文件的所述内容追加至所述sequencefile中;如果否,则创建与所述元数据信息相对应的所述sequencefile,并将所述当前小文件的所述内容存储至创建出的所述sequencefile中。第四方面,本发明实施例提供了一种分布式小文件的读取装置,包括:接收单元,用于接收携带有至少一个检索词的读取请求;确定单元,用于从hbase表中查找与所述至少一个检索词相对应的至少一个唯一标识;以及从所述hbase表中查找与所述至少一个唯一标识相对应的起始偏移、终止偏移以及sequencefile的位置信息;读取单元,用于根据查找的所述sequencefile的位置信息,从所述sequencefile中读取由所述起始偏移至所述终止偏移的内容。第五方面,本发明实施例提供了一种分布式小文件的存取系统,包括:上述任一实施例中的分布式小文件的存储装置,以及上述任一实施例中的分布式小文件的读取装置。本发明实施例提供了一种分布式小文件的存储、读取方法、装置及存取系统,通过创建hbase表,那么在存储每一个小文件时,确定当前小文件的内容、唯一标识以及元数据信息,然后将该内容存储至一相应的sequencefile中,在该内容完成存储后,确定该内容在sequencefile中的起始偏移、终止偏移以及该sequencefile的位置信息,然后,确定出的起始偏移、终止偏移以及sequencefile的位置信息将作为索引数据存储在创建的hbase表中,以及唯一标识也对应存储在hbase表中,在读取小文件时,可根据唯一标识在hbase表中找到相对应的索引数据,然后根据找到的索引数据从相应的sequencefile中找到起始偏移至终止偏移的所需内容,这样,通过hbase表中存储的索引数据就可以快速的找到所需内容,而无需在遍历所有的内容,从而提高了读取效率。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明一个实施例提供的一种分布式小文件的存储方法的流程图;图2是本发明一个实施例提供的一种分布式小文件的读取方法的流程图;图3是本发明一个实施例提供的一种分布式小文件的存储装置的结构示意图;图4是本发明一个实施例提供的一种分布式小文件的读取装置的结构示意图;图5是本发明一个实施例提供的一种分布式小文件的存取系统的结构示意图;图6是本发明一个实施例提供的一种分布式小文件的存取方法的流程图。具体实施方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。如图1所示,本发明实施例提供了一种分布式小文件的存储方法,该方法可以包括以下步骤:步骤101:创建hbase表。步骤102:针对于待存储的每一个小文件,确定当前小文件的内容、唯一标识以及元数据信息。步骤103:根据所述元数据信息,将所述当前小文件的所述内容存储至相应的序列化文件sequencefile中。步骤104:确定所述内容在相应的所述sequencefile中的起始偏移和终止偏移。步骤105:确定所述sequencefile的位置信息。步骤106:将所述唯一标识、所述起始偏移、所述终止偏移以及所述sequencefile的位置信息对应存储在所述hbase表中。本发明实施例提供了一种分布式小文件的存储方法,通过创建hbase表,那么在存储每一个小文件时,确定当前小文件的内容、唯一标识以及元数据信息,然后将该内容存储至一相应的sequencefile中,在该内容完成存储后,确定该内容在sequencefile中的起始偏移、终止偏移以及该sequencefile的位置信息,然后,确定出的起始偏移、终止偏移以及sequencefile的位置信息将作为索引数据存储在创建的hbase表中,以及唯一标识也对应存储在hbase表中,在读取小文件时,可根据唯一标识在hbase表中找到相对应的索引数据,然后根据找到的索引数据从相应的sequencefile中找到起始偏移至终止偏移的所需内容,这样,通过hbase表中存储的索引数据就可以快速的找到所需内容,而无需在遍历所有的内容,从而提高了读取效率。为了能够按照元数据信息进行检索,以及便于对小文件的元数据信息进行统一管理,在本发明一个实施例中,所述步骤106的具体实施方式,可包括:将所述唯一标识、所述起始偏移、所述终止偏移、所述sequencefile的位置信息以及所述元数据信息对应存储在所述hbase表中。上述实施例中,可将起始偏移、sequencefile的位置信息等对应存储在同一个列族中,而元数据信息存储在一个单独的列族中。那么在需要对文件进行更细粒度的管理时,可根据唯一标识从hbase表中检索其对应的元数据信息,从而进行更细粒度和多维度的文件管理。为了能够将小文件的内容存储至相应的sequencefile中,在本发明一个实施例中,所述步骤103的具体实施方式,可包括:根据预设的存储规则,判断是否存在与所述元数据信息相对应的所述sequencefile;如果是,则将所述当前小文件的所述内容追加至所述sequencefile中;如果否,则创建与所述元数据信息相对应的所述sequencefile,并将所述当前小文件的所述内容存储至创建出的所述sequencefile中。上述实施例中,小文件的存储是有一定存储规则的。以小文件为图片为例,图片1对应医院、日期为2017/9/1,图片2对应机场、日期为2017/9/1,那么在存储图片1时,可先判断是否存在有以“医院+2017/9/1”命名(命名方式不唯一,可根据实际需求进行设定)的sequencefile,如果存在,那么可直接将图片1对应的二进制数组追加存储至该sequencefile中,如果不存在,那么可根据预设的存储规则,在相应的路径下创建一个以“医院+2017/9/1”命名的sequencefile,然后将对应的二进制数组存储至刚创建的sequencefile中,从而完成图片1的存储。同理,针对图片2,依旧是根据预设的存储规则,判断是否存在以“机场+2017/9/1”命名的sequencefile,其存储原理与图片1相同,此处不再赘述。上述实施例中,存储图片1之后,若获取到待存储的图片6,该图片对应医院,且日期也为2017/9/1,则此时无需再创建sequencefile,而是将图片6对应的内容追加至在存储图片1时已经创建的sequencefile中。如图2所述,本发明实施例提供了一种分布式小文件的读取方法,该方法可以包括以下步骤:步骤201:接收携带有至少一个检索词的读取请求。步骤202:从hbase表中查找与所述至少一个检索词相对应的至少一个唯一标识。步骤203:从所述hbase表中查找与所述至少一个唯一标识相对应的起始偏移、终止偏移以及sequencefile的位置信息。步骤204:根据查找的所述sequencefile的位置信息,从所述sequencefile中读取由所述起始偏移至所述终止偏移的内容。在本发明一个实施例中,所述步骤202的具体实施方式,可以包括:从所述hbase表中查找包括有所述至少一个检索词的至少一个元数据信息;从所述hbase表中查找与所述至少一个元数据信息相对应的所述至少一个唯一标识。在本发明实施例中,检索词可以是唯一标识,也可以是元数据信息中所包括的任意一个或几个信息。若检索词是唯一标识,则可直接与hbase表中存储的各个唯一标识进行比对,然后根据比对出的唯一标识,从hbase表中找出与比对出的唯一标识所对应的起始偏移等信息;若检索词是元数据信息中所包括的任意一个或几个信息,则可根据hbase表中对应存储的唯一标识和元数据信息,找到相应的唯一标识。在本发明实施例中,可对索引的数据(如起始偏移、终止偏移等)进行单条读取和批量读取。例如,当前需要读取一张图片,那么可根据该图片对应的唯一标识,从hbase表中找到该唯一标识对应的起始偏移、终止偏移以及该图片所在的sequencefile的位置信息,从而在该sequencefile中读取出该图片的内容;若当前需要读取某公司、某部门(某公司、某部门即为两个检索词)的多个员工的图像(每个员工的图像所对应的元数据信息包括有公司、部门、职位等等),那么可先根据这两个检索词,找到所有的元数据信息,如找到10个,然后从hbase表中找到这10个元数据信息分别对应的唯一标识,由于在存储这10张图像时,是以追加的形式进行存储,因此,可通过在hbase表中找到第1张图片的起始偏移、第10张图片的终止偏移,以及这些图片所在的sequencefile的位置信息,从而可以根据这两个偏移,在该sequencefile中读取从起始偏移至终止偏移的所有10张图片的内容,实现批量读取。其中,进行单条读取时的相关代码可如下:进行批量读取时的相关代码可如下:如图3所示,本发明实施例提供了一种分布式小文件的存储装置,包括:创建单元301,用于创建hbase表;确定单元302,用于针对于待存储的每一个小文件,确定当前小文件的内容、唯一标识以及元数据信息;存储单元303,用于根据所述元数据信息,将所述当前小文件的所述内容存储至相应的序列化文件sequencefile中;索引单元304,用于确定所述内容在相应的所述sequencefile中的起始偏移和终止偏移;确定所述sequencefile的位置信息;将所述唯一标识、所述起始偏移、所述终止偏移以及所述sequencefile的位置信息对应存储在所述hbase表中。在本发明一个实施例中,所述索引单元,用于将所述唯一标识、所述起始偏移、所述终止偏移、所述sequencefile的位置信息以及所述元数据信息对应存储在所述hbase表中。在本发明一个实施例中,所述存储单元,用于根据预设的存储规则,判断是否存在与所述元数据信息相对应的所述sequencefile;如果是,则将所述当前小文件的所述内容追加至所述sequencefile中;如果否,则创建与所述元数据信息相对应的所述sequencefile,并将所述当前小文件的所述内容存储至创建出的所述sequencefile中。如图4所示,本发明实施例提供了一种分布式小文件的读取装置,包括:接收单元401,用于接收携带有至少一个检索词的读取请求;确定单元402,用于从hbase表中查找与所述至少一个检索词相对应的至少一个唯一标识;以及从所述hbase表中查找与所述至少一个唯一标识相对应的起始偏移、终止偏移以及sequencefile的位置信息;读取单元403,用于根据查找的所述sequencefile的位置信息,从所述sequencefile中读取由所述起始偏移至所述终止偏移的内容。上述装置内的各单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。如图5所示,本发明实施例提供了一种分布式小文件的存取系统,包括:上述任一实施例中的分布式小文件的存储装置501,以及上述任一实施例中的分布式小文件的读取装置502。下面将详细说明本发明实施例提供的一种分布式小文件的存取方法,如图6所示,该方法可以包括如下步骤:步骤601:创建hbase表。本发明实施例中,hbase表可如下表1进行创建。表1其中,创建hbase表的相关代码可如下:htabledescriptortabledesc=newhtabledescriptor(tablename.valueof(tablename));hcolumndescriptorfimalydesc1=newhcolumndescriptor("v");hcolumndescriptorfimalydesc2=newhcolumndescriptor("d");tabledesc.addfamily(fimalydesc1);tabledesc.addfamily(fimalydesc2);admin.createtable(tabledesc);步骤602:针对于待存储的每一个小文件,确定当前小文件的内容、唯一标识以及元数据信息。步骤603:根据预设的存储规则,判断是否存在与当前小文件的元数据信息相对应的sequencefile,如果是,执行步骤604,否则,执行步骤605。本发明实施例中,可运用参数sequencefile.writer.appendifexists(true)保证内容追加至相应的sequencefile中,而不覆盖原有数据,直接生成一个大文件,而不是将每一个小文件的内容分别存储至一个sequencefile中,然后再将各个小的sequencefile合并成一个大文件,提高了小文件存储的效率。步骤604:将当前小文件的内容追加至sequencefile中,并执行步骤606。步骤605:创建与当前小文件的元数据信息相对应的sequencefile,并将当前小文件的内容存储至创建出的sequencefile中。步骤606:确定当前小文件的内容在相应的sequencefile中的起始偏移和终止偏移。步骤607:确定sequencefile的位置信息。步骤608:将唯一标识、起始偏移、终止偏移、sequencefile的位置信息以及元数据信息对应存储在hbase表中。在本发明实施例中,将内容写入相应的sequencefile中,以及将起始偏移、终止偏移等对应存储至hbase表中的相关代码可如下:intwritablekey=newintwritable();textvalue=newtext((byte[])smallfile);sequencefile.writerwriter=null;optionoptpath=sequencefile.writer.file(p);optionoptkey=sequencefile.writer.keyclass(key.getclass());optionoptval=sequencefile.writer.valueclass(value.getclass());optionoptexist=sequencefile.writer.appendifexists(true);optionoptcompress=sequencefile.writer.compression(compressiontype.record);writer=sequencefile.createwriter(fs.getconf(),optpath,optkey,optval,optexist,optcompress);htabletable=hbaseinit.gettable(tablename.valueof("tablename"));startpos=writer.getlength();writer.append(key,value);putput=newput(bytes.tobytes("/path/filename"));put.addcolumn(bytes.tobytes("v"),bytes.tobytes("name"),bytes.tobytes("/path/filename"));put.addcolumn(bytes.tobytes("v"),bytes.tobytes("startpos"),bytes.tobytes(startpos));put.addcolumn(bytes.tobytes("v"),bytes.tobytes("endpos"),bytes.tobytes(writer.getlength()));put.addcolumn(bytes.tobytes("d"),bytes.tobytes("describe"),bytes.tobytes("somethingdecscibethisfile"));table.put(put);步骤609:接收携带有至少一个检索词的读取请求。步骤610:从hbase表中查找与至少一个检索词相对应的至少一个唯一标识。步骤611:从hbase表中查找与至少一个唯一标识相对应的起始偏移、终止偏移以及sequencefile的位置信息。步骤612:根据查找的sequencefile的位置信息,从sequencefile中读取由起始偏移至终止偏移的内容。本发明实施例中,读取内容的相关代码可如下:本发明实施例提供了一种计算机可读介质,包括计算机执行指令,当存储控制器的处理器执行所述计算机执行指令时,所述存储控制器执行上述任一实施例中的分布式小文件的存储、读取方法。本发明实施例提供了一种存储控制器,包括:处理器、存储器和总线;所述存储器用于存储计算机执行指令,所述处理器与所述存储器通过所述总线连接,当所述存储控制器运行时,所述处理器执行所述存储器存储的所述计算机执行指令,以使所述存储控制器执行上述任一实施例中的分布式小文件的存储、读取方法。综上,本发明各个实施例至少具有如下有益效果:1、在本发明实施例中,通过创建hbase表,那么在存储每一个小文件时,确定当前小文件的内容、唯一标识以及元数据信息,然后将该内容存储至一相应的sequencefile中,在该内容完成存储后,确定该内容在sequencefile中的起始偏移、终止偏移以及该sequencefile的位置信息,然后,确定出的起始偏移、终止偏移以及sequencefile的位置信息将作为索引数据存储在创建的hbase表中,以及唯一标识也对应存储在hbase表中,在读取小文件时,可根据唯一标识在hbase表中找到相对应的索引数据,然后根据找到的索引数据从相应的sequencefile中找到起始偏移至终止偏移的所需内容,这样,通过hbase表中存储的索引数据就可以快速的找到所需内容,而无需在遍历所有的内容,从而提高了读取效率。2、在本发明实施例中,通过将大量的小文件存储在sequencefile中,解决了大量小文件消耗名称节点namenode的内存问题,实现并采用压缩技术节省磁盘空间和加快网络传输速度。3、在本发明实施例中,通过将小文件的元数据信息对应存储在hbase表中,实现所有小文件的元数据信息统一管理,从而在需要对文件进行更细粒度的管理时,可根据唯一标识从hbase表中检索其对应的元数据信息,进而进行更细粒度和多维度的文件管理。4、在本发明实施例中,在将内容写入sequencefile之前,通过判断是否存在相应的sequencefile,从而保证追加的内容不会覆盖到已经存储的内容。需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个〃····〃”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储在计算机可读取的存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质中。最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1