一种分布式文件系统及分布式文件系统的构建方法

文档序号:6632481阅读:238来源:国知局
一种分布式文件系统及分布式文件系统的构建方法
【专利摘要】本发明涉及一种分布式文件系统及分布式文件系统的构建方法,包括以下步骤:封装访问函数,定义结构体文件;将磁盘上的所有文件按照预先定义的预定数据块大小拆分为多个预定数据块大小的数据块;将拆分后的每个数据块分别以键值对的形式存储在分布式开源数据库中;根据每个数据块的键头部和文件的文件名建立文件分配表;当外部应用发起文件访问请求时,查询文件分配表,得到查询结果,对分布式开源数据库进行数据块读写同时对分布式开源数据库中的文件分配表进行修改。本发明利用HBASE对小数据块的快速访问,通过自动数据拆分和汇集,实现对任意大小文件均能按照类似传统非分布式文件系统一样快速随机存储和访问。
【专利说明】-种分布式文件系统及分布式文件系统的构建方法

【技术领域】
[0001] 本发明涉及一种分布式文件系统及分布式文件系统的构建方法。

【背景技术】
[0002] 化doop是一个分布式系统基础架构,由Apache基金会开发。化doop实现了一个 分布式文件系统(皿F巧和一种分布式计算框架(MapRe化Ce)。
[0003] 皿FS是Hadoop Distributed File System的简称,它是一个分布式文件系统。 皿FS有着高容错性的特点,它提供高吞吐量方法来访问应用程序的数据,适合那些有着超 大数据集的应用程序,但对数据随机访问和小数据集的读写有着较大的效率瓶颈。
[0004] 皿ase是一个分布式的、面向列的开源数据库,它不是关系型的数据库,数据采用 Key-Value方式存储,是一个适合于非结构化数据存储的数据库。目前通用分布式文件系统 对小文件(小于64MB)和普通文件随机快速访问具有处理效率低的问题。


【发明内容】

[0005] 本发明所要解决的技术问题是提供一种对小文件和普通文件随机快速访问处理 效率高的分布式文件系统及分布式文件系统的构建方法。
[0006] 本发明解决上述技术问题的技术方案如下:一种分布式文件系统的构建方法,包 括W下步骤:
[0007] 步骤1 ;封装用于进行文件访问的访问函数,定义结构体文件,所述结构体文件用 于存储文件分配表的访问指针;
[0008] 步骤2 ;将磁盘上的所有文件按照预先定义的预定数据块大小拆分为多个数据 块;
[0009] 步骤3 ;将拆分后的每个数据块分别W键值对的形式存储在分布式开源数据库 中,所述键值对包括键和键值,所述键包括键头部和当前数据块在被拆分的文件中的序号, 所述键值用于存储数据块;
[0010] 步骤4 ;根据每个数据块的键头部和所有被拆分文件的文件名建立文件分配表, 所述文件分配表中还包括被拆分文件的扩展属性;
[0011] 步骤5 ;当外部应用向分布式开源数据库发起文件访问请求时,分布式开源数据 库根据文件访问请求中携带的文件名利用定义的结构体文件查询文件分配表,得到查询结 果,根据封装的访问函数及查询结果对分布式开源数据库进行数据块读写和/或对分布式 开源数据库中的文件分配表进行修改。
[0012] 本发明的有益效果是:本发明利用HBASE对小数据块(HBASE的数据记录)的快 速查询访问,通过自动数据拆分和汇集(Map-Re化Ce),实现对任意大小文件均能按照类似 本地文件系统一样快速随机存储和访问,解决了目前通用分布式文件系统对小文件(小于 64MB)和普通文件随机快速访问处理效率低的问题。
[0013] 在上述技术方案的基础上,本发明还可W做如下改进。
[0014] 进一步,所述键头部包括时间戳、主机名和流水号,所述时间戳为将磁盘上的文件 拆分为数据块时所在主机的时间,所述主机名为将磁盘上的文件拆分为数据块时所在主机 的主机名,所述流水号用于记录每一个数据块的序号。
[0015] 进一步,所述步骤5中文件访问请求具体为文件创建请求、文件复写请求或者文 件删除请求。
[0016] 进一步,当文件访问请求为文件创建请求时,分布式开源数据库根据文件访问请 求中携带的文件名利用定义的结构体文件查询文件分配表,得到查询结果;
[0017] 如果文件分配表中存在与文件访问请求中的文件名相同的同名文件,则根据扩展 属性判断此文件权限是否允许当前用户修改,如果不允许修改,则返回无权限修改的错误 提示;如果允许修改,根据文件分配表中的同名文件的键头部,删除在分布式开源数据库中 与该同名文件对应的键值,然后复用此同名文件的键头部,为该键头部重新写入数据块;
[0018] 如果在文件分配表中未找到同名文件,则新建一个键值对,并将键值对的键值部 分存入新的数据块,将文件访问请求中的文件名和键值对的键头部分别对应存入文件分配 表,并返回创建文件成功提示。
[0019] 进一步,当文件访问请求为文件复写请求时,分布式开源数据库根据文件访问请 求中携带的文件名利用定义的结构体文件查询文件分配表,得到查询结果;
[0020] 如果文件分配表中存在与文件访问请求中的文件名相同的同名文件,则根据扩展 属性判断此文件权限是否允许当前用户修改,如果不允许修改,则返回无权限修改的错误 提示;如果允许修改,根据文件分配表中的同名文件的键头部,在分布式开源数据库中删除 与该同名文件对应的键值,然后复用此同名文件的键头部,为该键头部重新写入数据块;
[0021] 如果在文件分配表中未找到同名文件,则新建一个键值对,将文件访问请求中的 文件名和键值对的键头部分别对应存入文件分配表,为键值对的键值部分存入新的数据 块,数据块一开始写入时直接写入内存中,当内存写入数据达到预定阀值或外部的应用程 序主动调用强制刷新命令要求刷新数据到磁盘时,将内存中缓存数据的当前数据偏移量拼 接到键头部,将当前数据偏移量作为键值对中的键及作为键值的内存中的数据块一通写入 分布式开源数据库,写入成功后,返回复写函数调用成功提示。
[0022] 进一步,当文件访问请求为文件删除请求时,外部的应用程序调用删除函数,分布 式开源数据库根据文件访问请求中携带的文件名利用定义的结构体文件查询文件分配表, 得到查询结果;
[0023] 如果在文件分配表中未找到同名文件,则返回删除函数调用失败提示;
[0024] 如果在文件分配表中找到同名文件,从文件分配表中获取与文件删除请求携带的 文件名对应的键头部和扩展属性,根据扩展属性判断此文件的权限是否允许当前用户执行 删除操作,如果允许,利用获取的键头部从分布式开源数据库中删除相对应的键值,然后从 文件分配表中删除与键头部对应的文件名和扩展属性,全部删除完毕后,返回删除函数调 用成功。
[0025] 进一步,一种分布式文件系统,包括封装定义模块,拆分模块,存储模块,建立模块 和查询修改模块;
[0026] 所述封装定义模块,用于封装进行文件访问的访问函数,定义存储文件分配表的 访问指针的结构体文件;
[0027] 所述拆分模块,用于将磁盘上的所有文件按照预先定义的预定数据块大小拆分为 多个数据块;
[0028] 所述存储模块,用于将拆分后的每个数据块分别W键值对的形式存储在分布式开 源数据库中,所述键值对包括键和键值,所述键包括键头部和当前数据块在被拆分的文件 中的序号,所述键值用于存储数据块;
[0029] 所述建立模块,用于根据每个数据块的键头部和所有被拆分文件的文件名建立文 件分配表,所述文件分配表中还包括被拆分文件的扩展属性;
[0030] 所述查询修改模块,用于当外部应用向分布式开源数据库发起文件访问请求时, 分布式开源数据库根据文件访问请求中携带的文件名利用定义的结构体文件查询文件分 配表,得到查询结果,根据封装的访问函数及查询结果对分布式开源数据库进行数据块读 写和/或对分布式开源数据库中的文件分配表进行修改。
[0031] 进一步,所述存储模块存储的键值对的键头部包括时间戳、主机名和流水号,所述 时间戳为将磁盘上的文件拆分为数据块时所在主机的时间,所述主机名为将磁盘上的文件 拆分为数据块时所在主机的主机名,所述流水号用于记录每一个数据块的序号。
[0032] 进一步,所述查询修改模块中文件访问请求具体为文件创建请求、文件复写请求 或者文件删除请求。

【专利附图】

【附图说明】
[0033] 图1为本发明方法步骤流程图;
[0034] 图2为本发明系统结构图。
[0035] 附图中,各标号所代表的部件列表如下:
[0036] 1、封装定义模块,2、拆分模块,3、存储模块,4、建立模块,5、查询修改模块。

【具体实施方式】
[0037] W下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并 非用于限定本发明的范围。
[003引如图1所示,为本发明方法步骤流程图;图2为本发明系统结构图。
[0039] 实施例1
[0040] 一种分布式文件系统的构建方法,包括W下步骤:
[0041] 步骤1 ;封装用于进行文件访问的访问函数,定义结构体文件,所述结构体文件用 于存储文件分配表的访问指针;
[0042] 系统封装标准C的文件访问常用函数,如打开文件(fopen)、关闭文件(fclose)、 写文件(fwrite)、读文件(化ead)、文件偏移(fseek)、文件位置重置(rewind)、文件改名 (rename)等,对函数的标准声明不变,重新定义结构体FILE,在此结构体中存储HBASE默认 表的访问句柄;
[0043] 步骤2 ;将磁盘上的所有文件按照预先定义的预定数据块大小拆分为多个预定数 据块大小的数据块;
[0044] 步骤3 ;将拆分后的每个数据块分别W键值对的形式存储在分布式开源数据库 中,所述键值对包括键和键值,所述键包括键头部和当前数据块在被拆分的文件中的序号, 所述键值用于存储数据块;
[0045] 步骤4 ;根据每个数据块的键头部和所有被拆分文件的文件名建立文件分配表, 所述文件分配表中还包括被拆分文件的扩展属性;
[0046] 步骤5 ;当外部应用向分布式开源数据库发起文件访问请求时,分布式开源数据 库根据文件访问请求中携带的文件名利用定义的结构体文件查询文件分配表,得到查询结 果,根据封装的访问函数及查询结果对分布式开源数据库进行数据块读写同时对分布式开 源数据库中的文件分配表进行修改。
[0047]

【权利要求】
1. 一种分布式文件系统的构建方法,其特征在于,包括以下步骤: 步骤1:封装用于进行文件访问的访问函数,定义结构体文件,所述结构体文件用于存 储文件分配表的访问指针; 步骤2 :将磁盘上所有文件按照预先定义的预定数据块大小拆分为多个数据块; 步骤3:将拆分后的每个数据块分别以键值对的形式存储在分布式开源数据库中,所 述键值对包括键和键值,所述键包括键头部和当前数据块在被拆分的文件中的序号,所述 键值用于存储数据块; 步骤4:根据每个数据块的键头部和所有被拆分文件的文件名建立文件分配表,所述 文件分配表中还包括被拆分文件的扩展属性; 步骤5 :当外部应用发起文件访问请求时,分布式开源数据库根据文件访问请求中携 带的文件名,利用定义的结构体文件查询文件分配表,得到查询结果,根据封装的访问函数 及查询结果对分布式开源数据库进行数据块读写,同时对分布式开源数据库中的文件分 配表进行修改。
2. 根据权利要求1所述的构建方法,其特征在于:所述键头部包括时间戳、主机名和 流水号,所述时间戳为将磁盘上的文件拆分为数据块时所在主机的时间,所述主机名为将 磁盘上的文件拆分为数据块时所在主机的主机名,所述流水号用于记录每一个数据块的序 号。
3. 根据权利要求1所述的构建方法,其特征在于:所述步骤5中文件访问请求具体为 文件创建请求、文件复写请求或者文件删除请求。
4. 根据权利要求3所述的构建方法,其特征在于:当文件访问请求为文件创建请求时, 分布式开源数据库根据文件访问请求中携带的文件名,利用定义的结构体文件查询文件分 配表,得到查询结果; 如果文件分配表中存在与文件访问请求中的文件名相同的同名文件,则根据扩展属性 判断此文件权限是否允许当前用户修改,如果不允许修改,则返回无权限修改的错误提示; 如果允许修改,根据文件分配表中的同名文件的键头部,删除在分布式开源数据库中与该 同名文件对应的键值,然后复用此同名文件的键头部,为该键头部重新写入数据块; 如果在文件分配表中未找到同名文件,则新建一个键值对,并将键值对的键值部分存 入新的数据块,将文件访问请求中的文件名和键值对的键头部分别对应存入文件分配表, 并返回创建文件成功提示。
5. 根据权利要求3所述的构建方法,其特征在于:当文件访问请求为文件复写请求时, 分布式开源数据库根据文件访问请求中携带的文件名利用定义的结构体文件查询文件分 配表,得到查询结果; 如果文件分配表中存在与文件访问请求中的文件名相同的同名文件,则根据扩展属性 判断此文件权限是否允许当前用户修改,如果不允许修改,则返回无权限修改的错误提示; 如果允许修改,根据文件分配表中的同名文件的键头部,在分布式开源数据库中删除与该 同名文件对应的键值,然后复用此同名文件的键头部,为该键头部重新写入数据块; 如果在文件分配表中未找到同名文件,则新建一个键值对,将文件访问请求中的文件 名和键值对的键头部分别对应存入文件分配表,为键值对的键值部分存入新的数据块,数 据块一开始写入时直接写入内存中,当内存写入数据达到预定阀值或外部的应用程序主动 调用强制刷新命令要求刷新数据到磁盘时,将内存中缓存数据的当前数据偏移量拼接到键 头部,将当前数据偏移量作为键值对中的键及作为键值的内存中的数据块一通写入分布式 开源数据库,写入成功后,返回复写函数调用成功提示。
6. 根据权利要求3所述的构建方法,其特征在于:当文件访问请求为文件删除请求时, 外部的应用程序调用删除函数,分布式开源数据库根据文件访问请求中携带的文件名利用 定义的结构体文件查询文件分配表,得到查询结果; 如果在文件分配表中未找到同名文件,则返回删除函数调用失败提示; 如果在文件分配表中找到同名文件,从文件分配表中获取与文件删除请求携带的文件 名对应的键头部和扩展属性,根据扩展属性判断此文件的权限是否允许当前用户执行删除 操作,如果允许,利用获取的键头部从分布式开源数据库中删除相对应的键值,然后从文件 分配表中删除与键头部对应的文件名和扩展属性,全部删除完毕后,返回删除函数调用成 功。
7. -种分布式文件系统,其特征在于:包括封装定义模块(1),拆分模块(2),存储模块 (3),建立模块(4)和查询修改模块(5); 所述封装定义模块(1),用于封装进行文件访问的访问函数,定义存储文件分配表的访 问指针的结构体文件; 所述拆分模块(2),用于将磁盘上所有文件按照预先定义的预定数据块大小拆分为多 个数据块; 所述存储模块(3),用于将拆分后的每个数据块分别以键值对的形式存储在分布式开 源数据库中,所述键值对包括键和键值,所述键包括键头部和当前数据块在被拆分的文件 中的序号,所述键值用于存储数据块; 所述建立模块(4),用于根据每个数据块的键头部和所有被拆分文件的文件名建立文 件分配表,所述文件分配表中还包括被拆分文件的扩展属性; 所述查询修改模块(5),用于当外部应用向分布式开源数据库发起文件访问请求时,分 布式开源数据库根据文件访问请求中携带的文件名利用定义的结构体文件查询文件分配 表,得到查询结果,根据封装的访问函数及查询结果对分布式开源数据库进行数据块读写, 同时对分布式开源数据库中的文件分配表进行修改。
8. 根据权利要求7所述的分布式文件系统,其特征在于:所述存储模块(3)存储的键 值对的键头部包括时间戳、主机名和流水号,所述时间戳为将磁盘上的文件拆分为数据块 时所在主机的时间,所述主机名为将磁盘上的文件拆分为数据块时所在主机的主机名,所 述流水号用于记录每一个数据块的序号。
9. 根据权利要求7所述的分布式文件系统,其特征在于:所述查询修改模块(5)中文 件访问请求具体为文件创建请求、文件复写请求或者文件删除请求。
【文档编号】G06F17/30GK104331453SQ201410601171
【公开日】2015年2月4日 申请日期:2014年10月30日 优先权日:2014年10月30日
【发明者】张奇伟 申请人:北京思特奇信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1