一种基于Hadoop的海量小文件写入方法转让专利

申请号 : CN201810500092.8

文献号 : CN108932287B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 谢桂园彭建烽魏文国戴青云蔡君赵慧民

申请人 : 广东技术师范大学

摘要 :

本发明公开了一种基于Hadoop的海量小文件写入方法,适用于具有数据合并模块和HBase缓存模块的HDFS系统。该方法包括:接收用户输入的小文件写入命令;根据用户ID和小文件文件名查询先查询HBase缓存模块,如果查询到第一文件内容,则将写入小文件的第一文件内容上传并更新到HBase缓存模块中;如果查询不到,则再去查询HDFS系统的数据库,如果查询到第二文件内容,则将写入小文件的第二文件内容上传并更新到数据库中;否则,调用Hadoop archive工具的API访问对应的HAR文件,并将写入小文件的HAR文件上传并更新到数据库中。本发明的写入方法能提高小文件的读取效率。

权利要求 :

1.一种基于Hadoop的海量小文件写入方法,其特征在于,包括:所述写入方法适用于具有数据合并模块和HBase缓存模块的HDFS系统;其中,所述小文件为大小小于或等于2MB的文件,所述写入方法包括:接收用户输入的小文件写入命令;其中,所述小文件写入命令包括用户ID和小文件文件名;

根据所述用户ID和所述小文件文件名查询所述HBase缓存模块;

如果查询到相应的文件内容,则返回所述HBase缓存模块查询到的第一文件内容,写入所述小文件,并将写入所述小文件的第一文件内容上传并更新到所述HBase缓存模块中;如果查询不到相应的文件内容,则根据所述小文件文件名查询所述HDFS系统的数据库,并判断是否查询到相应的文件内容;

如果是,则返回所述数据库查询到的第二文件内容,写入所述小文件,并将写入所述小文件的第二文件内容上传并更新到所述数据库中;

否则,调用Hadoop archive工具的API访问所述小文件文件名对应的HAR文件,写入所述小文件,并将写入所述小文件的HAR文件上传更新到所述数据库中。

2.根据权利要求1所述的基于Hadoop的海量小文件写入方法,其特征在于,所述数据合并模块采用的数据合并方法为:步骤A:当客户端上传待存储文件后,遍历HDFS上所有的文件,结合用户访问偏好模型找出所述待存储文件的关联性文件集合;其中,所述用户访问偏好模型是根据用户访问日志记录而统计得出;

步骤B:依次将所述关联性文件集合的文件和所述待存储文件添加到待合并队列中;

步骤C:判断所述待合并队列中的所有文件总大小是否超过128MB,如果是,则执行步骤D;否则,执行步骤E;

步骤D:将所述待合并队列中的所有文件合并成一个数据块,并清空所述待合并队列中的文件信息和删除已合并文件的源文件,返回步骤B;

步骤E:判断所述关联性文件集合的文件和所述待存储文件是否均添加到所述待合并队列中;如果是,则将所述待合并队列中的所有文件合并成一个数据块,并清空所述待合并队列中的文件信息和删除已合并文件的源文件,再执行步骤F;否则,返回步骤B;

步骤F:将已合并的所有数据块存储到HDFS系统中。

3.根据权利要求2所述的基于Hadoop的海量小文件写入方法,其特征在于,所述用户访问偏好模型是根据用户访问日志记录而统计得出,具体为:从所述用户访问日志记录中统计得出活跃用户集;

采用bean对象表示所述活跃用户集访问过的小文件;所述小文件为大小小于或等于

2MB的文件;其中,所述bean对象的属性包括访问该小文件的用户ID、用户访问过的小文件名、以及该小文件被其访问过的次数;

结合JDBC技术,将所述bean对象持久化到Mysql数据库存储,并根据存储的数据,计算任意两个不同访问行为的相似度;

当所述任意两个不同访问行为的相似度为正时,确定所述任意两个访问行为的用户为相似用户,记录相似用户的id,并采用关联性文件集合存储所有相似用户访问过且具有关联的文件信息;

根据所述关联性文件集合,构建所述用户访问偏好模型。

4.根据权利要求1所述的基于Hadoop的海量小文件写入方法,其特征在于,所述HBase缓存模块采用的缓存方法为:获取用户访问日志记录,并从所述用户访问日志记录中统计得出活跃用户集;

结合对数线性模型,计算出所述活跃用户集中每个活跃用户访问过的文件的热度预测值,并按照热度预测值由大到小将各文件进行排序,将排名前20%的文件标记为热点文件;

