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

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

A Method of Writing Massive Small Files Based on Hadoop

The invention discloses a method for writing large and small files based on Hadoop, which is suitable for HDFS system with data merging module and HBase cache module. The method includes: receiving small file writing commands input by users; querying HBase cache module first according to user ID and small file name query; if querying the first file content, uploading and updating the first file content written to small file into HBase cache module; if not querying, then querying HDFS system. If the content of the second file is queried, the content of the second file written to the small file is uploaded and updated to the database; otherwise, the corresponding HAR file is accessed by calling the API of the Hadoop archive tool, and the HAR file written to the small file is uploaded and updated to the database. The writing method of the invention can improve the reading efficiency of small files.

【技术实现步骤摘要】
一种基于Hadoop的海量小文件写入方法
本专利技术涉及计算机
,尤其涉及一种基于Hadoop的海量小文件写入方法。
技术介绍
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块大小的大文件,并没有考虑到文件之间的关联性,使得小文件的读取效率不太理想。
技术实现思路
本专利技术实施例提出一种基于Hadoop的海量小文件写入方法,在结合小文件合并和HBase缓存机制后,写入后的小文件更容易被读取,能提高小文件的读取效率。本专利技术实施例提供一种基于Hadoop的海量小文件写入方法,包括:所述写入方法适用于具有数据合并模块和HBase缓存模块的HDFS系统;所述写入方法包括:接收用户输入的小文件写入命令;其中,所述小文件写入命令包括用户ID和小文件文件名;根据所述用户ID和所述小文件文件名查询所述HBase缓存模块;如果查询到相应的文件内容,则返回所述HBase缓存模块查询到的第一文件内容,写入所述小文件,并将写入所述小文件的第一文件内容上传并更新到所述HBase缓存模块中;如果查询不到相应的文件内容,则根据所述小文件文件名查询所述HDFS系统的数据库,并判断是否查询到相应的文件内容;如果是,则返回所述数据库查询到的第二文件内容,写入所述小文件,并将写入所述小文件的第二文件内容上传并更新到所述数据库中;否则,调用Hadooparchive工具的API访问所述小文件文件名对应的HAR文件,写入所述小文件,并将写入所述小文件的HAR文件上传更新到所述数据库中。进一步的,所述数据合并模块采用的数据合并方法为:步骤A:当客户端上传待存储文件后,遍历HDFS上所有的文件,结合用户访问偏好模型找出所述待存储文件的关联性文件集合;其中,所述用户访问偏好模型是根据用户访问日志记录而统计得出;步骤B:依次将所述关联性文件集合的中文件和所述待存储文件添加到待合并队列中;步骤C:判断所述待合并队列中的所有文件总大小是否超过128MB,如果是,则执行步骤D;否则,执行步骤E;步骤D:将所述待合并队列中的所有文件合并成一个数据块,并清空所述待合并队列中的文件信息和删除已合并文件的源文件,返回步骤B;步骤E:判断所述关联性文件集合的中文件和所述待存储文件是否均添加到所述待合并队列中;如果是,则将所述待合并队列中的所有文件合并成一个数据块,并清空所述待合并队列中的文件信息和删除已合并文件的源文件,再执行步骤F;否则,返回步骤B;步骤F:将已合并的所有数据块存储到HDFS系统中。进一步的,其特征在于,所述用户访问偏好模型是根据用户访问日志记录而统计得出,具体为:从所述用户访问日志记录中统计得出活跃用户集;采用bean对象表示所述活跃用户集访问过的小文件;所述小文件为大小小于或等于2MB的文件;其中,所述bean对象的属性包括访问该小文件的用户ID、用户访问过的小文件名、以及该小文件被其访问过的次数;结合JDBC技术,将所述bean对象持久化到Mysql数据库存储,并根据存储的数据,计算任意两个不同访问行为的相似度;当所述任意两个不同访问行为的相似度为正时,确定所述任意两个访问行为的用户为相似用户,将相似用户的id记录并采用关联性文件集合存储所有相似用户访问过且具有关联的文件信息;根据所述关联性文件集合,构建所述用户访问偏好模型。进一步的,其特征在于,所述HBase缓存模块采用的缓存方法为:获取用户访问日志记录,并从所述用户访问日志记录中统计得出活跃用户集;结合对数线性模型,计算出所述活跃用户集中每个活跃用户访问过的文件的热度预测值,并按照热度预测值由大到小将各文件进行排序,将排名前20%的文件标记为热点文件;获取所述热点文件,并采用Hbase数据库缓存所述热点文件的相关信息。进一步的,所述从所述用户访问日志记录中统计得出活跃用户集,具体为:筛选出所述用户访问日志记录中访问资源后缀名以jpg结尾的记录行;其中,所述记录行包括:用户IP、访问页面URL、访问起始时间、访问状态、访问流量;编写日志解析类对所述记录行进行解析,并使用一个二维数组来存储访问者IP和小文件名;遍历所述二维数组中的访问者IP,并使用HashMap集合统计每一个访问者IP访问量;所述HashMap集合的Key值为访问者IP,Value值是访问量;对所述HashMap集合按照Value值来进行降序排序,筛选出排名靠前20%的访问者IP,使用ArrayList集合存储该IP子集,并标记为活跃用户集。进一步的,所述结合对数线性模型,计算出所述活跃用户集中每个活跃用户访问过的文件的热度预测值,并按照热度预测值由大到小将各文件进行排序,将排名前20%的文件标记为热点文件,具体为:将从所述ArrayList集合提取出的访问者IP,与从所述二维数组中提取出访问者IP进行匹配;当匹配成功后,以匹配成功的访问者IP作为关键词,查询出每个用户的访问起始时间,再结合对数线性模型,计算出所述活跃用户集中每个活跃用户访问过的文件的热度预测值,并按照热度预测值由大到小将各文件进行排序,将排名前20%的文件标记为热点文件;所述对数线性模型为:lnNi=k(t)lnNi(t)+b(t);其中,Ni为文件i的热度预测值,Ni(t)为文件i在观察时间内的访问量,观察时间长度为t。实施本专利技术实施例,具有如下有益效果:本专利技术实施例提供的基于Hadoop的海量小文件写入方法,该写入方法适用于具有数据合并模块和HBase缓存模块的HDFS系统。该写入方法包括:接收用户输入的小文件写入命令;其中,小文件写入命令包括用户ID和小文件文件名;根据用户ID和小文件文件名查询先查询HBase缓存模块,如果查询到相应的第一文件内容,则返回第一文件内容,写入小文件,并将写入小文件的第一文件内容上传并更新到HBase缓存模块中;如果查询不到,则再去查询HDFS系统的数据库,如果查询到,则返回查询到的第二文件内容,并将写入小文件的第二文件内容上传并更新到数据库中;否则,调用Hadooparchive工具的API访问对应的HAR文件,写入小文件,并将写入小文件的HAR文件上传并更新到数据库中。相比于现有技术不考虑小文件之间的关联性和热点文件,本专利技术的写入方法在结合了小文件合并和HBase缓存机制后,写入后的小文件更容易被读取,能提高小文件的读取效率。附图说明图1是本专利技术提供的基于Hadoop的海量小文件本文档来自技高网...

