一种基于用户访问偏好模型的海量小文件存储方法与流程

文档序号:15999380发布日期:2018-11-20 19:15阅读:144来源:国知局

本发明涉及计算机技术领域,尤其涉及一种基于用户访问偏好模型的海量小文件存储方法。



背景技术:

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

现有技术对于海量小文件的处理都是将若干个小文件合并成一个block块大小的大文件,并没有考虑到文件之间的关联性,使得小文件的读取效率不太理想。



技术实现要素:

本发明实施例提出一种基于用户访问偏好模型的海量小文件存储方法,能提高小文件的读取效率,减少HDFS系统中namenode内存的消耗。

本发明实施例提供一种基于用户访问偏好模型的海量小文件存储方法,包括:

步骤A:当客户端上传待存储文件后,遍历HDFS上所有的文件,结合用户访问偏好模型找出所述待存储文件的关联性文件集合;其中,所述用户访问偏好模型是根据用户访问日志记录而统计得出;

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

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

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

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

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

进一步的,所述用户访问偏好模型是根据用户访问日志记录而统计得出,具体为:

从所述用户访问日志记录中统计得出活跃用户集;

采用bean对象表示所述活跃用户集访问过的小文件;所述小文件为大小小于或等于2MB的文件;其中,所述bean对象的属性包括访问该小文件的用户ID、用户访问过的小文件名、以及该小文件被其访问过的次数;

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

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

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

进一步的,所述从所述用户访问日志记录中统计得出活跃用户集,具体为:

筛选出所述用户访问日志记录中访问资源后缀名以jpg结尾的记录行;其中,所述记录行包括:用户IP、访问页面URL、访问起始时间、访问状态、访问流量;

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

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

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

实施本发明实施例,具有如下有益效果:

本发明实施例提供的基于用户访问偏好模型的海量小文件存储方法,先结合用户访问偏好模型找出关联性文件集合,再依次将其添加到待合并队列中,如果待合并队列中的文件大小超过128MB,则先将队列中的所有文件合并成一个数据块,并清空待合并队列中的文件信息和删除已合并文件的源文件,直到所有文件都添加到待合并队列中。如果文件添加完,待合并队列中的文件大小不够128MB,则将该队列中所有文件合并成一个数据块,并清空待合并队列中的文件信息和删除已合并文件的源文件;最后将已合并的所有数据块存储到HDFS系统中。相比于现有技术不考虑小文件之间的关联性,本发明技术方案能提高小文件的读取效率,减少HDFS系统中namenode内存的消耗。

附图说明

图1是本发明提供的基于用户访问偏好模型的海量小文件存储方法的一种实施例的流程示意图。

具体实施方式

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

参见图1,是本发明提供的基于用户访问偏好模型的海量小文件存储方法的一种实施例的流程示意图,该方法包括步骤A至步骤F。各步骤具体如下:

步骤A:当客户端上传待存储文件后,遍历HDFS上所有的文件,结合用户访问偏好模型找出待存储文件的关联性文件集合;其中,用户访问偏好模型是根据用户访问日志记录而统计得出。

在本实施例中,用户访问偏好模型是根据用户访问日志记录而统计得出,具体为:从用户访问日志记录中统计得出活跃用户集;采用bean对象表示活跃用户集访问过的小文件;小文件为大小小于或等于2MB的文件;其中,bean对象的属性包括访问该小文件的用户ID、用户访问过的小文件名、以及该小文件被其访问过的次数;结合JDBC技术,将bean对象持久化到Mysql数据库存储,并根据存储的数据,计算任意两个不同访问行为的相似度;当任意两个不同访问行为的相似度为正时,确定任意两个访问行为的用户为相似用户,将相似用户的id记录并采用关联性文件集合存储所有相似用户访问过且具有关联的文件信息;根据关联性文件集合,构建用户访问偏好模型。

在本实施例中,从用户访问日志记录中统计得出活跃用户集,具体为:筛选出用户访问日志记录中访问资源后缀名以jpg结尾的记录行;其中,记录行包括:用户IP、访问页面URL、访问起始时间、访问状态、访问流量;编写日志解析类对记录行进行解析,并使用一个二维数组来存储访问者IP和小文件名;遍历二维数组中的访问者IP,并使用HashMap集合统计每一个访问者IP访问量;HashMap集合的Key值为访问者IP,Value值是访问量;对HashMap集合按照Value值来进行降序排序,筛选出排名靠前20%的访问者IP,使用ArrayList集合存储该IP子集,并标记为活跃用户集。

为了更好的说明本发明的模型构建过程,以下面的例子说明,具体实现过程如下:

(1)利用正则表达式筛选出访问资源后缀名以jpg结尾的记录行。

(2)编写日志解析类对记录行的五个组成部分进行单独的解析,使用一个二维数组来存储访问者IP、小文件名。

(3)遍历二维数组中的访问者IP元素,设计一个计数器统计每一个访问者IP访问量。使用一个HashMap集合,访问者IP作为Key值,Value值是该访问者的访问量。

(4)对步骤3产生的HashMap集合按照Value值来进行降序排序,筛选出排名靠前20%的访问者IP,使用ArrayList集合存储该IP子集,标记为活跃用户集。

(5)使用一个bean对象抽象表示活跃用户集访问过的小文件,对象的属性包括访问该小文件的用户ID,用户访问过的小文件名,以及该小文件被其访问过的次数。方法为获取属性的get、set方法。

(6)结合JDBC技术bean对象持久化到Mysql数据库存储,形成以下格式的表所示:

(7)在20行中两行之间取出数据,通过公式计算出两个不同用户访问行为的相似度。其中,本发明采用Pearson相关系数确定相似用户,给定评分矩阵R,用户a和用户b的相似度采用sim(a,b)表示,ra、rb为“用户-访问量”评分矩阵的评分数据

(8)这里设定当sim(a,b)的值为正时,可以判定两个不同用户是相似用户,记录下他们的用户ID。

(9)根据相似用户的用户ID,使用一个集合存储所有相似用户访问过且具有关联的文件信息。

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

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

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

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

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

本发明实施例提供的基于用户访问偏好模型的海量小文件存储方法,先结合用户访问偏好模型找出关联性文件集合,再依次将其添加到待合并队列中,如果待合并队列中的文件大小超过128MB,则先将队列中的所有文件合并成一个数据块,并清空待合并队列中的文件信息和删除已合并文件的源文件,直到所有文件都添加到待合并队列中。如果文件添加完,待合并队列中的文件大小不够128MB,则将该队列中所有文件合并成一个数据块,并清空待合并队列中的文件信息和删除已合并文件的源文件;最后将已合并的所有数据块存储到HDFS系统中。相比于现有技术不考虑小文件之间的关联性,本发明技术方案能提高小文件的读取效率,减少HDFS系统中namenode内存的消耗。

进一步的,本发明将多个具有关联的小文件合并成一个大文件后再存入系统,系统的namenode节点只会存有一份大文件所对应的元数据,namenode节点需要维护的元数据量会大大减少,内存的消耗也就会减小。

进一步的,本发明的合并的方式是将相关联文件合并在同一个大的文件中,文件被合并后是存储在同一个的datanode的同一个数据块中。当用户对文件的请求具有很强的关联性,即只要用户不断访问的小文件是合并在同一个大文件,根据文件访问原则,系统会选择较近datanode节点上的数据块读取,也就是不断的从同一个datanode的数据块读取数据,这样避免了不同文件访问时需要在不同的数据节点间跳转,减少了磁盘寻址开销,占用的系统资源相对较少,大大提高了文件的读取效率。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。

以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。

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