获取所述热点文件,并采用Hbase数据库缓存所述热点文件的相关信息。

5.根据权利要求4所述的基于Hadoop的海量小文件写入方法,其特征在于,所述从所述用户访问日志记录中统计得出活跃用户集,具体为:筛选出所述用户访问日志记录中访问资源后缀名以jpg结尾的记录行;其中,所述记录行包括:用户IP、访问页面URL、访问起始时间、访问状态、访问流量;

编写日志解析类对所述记录行进行解析,并使用一个二维数组来存储访问者IP和小文件名;

遍历所述二维数组中的访问者IP,并使用HashMap集合统计每一个访问者IP访问量;所述HashMap集合的Key值为访问者IP,Value值是访问量;

对所述HashMap集合按照Value值来进行降序排序,筛选出排名靠前20%的访问者IP,使用ArrayList集合存储该IP子集,并标记为活跃用户集。

6.根据权利要求5所述的基于Hadoop的海量小文件写入方法,其特征在于,所述结合对数线性模型,计算出所述活跃用户集中每个活跃用户访问过的文件的热度预测值,并按照热度预测值由大到小将各文件进行排序,将排名前20%的文件标记为热点文件,具体为:将从所述ArrayList集合提取出的访问者IP,与从所述二维数组中提取出访问者IP进行匹配;

当匹配成功后,以匹配成功的访问者IP作为关键词,查询出每个用户的访问起始时间,再结合对数线性模型,计算出所述活跃用户集中每个活跃用户访问过的文件的热度预测值,并按照热度预测值由大到小将各文件进行排序,将排名前20%的文件标记为热点文件;

所述对数线性模型为:lnNi=k(t)lnNi(t)+b(t);

其中,Ni为文件i的热度预测值,Ni(t)为文件i在观察时间内的访问量,观察时间长度为t,k(t)与b(t)是线性关系的相关参数,根据线性回归方法计算得到的最优值。

说明书 :

一种基于Hadoop的海量小文件写入方法

技术领域

[0001] 本发明涉及计算机技术领域,尤其涉及一种基于Hadoop的海量小文件写入方法。

背景技术

[0002] Hadoop是Apache基金会在2005年作为Lucene的子项目Nutch中的一部分正式引入。Hadoop最关键的两大设计HDFS和MapReduce。而HDFS负责存储海量的数据,文件以数据块的形式存储在系统上。而HDFS的数据块比普通磁盘定义的数据块(一般是512B)大得多,HDFS目前默认的数据块大小是128MB。如果HDFS存储的文件大小大于128MB,它会将该文件切分成块大小的若干个分块,分开单独存储。而当HDFS不断的存储小文件量达到TB甚至PB级别时,小文件的问题就会产生,这是因为会有大量的元数据存储在HDFS的主节点namenode中,大大增加namenode的负载,从而会影响到系统的读取性能。其中,小文件的大小定义为2MB,即在HDFS存储文件中,当文件大小小于或等于2M,即被定义为小文件。
[0003] 现有技术对于海量小文件的处理都是将若干个小文件合并成一个block块大小的大文件,并没有考虑到文件之间的关联性,使得小文件的读取效率不太理想。

发明内容