【技术保护点】
1.一种基于Hadoop的海量小文件写入方法,其特征在于,包括:所述写入方法适用于具有数据合并模块和HBase缓存模块的HDFS系统;所述写入方法包括:接收用户输入的小文件写入命令;其中,所述小文件写入命令包括用户ID和小文件文件名;根据所述用户ID和所述小文件文件名查询所述HBase缓存模块;如果查询到相应的文件内容,则返回所述HBase缓存模块查询到的第一文件内容,写入所述小文件,并将写入所述小文件的第一文件内容上传并更新到所述HBase缓存模块中;如果查询不到相应的文件内容,则根据所述小文件文件名查询所述HDFS系统的数据库,并判断是否查询到相应的文件内容;如果是,则返回所述数据库查询到的第二文件内容,写入所述小文件,并将写入所述小文件的第二文件内容上传并更新到所述数据库中;否则,调用Hadoop archive工具的API访问所述小文件文件名对应的HAR文件,写入所述小文件,并将写入所述小文件的HAR文件上传更新到所述数据库中。

【技术特征摘要】
1.一种基于Hadoop的海量小文件写入方法,其特征在于,包括:所述写入方法适用于具有数据合并模块和HBase缓存模块的HDFS系统;所述写入方法包括:接收用户输入的小文件写入命令;其中,所述小文件写入命令包括用户ID和小文件文件名;根据所述用户ID和所述小文件文件名查询所述HBase缓存模块;如果查询到相应的文件内容,则返回所述HBase缓存模块查询到的第一文件内容,写入所述小文件,并将写入所述小文件的第一文件内容上传并更新到所述HBase缓存模块中;如果查询不到相应的文件内容,则根据所述小文件文件名查询所述HDFS系统的数据库,并判断是否查询到相应的文件内容;如果是,则返回所述数据库查询到的第二文件内容,写入所述小文件,并将写入所述小文件的第二文件内容上传并更新到所述数据库中;否则,调用Hadooparchive工具的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技术...

【专利技术属性】
技术研发人员:谢桂园彭建烽魏文国戴青云蔡君赵慧民
申请(专利权)人:广东技术师范学院
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1