[0004] 本发明实施例提出一种基于Hadoop的海量小文件写入方法,在结合小文件合并和HBase缓存机制后,写入后的小文件更容易被读取,能提高小文件的读取效率。
[0005] 本发明实施例提供一种基于Hadoop的海量小文件写入方法,包括:所述写入方法适用于具有数据合并模块和HBase缓存模块的HDFS系统;所述写入方法包括:
[0006] 接收用户输入的小文件写入命令;其中,所述小文件写入命令包括用户ID和小文件文件名;
[0007] 根据所述用户ID和所述小文件文件名查询所述HBase缓存模块;
[0008] 如果查询到相应的文件内容,则返回所述HBase缓存模块查询到的第一文件内容,写入所述小文件,并将写入所述小文件的第一文件内容上传并更新到所述HBase缓存模块中;如果查询不到相应的文件内容,则根据所述小文件文件名查询所述HDFS系统的数据库,并判断是否查询到相应的文件内容;
[0009] 如果是,则返回所述数据库查询到的第二文件内容,写入所述小文件,并将写入所述小文件的第二文件内容上传并更新到所述数据库中;
[0010] 否则,调用Hadoop archive工具的API访问所述小文件文件名对应的HAR文件,写入所述小文件,并将写入所述小文件的HAR文件上传更新到所述数据库中。
[0011] 进一步的,所述数据合并模块采用的数据合并方法为:
[0012] 步骤A:当客户端上传待存储文件后,遍历HDFS上所有的文件,结合用户访问偏好模型找出所述待存储文件的关联性文件集合;其中,所述用户访问偏好模型是根据用户访问日志记录而统计得出;
[0013] 步骤B:依次将所述关联性文件集合的中文件和所述待存储文件添加到待合并队列中;
[0014] 步骤C:判断所述待合并队列中的所有文件总大小是否超过128MB,如果是,则执行步骤D;否则,执行步骤E;
[0015] 步骤D:将所述待合并队列中的所有文件合并成一个数据块,并清空所述待合并队列中的文件信息和删除已合并文件的源文件,返回步骤B;
[0016] 步骤E:判断所述关联性文件集合的中文件和所述待存储文件是否均添加到所述待合并队列中;如果是,则将所述待合并队列中的所有文件合并成一个数据块,并清空所述待合并队列中的文件信息和删除已合并文件的源文件,再执行步骤F;否则,返回步骤B;
[0017] 步骤F:将已合并的所有数据块存储到HDFS系统中。
[0018] 进一步的,其特征在于,所述用户访问偏好模型是根据用户访问日志记录而统计得出,具体为:
[0019] 从所述用户访问日志记录中统计得出活跃用户集;
[0020] 采用bean对象表示所述活跃用户集访问过的小文件;所述小文件为大小小于或等于2MB的文件;其中,所述bean对象的属性包括访问该小文件的用户ID、用户访问过的小文件名、以及该小文件被其访问过的次数;
[0021] 结合JDBC技术,将所述bean对象持久化到Mysql数据库存储,并根据存储的数据,计算任意两个不同访问行为的相似度;
[0022] 当所述任意两个不同访问行为的相似度为正时,确定所述任意两个访问行为的用户为相似用户,将相似用户的id记录并采用关联性文件集合存储所有相似用户访问过且具有关联的文件信息;
[0023] 根据所述关联性文件集合,构建所述用户访问偏好模型。
[0024] 进一步的,其特征在于,所述HBase缓存模块采用的缓存方法为:
[0025] 获取用户访问日志记录,并从所述用户访问日志记录中统计得出活跃用户集;
[0026] 结合对数线性模型,计算出所述活跃用户集中每个活跃用户访问过的文件的热度预测值,并按照热度预测值由大到小将各文件进行排序,将排名前20%的文件标记为热点文件;
[0027] 获取所述热点文件,并采用Hbase数据库缓存所述热点文件的相关信息。
[0028] 进一步的,所述从所述用户访问日志记录中统计得出活跃用户集,具体为:
[0029] 筛选出所述用户访问日志记录中访问资源后缀名以jpg结尾的记录行;其中,所述记录行包括:用户IP、访问页面URL、访问起始时间、访问状态、访问流量;
[0030] 编写日志解析类对所述记录行进行解析,并使用一个二维数组来存储访问者IP和小文件名;
[0031] 遍历所述二维数组中的访问者IP,并使用HashMap集合统计每一个访问者IP访问量;所述HashMap集合的Key值为访问者IP,Value值是访问量;
[0032] 对所述HashMap集合按照Value值来进行降序排序,筛选出排名靠前20%的访问者IP,使用ArrayList集合存储该IP子集,并标记为活跃用户集。
[0033] 进一步的,所述结合对数线性模型,计算出所述活跃用户集中每个活跃用户访问过的文件的热度预测值,并按照热度预测值由大到小将各文件进行排序,将排名前20%的文件标记为热点文件,具体为:
[0034] 将从所述ArrayList集合提取出的访问者IP,与从所述二维数组中提取出访问者IP进行匹配;
[0035] 当匹配成功后,以匹配成功的访问者IP作为关键词,查询出每个用户的访问起始时间,再结合对数线性模型,计算出所述活跃用户集中每个活跃用户访问过的文件的热度预测值,并按照热度预测值由大到小将各文件进行排序,将排名前20%的文件标记为热点文件;
[0036] 所述对数线性模型为:lnNi=k(t)lnNi(t)+b(t);
[0037] 其中,Ni为文件i的热度预测值,Ni(t)为文件i在观察时间内的访问量,观察时间长度为t。
[0038] 实施本发明实施例,具有如下有益效果:
[0039] 本发明实施例提供的基于Hadoop的海量小文件写入方法,该写入方法适用于具有数据合并模块和HBase缓存模块的HDFS系统。该写入方法包括:接收用户输入的小文件写入命令;其中,小文件写入命令包括用户ID和小文件文件名;根据用户ID和小文件文件名查询先查询HBase缓存模块,如果查询到相应的第一文件内容,则返回第一文件内容,写入小文件,并将写入小文件的第一文件内容上传并更新到HBase缓存模块中;如果查询不到,则再去查询HDFS系统的数据库,如果查询到,则返回查询到的第二文件内容,并将写入小文件的第二文件内容上传并更新到数据库中;否则,调用Hadoop archive工具的API访问对应的HAR文件,写入小文件,并将写入小文件的HAR文件上传并更新到数据库中。相比于现有技术不考虑小文件之间的关联性和热点文件,本发明的写入方法在结合了小文件合并和HBase缓存机制后,写入后的小文件更容易被读取,能提高小文件的读取效率。

附图说明

[0040] 图1是本发明提供的基于Hadoop的海量小文件写入方法的一种实施例的流程示意图;
[0041] 图2是本发明提供的数据合并方法的一种实施例的流程示意图;
[0042] 图3是本发明提供的缓存方法的一种实施例的流程示意图;
[0043] 图4是本发明提供的缓存方法的另一种实施例的流程示意图。

具体实施方式

[0044] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0045] 参见图1,是本发明提供的基于Hadoop的海量小文件写入方法的一种实施例的流程示意图,该方法包括步骤101至步骤106。该写入方法适用于具有数据合并模块和HBase缓存模块的HDFS系统,各步骤具体如下:
[0046] 步骤101:接收用户输入的小文件写入命令;其中,小文件写入命令包括用户ID和小文件文件名。
[0047] 步骤102:根据用户ID和小文件文件名查询HBase缓存模块,并判断是否查询到相应的第一文件内容,如果是,则执行步骤105,否则,执行步骤103。
[0048] 步骤103:根据小文件文件名查询所述HDFS系统的数据库,并判断是否查询到相应的第二文件内容,如果是,则执行步骤106,否则,执行步骤104。
[0049] 步骤104:调用Hadoop archive工具的API访问小文件文件名对应的HAR文件,写入小文件,并将写入小文件的HAR文件上传更新到数据库中。
[0050] 步骤105:返回第一文件内容,写入小文件,并将写入小文件的第一文件内容上传并更新到HBase缓存模块中。
[0051] 步骤106:返回数据库查询到的第二文件内容,写入小文件,并将写入小文件的第二文件内容上传并更新到数据库中。
[0052] 参见图2,图2是本发明提供的数据合并方法的一种实施例的流程示意图,本发明的数据合并模块采用了图2所示的数据合并方法,包括步骤A至步骤F,各步骤具体如下:
[0053] 步骤A:当客户端上传待存储文件后,遍历HDFS上所有的文件,结合用户访问偏好模型找出待存储文件的关联性文件集合;其中,用户访问偏好模型是根据用户访问日志记录而统计得出。
[0054] 在本实施例中,用户访问偏好模型是根据用户访问日志记录而统计得出,具体为:从用户访问日志记录中统计得出活跃用户集;采用bean对象表示活跃用户集访问过的小文件;小文件为大小小于或等于2MB的文件;其中,bean对象的属性包括访问该小文件的用户ID、用户访问过的小文件名、以及该小文件被其访问过的次数;结合JDBC技术,将bean对象持久化到Mysql数据库存储,并根据存储的数据,计算任意两个不同访问行为的相似度;当任意两个不同访问行为的相似度为正时,确定任意两个访问行为的用户为相似用户,将相似用户的id记录并采用关联性文件集合存储所有相似用户访问过且具有关联的文件信息;
根据关联性文件集合,构建用户访问偏好模型。
[0055] 在本实施例中,从用户访问日志记录中统计得出活跃用户集,具体为:筛选出用户访问日志记录中访问资源后缀名以jpg结尾的记录行;其中,记录行包括:用户IP、访问页面URL、访问起始时间、访问状态、访问流量;编写日志解析类对记录行进行解析,并使用一个二维数组来存储访问者IP和小文件名;遍历二维数组中的访问者IP,并使用HashMap集合统计每一个访问者IP访问量;HashMap集合的Key值为访问者IP,Value值是访问量;对HashMap集合按照Value值来进行降序排序,筛选出排名靠前20%的访问者IP,使用ArrayList集合存储该IP子集,并标记为活跃用户集。
[0056] 为了更好的说明本发明的模型构建过程,以下面的例子说明,具体实现过程如下:
[0057] (1)利用正则表达式筛选出访问资源后缀名以jpg结尾的记录行。
[0058] (2)编写日志解析类对记录行的五个组成部分进行单独的解析,使用一个二维数组来存储访问者IP、小文件名。
[0059] (3)遍历二维数组中的访问者IP元素,设计一个计数器统计每一个访问者IP访问量。使用一个HashMap集合,访问者IP作为Key值,Value值是该访问者的访问量。
[0060] (4)对步骤3产生的HashMap集合按照Value值来进行降序排序,筛选出排名靠前20%的访问者IP,使用ArrayList集合存储该IP子集,标记为活跃用户集。
[0061] (5)使用一个bean对象抽象表示活跃用户集访问过的小文件,对象的属性包括访问该小文件的用户ID,用户访问过的小文件名,以及该小文件被其访问过的次数。方法为获取属性的get、set方法。
[0062] (6)结合JDBC技术bean对象持久化到Mysql数据库存储,形成以下格式的表所示:
[0063]
[0064] (7)在20行中两行之间取出数据,通过公式计算出两个不同用户访问行为
的相似度。其中,本发明采用Pearson相关系数确定相似用户,给定评分矩阵R,用户a和用户b的相似度采用sim(a,b)表示,ra、rb为“用户-访问量”评分矩阵的评分数据[0065] (8)这里设定当sim(a,b)的值为正时,可以判定两个不同用户是相似用户,记录下他们的用户ID。
[0066] (9)根据相似用户的用户ID,使用一个集合存储所有相似用户访问过且具有关联的文件信息。
[0067] 步骤B:依次将关联性文件集合的中文件和待存储文件添加到待合并队列中。
[0068] 步骤C:判断待合并队列中的所有文件总大小是否超过128MB,如果是,则执行步骤D;否则,执行步骤E。
[0069] 步骤D:将待合并队列中的所有文件合并成一个数据块,并清空待合并队列中的文件信息和删除已合并文件的源文件,返回步骤B。
[0070] 步骤E:判断关联性文件集合的中文件和待存储文件是否均添加到待合并队列中;如果是,则将待合并队列中的所有文件合并成一个数据块,并清空待合并队列中的文件信息和删除已合并文件的源文件,再执行步骤F;否则,返回步骤B。
[0071] 步骤F:将已合并的所有数据块存储到HDFS系统中。
[0072] 参见图3,图3是本发明提供的缓存方法的一种实施例的流程示意图。本发明的HBase缓存模块采用了图3的缓存方法,该方法包括301至步骤303,各步骤具体如下:
[0073] 步骤301:获取用户访问日志记录,并从用户访问日志记录中统计得出活跃用户集。
[0074] 在本实施例中,步骤301中从用户访问日志记录中统计得出活跃用户集,具体为:筛选出用户访问日志记录中访问资源后缀名以jpg结尾的记录行;其中,记录行包括:用户IP、访问页面URL、访问起始时间、访问状态、访问流量;编写日志解析类对记录行进行解析,并使用一个二维数组来存储访问者IP和小文件名;遍历二维数组中的访问者IP,并使用HashMap集合统计每一个访问者IP访问量;HashMap集合的Key值为访问者IP,Value值是访问量;对HashMap集合按照Value值来进行降序排序,筛选出排名靠前20%的访问者IP,使用ArrayList集合存储该IP子集,并标记为活跃用户集。
[0075] 本发明的步骤301要计算出活跃用户集的目的是,用户关于小文件的访问接近于帕累托分布规律而不是均匀的随机分布。即大部分的I/O请求访问少量的热门数据,大多数80%的访问量集中在20%的数据上。因此,如果能从文件系统存储的海量小文件通过模型预测出热点文件,再进行缓存,一定能将节省提高用户访问数据的效率。
[0076] 步骤302:结合对数线性模型,计算出活跃用户集中每个活跃用户访问过的文件的热度预测值,并按照热度预测值由大到小将各文件进行排序,将排名前20%的文件标记为热点文件。
[0077] 在本实施例中,步骤302具体为:将从ArrayList集合提取出的访问者IP,与从二维数组中提取出访问者IP进行匹配;当匹配成功后,以匹配成功的访问者IP作为关键词,查询出每个用户的访问起始时间,再结合对数线性模型,计算出活跃用户集中每个活跃用户访问过的文件的热度预测值,并按照热度预测值由大到小将各文件进行排序,将排名前20%的文件标记为热点文件;
[0078] 对数线性模型为:lnNi=k(t)lnNi(t)+b(t);
[0079] 其中,Ni为文件i的热度预测值,Ni(t)为文件i在观察时间内的访问量,观察时间长度为t。k(t)与b(t)是线性关系的相关参数,可以使用线性回归方法计算得到最优值。本发明的对数线性模型所提及到的观察时间长度t的定义是:用户访问日志记录中记录行的访问起始时间元素与收集到用户访问日志记录的时间差。例如收集到的用户访问日志记录的时间点是30/Jan/2018:17:38:20,而用户访问日志记录中记录行的访问起始时间为29/Jan/2018:10:35:15,观察时间长度是29/Jan/2018:10:35:15到30/Jan/2018:17:38:20之间的时间差,为了方便计算,时间长度以小时作为单位。
[0080] 步骤303:获取热点文件,并采用Hbase数据库缓存热点文件的相关信息。
[0081] 在本实施例中,采用Hbase数据库缓存热点文件的相关信息,HBase的表名值为访问者ID,HBase的RowKey设为小文件名,HBase的列族名为”file content”,Value值即单元格值为小文件内容。当用户访问HBase中的小文件时,只需根据用户ID作为表名和所要访问的小文件名作为HBase的get()方法的参数,就可以获取对应的小文件内容。
[0082] 为了更好的说明本发明的缓存方法,参见图4,图4是本发明提供的缓存方法的另一种实施例的流程示意图。如图4所示,该流程包括:用户访问记录集→正则表达式过滤筛选出所需的记录行→解析记录行→使用bean对象封装好记录行信息→调研JDBC API将bean对象持久化到Mysql数据库→使用一个二维数组存储访问者IP与小文件名信息→遍历数组,统计出用户访问量→根据用户访问量进行排序,使用ArrayList集合存储活跃用户集的用户IP→将二维数组和活跃用户集中的访问者IP进行匹配→匹配成功时,以访问者IP作为关键词,提取出用户访问起始时间和访问量→使用文件热度预测公式计算出文件热度值→对文件热度值进行排序,标记处热点文件→HBase缓存热点文件相关信息。
[0083] 由上可见,本发明实施例提供的基于Hadoop的海量小文件写入方法,该写入方法适用于具有数据合并模块和HBase缓存模块的HDFS系统。该写入方法包括:接收用户输入的小文件写入命令;其中,小文件写入命令包括用户ID和小文件文件名;根据用户ID和小文件文件名查询先查询HBase缓存模块,如果查询到相应的第一文件内容,则返回第一文件内容,写入小文件,并将写入小文件的第一文件内容上传并更新到HBase缓存模块中;如果查询不到,则再去查询HDFS系统的数据库,如果查询到,则返回查询到的第二文件内容,并将写入小文件的第二文件内容上传并更新到数据库中;否则,调用Hadoop archive工具的API访问对应的HAR文件,写入小文件,并将写入小文件的HAR文件上传并更新到数据库中。相比于现有技术不考虑小文件之间的关联性和热点文件,本发明的写入方法在结合了小文件合并和HBase缓存机制后,写入后的小文件更容易被读取,能提高小文件的读取效率。
[0084] 进一步的,本发明提供了一种数据合并方法,能提高小文件的读取效率,减少HDFS系统中namenode内存的消耗。
[0085] 进一步的,本发明数据合并方法将多个具有关联的小文件合并成一个大文件后再存入系统,系统的namenode节点只会存有一份大文件所对应的元数据,namenode节点需要维护的元数据量会大大减少,内存的消耗也就会减小。
[0086] 进一步的,本发明数据合并方式是将相关联文件合并在同一个大的文件中,文件被合并后是存储在同一个的datanode的同一个数据块中。当用户对文件的请求具有很强的关联性,即只要用户不断访问的小文件是合并在同一个大文件,根据文件访问原则,系统会选择较近datanode节点上的数据块读取,也就是不断的从同一个datanode的数据块读取数据,这样避免了不同文件访问时需要在不同的数据节点间跳转,减少了磁盘寻址开销,占用的系统资源相对较少,大大提高了文件的读取效率。
[0087] 进一步的,本发明提供了一种缓存方法,相比于现有技术没有考虑用户访问的热点文件,本发明通过HBase缓存热度文件,不仅提高了缓存的命中率,而且加快了文件的读取效率。
[0088] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
[0089] 以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。