CN110069451A - 一种hdfs存储小文件的方法及装置 - Google Patents

一种hdfs存储小文件的方法及装置 Download PDF

Info

Publication number
CN110069451A
CN110069451A CN201910242789.4A CN201910242789A CN110069451A CN 110069451 A CN110069451 A CN 110069451A CN 201910242789 A CN201910242789 A CN 201910242789A CN 110069451 A CN110069451 A CN 110069451A
Authority
CN
China
Prior art keywords
file
hdfs
small documents
offset
rowkey
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201910242789.4A
Other languages
English (en)
Inventor
成军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Chaozhou Zhuoshu Big Data Industry Development Co Ltd
Original Assignee
Chaozhou Zhuoshu Big Data Industry Development Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Chaozhou Zhuoshu Big Data Industry Development Co Ltd filed Critical Chaozhou Zhuoshu Big Data Industry Development Co Ltd
Priority to CN201910242789.4A priority Critical patent/CN110069451A/zh
Publication of CN110069451A publication Critical patent/CN110069451A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供一种HDFS存储小文件的方法及装置,属于大数据文件处理领域,该方法通过“打包‑构建索引‑上传”的方式,来访问HDFS中的小文件,具体步骤如下:i.文件保存:1)将小文件上传至一个中转平台,文件以日期目录存储,每个文件都上传至当天日期的目录下;2)编写脚本,设置定时任务,将当天之前创建的目录打包成tar.gz包并上传至HDFS;3)编写gz解析程序,获取tar.gz包中文件的偏移量和长度;4)设计HBase rowkey,将文件名和gz路径存放到rowkey中;ii.文件查询获取:5)根据文件的日期和文件名,先计算出HBase rowkey,再到HBase中获取该文件的偏移量和长度;6)通过偏移量和长度调用HDFS去读取文件,提高了访问HDFS中的小文件的效率,节省了资源消耗。

Description

一种HDFS存储小文件的方法及装置
技术领域
本发明涉及大数据文件处理领域,具体地说是一种HDFS存储小文件的方法及装置。
背景技术
随着数据的增长,数据处理得到结果需要更长的时间。而这些数据中又包含大量的小文件,这种文件的size小于HDFS上block的大小,这样会给hadoop的性能带来严重问题。
首先,在HDFS中,任何block、文件或者目录在内存中均以对象的形式存储,每个对象约占150byte,如果有10000000个小文件,每个文件占用一个block,则namenode大约需要3G空间。如果存储1亿个文件,则namenode需要30G空间。这样namenode内存容量严重制约了集群的扩展。
其次,NameNode中的主内存大小限制了可以存储到HDFS中的文件的数量。此外,访问大量小文件速度远远小于访问几个大文件。HDFS最初是为流式访问大文件开发的,如果访问大量小文件,需要不断的从一个datanode跳到另一个datanode,严重影响性能。最后,处理大量小文件速度远远小于处理同等大小的大文件的速度。每一个小文件要占用一个slot,而task启动将耗费大量时间甚至大部分时间都耗费在启动task和释放task上。
经对现有技术的文献检索发现,肖玉泽等在《小型微型计算机系统》(2015年第10期)上发表了题为“HDFS下海量小文件高效存储与索引方法”的期刊,文中提出了一种基于多维列索引的小文件管理方案,支持文件的并发上传、下载及删除操作,并在多个查询维度上提供文件的自由检索。该方法虽然可以提高一定的效率,但对于内存方面的消耗依然很大,且没有综合考虑企业的成本问题。
在本专利中,我们将重点讨论在HDFS中处理小文件的有效方法,以提高其性能。
发明内容
本发明的技术任务是针对现有技术的不足,提供一种HDFS存储小文件的方法及装置。
本发明解决其技术问题所采用的技术方案是:
1、本发明提供一种HDFS存储小文件的方法,该方法通过“打包-构建索引-上传”的方式,来访问HDFS中的小文件,具体步骤如下:
i.文件保存:
1)将小文件上传至一个中转平台,文件以日期目录存储,每个文件都上传至当天日期的目录下;
2)编写脚本,设置定时任务,将当天之前创建的目录打包成tar.gz包,每天的文件只会产生一个目录,所以只会生成一个tar.gz包,将tar.gz包上传至HDFS;
3)编写gz解析程序,获取tar.gz包中文件的偏移量和长度;
4)获取文件的偏移量和长度后,设计HBase rowkey,将文件名和gz路径存放到rowkey中;
ii.文件查询获取:
5)根据文件的日期和文件名,先计算出HBase rowkey,再到HBase中获取该文件的偏移量和长度;
6)通过偏移量和长度调用HDFS去读取文件。
可选地,步骤2)具体包括如下步骤:
2.1)编写一个shell脚本,用于将指定目录下的文件夹打包成tar.gz包,命令为tar–zcvf 20190101xxxx.tar.gz 20190101;
2.2)在linux服务器上,通过crontab命令设计定时规则,定时执行shell脚本,shell脚本打包的是前一天的文件目录。
可选地,步骤3)具体包括如下步骤:
通过fseek()来计算文件的偏移量,函数设置文件指针stream的位置;
如果执行成功,stream将指向以fromwhere(偏移起始位置:文件头0(SEEK_SET),当前位置1(SEEK_CUR),文件尾2(SEEK_END))为基准,偏移offset(指针偏移量)个字节的位置;
如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
可选地,步骤6)中通过HDFS的API去读取文件的偏移量和长度。
可选地,步骤5)中到HBase中获取文件的偏移量和长度后,通过给Hbase rowkey加盐存储,使其随机分布在HBasse中,避免热点现象。
可选地,步骤5)中加盐存储是指给rowkey分配一个随机前缀以使得它和之前的rowkey的开头不同;分配的前缀种类数量与想使用数据分散到不同的region的数量一致;加盐之后的rowkey就会根据随机生成的前缀分散到各个region上。
可选地,rowkey在设计时,将经常读取的数据存储到一块,将最近可能会被访问的数据放到一块。
2、本发明另提供一种HDFS存储小文件的装置,包括:
客户端,用于接收小文件,并将小文件上传至指定目录下;
HDFS,用于将指定目录下的文件夹打包成tar.gz包;
Index构建模块,用于获取tar.gz包中文件的偏移量和长度,并根据该偏移量和长度构建对应的索引;
Index存储模块,用于存储对应的索引。
可选地,Index存储模块使用Hbase分布式数据库、Redis内存数据库、Mysql关系型数据库结合的方式存取对应的索引。
本发明的一种HDFS存储小文件的方法及装置,与现有技术相比所产生的有益效果是:
针对现有HDFS在存储大量小文件并对其进行分析时,性能会受到影响。对于太多的小文件,映射器的数量会增加,而大量的文件会导致内存使用增加的问题,本专利通过打包构建索引的方式,提高了访问HDFS中的小文件的效率,节省了资源消耗。具体地:
该操作首先是依赖编写程序并设置定时任务,将文件按天归类打包;
其次设计有Hbase rowkey,查询是也是通过Hbase rowkey获取文件的偏移量和长度;通过偏移量和长度即可调用HDFS的API去读取文件。
附图说明
附图1是本发明的结构模块图。
具体实施方式
下面结合附图1,对本发明的一种HDFS存储小文件的方法及装置作以下详细说明。
结合附图1,本发明另提供一种HDFS存储小文件的装置,包括:
客户端,用于接收小文件,并将小文件上传至指定目录下;
HDFS,用于将指定目录下的文件夹打包成tar.gz包;
Index构建模块,用于获取tar.gz包中文件的偏移量和长度,并根据该偏移量和长度构建对应的索引;
Index存储模块,使用Hbase分布式数据库、Redis内存数据库、Mysql关系型数据库结合的方式存取对应的索引。
本发明提供一种HDFS存储小文件的方法,该方法通过“打包-构建索引-上传”的方式,来访问HDFS中的小文件,具体步骤如下:
i.文件保存:
1)将小文件上传至一个中转平台,文件以日期目录存储,每个文件都上传至当天日期的目录下。
2)编写脚本,设置定时任务,将当天之前创建的目录打包成gz包(每天的文件只会产生一个目录,所以只会生成一个压缩包),将压缩包上传至HDFS。
定时策略:
编写一个shell脚本,用于将指定目录下的文件夹打包成tar.gz包,命令为tar–zcvf 20190101xxxx.tar.gz 20190101。在linux服务器上,通过crontab命令设计定时规则,可设计每天凌晨一点执行shell脚本,shell脚本打包的是前一天的文件目录。
3)编写gz解析程序,获取压缩包中文件的偏移量和长度。通过fseek()来计算文件的偏移量,函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere(偏移起始位置:文件头0(SEEK_SET),当前位置1(SEEK_CUR),文件尾2(SEEK_END))为基准,偏移offset(指针偏移量)个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
参考代码:
#include<stdio.h>
long filesize(FILE*stream);
int main(void)
{
FILE*stream;
stream=fopen("MYFILE.TXT","w+b");
fprintf(stream,"Thisisatest");
printf("FilesizeofMYFILE.TXTis%ldbytes\n",filesize(stream));
fclose(stream);
return 0;
}
long filesize(FILE*stream)
{
long curpos,length;
curpos=ftell(stream);
fseek(stream,0L,SEEK_END);
length=ftell(stream);
fseek(stream,curpos,SEEK_SET);
return length;
}
4)获取文件的偏移量和长度后,设计HBase rowkey,将文件名和gz路径存放到rowkey中,并通过给Hbase rowkey加盐等技术手段,使其随机分布在HBasse中,避免热点现象。HBase中存储的是文件的偏移量和长度,这样HBase中就保存了文件的元数据信息。
rowkey散列原则:
我们需要设计规则,使得数据不会集中出现在一个RegionServer上,这样会降低查询效率。我们可以通过加盐的方式来避免散列现象,具体就是给rowkey分配一个随机前缀以使得它和之前的rowkey的开头不同。分配的前缀种类数量应该和你想使用数据分散到不同的region的数量一致。加盐之后的rowkey就会根据随机生成的前缀分散到各个region上。
rowkey唯一原则:
必须在设计上保证其唯一性,rowkey是按照字典顺序排序存储的,因此,设计rowkey的时候,要充分利用这个排序的特点,将经常读取的数据存储到一块,将最近可能会被访问的数据放到一块。
ii.文件查询获取:
1)根据文件的日期和文件名,先计算出HBase rowkey,再到HBase中获取该文件的偏移量和长度。
2)通过偏移量和长度调用HDFS的API去读取文件。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
除说明书所述的技术特征外,均为本专业技术人员的已知技术。

Claims (9)

1.一种HDFS存储小文件的方法,其特征在于,该方法通过“打包-构建索引-上传”的方式,来访问HDFS中的小文件,具体步骤如下:
i.文件保存:
1)将小文件上传至一个中转平台,文件以日期目录存储,每个文件都上传至当天日期的目录下;
2)编写脚本,设置定时任务,将当天之前创建的目录打包成tar.gz包,每天的文件只会产生一个目录,所以只会生成一个tar.gz包,将tar.gz包上传至HDFS;
3)编写gz解析程序,获取tar.gz包中文件的偏移量和长度;
4)获取文件的偏移量和长度后,设计HBase rowkey,将文件名和gz路径存放到rowkey中;
ii.文件查询获取:
5)根据文件的日期和文件名,先计算出HBase rowkey,再到HBase中获取该文件的偏移量和长度;
6)通过偏移量和长度调用HDFS去读取文件。
2.根据权利要求1所述的一种HDFS存储小文件的方法,其特征在于,可选地,步骤2)具体包括如下步骤:
2.1)编写一个shell脚本,用于将指定目录下的文件夹打包成tar.gz包,命令为tar–zcvf 20190101xxxx.tar.gz 20190101;
2.2)在linux服务器上,通过crontab命令设计定时规则,定时执行shell脚本,shell脚本打包的是前一天的文件目录。
3.根据权利要求1或2所述的一种HDFS存储小文件的方法,其特征在于,步骤3)具体包括如下步骤:
通过fseek()来计算文件的偏移量,函数设置文件指针stream的位置;
如果执行成功,stream将指向以fromwhere(偏移起始位置:文件头0(SEEK_SET),当前位置1(SEEK_CUR),文件尾2(SEEK_END))为基准,偏移offset(指针偏移量)个字节的位置;
如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
4.根据权利要求1或2所述的一种HDFS存储小文件的方法,其特征在于,步骤6)中通过HDFS的API去读取文件的偏移量和长度。
5.根据权利要求1或2所述的一种HDFS存储小文件的方法,其特征在于,步骤5)中到HBase中获取文件的偏移量和长度后,通过给Hbase rowkey加盐存储,使其随机分布在HBasse中,避免热点现象。
6.根据权利要求5所述的一种HDFS存储小文件的方法,其特征在于,步骤5)中加盐存储是指给rowkey分配一个随机前缀以使得它和之前的rowkey的开头不同;分配的前缀种类数量与想使用数据分散到不同的region的数量一致;加盐之后的rowkey就会根据随机生成的前缀分散到各个region上。
7.根据权利要求1、2或6所述的一种HDFS存储小文件的方法,其特征在于,rowkey在设计时,将经常读取的数据存储到一块,将最近可能会被访问的数据放到一块。
8.一种HDFS存储小文件的装置,其特征在于,包括:
客户端,用于接收小文件,并将小文件上传至指定目录下;
HDFS,用于将指定目录下的文件夹打包成tar.gz包;
Index构建模块,用于获取tar.gz包中文件的偏移量和长度,并根据该偏移量和长度构建对应的索引;
Index存储模块,用于存储对应的索引。
9.根据权利要求8所述的一种HDFS存储小文件的装置,其特征在于,Index存储模块使用Hbase分布式数据库、Redis内存数据库、Mysql关系型数据库结合的方式存取对应的索引。
CN201910242789.4A 2019-03-28 2019-03-28 一种hdfs存储小文件的方法及装置 Pending CN110069451A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910242789.4A CN110069451A (zh) 2019-03-28 2019-03-28 一种hdfs存储小文件的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910242789.4A CN110069451A (zh) 2019-03-28 2019-03-28 一种hdfs存储小文件的方法及装置

Publications (1)

Publication Number Publication Date
CN110069451A true CN110069451A (zh) 2019-07-30

Family

ID=67366652

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910242789.4A Pending CN110069451A (zh) 2019-03-28 2019-03-28 一种hdfs存储小文件的方法及装置

Country Status (1)

Country Link
CN (1) CN110069451A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110881062A (zh) * 2019-10-18 2020-03-13 平安科技(深圳)有限公司 基于大数据的文件传输方法、装置、设备和存储介质
CN111367857A (zh) * 2020-03-03 2020-07-03 中国联合网络通信集团有限公司 数据存储方法、装置、ftp服务器及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6643654B1 (en) * 2001-06-25 2003-11-04 Network Appliance, Inc. System and method for representing named data streams within an on-disk structure of a file system
CN102902716A (zh) * 2012-08-27 2013-01-30 苏州两江科技有限公司 基于Hadoop分布式计算平台的存储系统
CN103279474A (zh) * 2013-04-10 2013-09-04 深圳康佳通信科技有限公司 一种视频文件索引方法及系统
CN104112013A (zh) * 2014-07-17 2014-10-22 浪潮(北京)电子信息产业有限公司 HBase二级索引方法及装置
CN104536959A (zh) * 2014-10-16 2015-04-22 南京邮电大学 一种Hadoop存取海量小文件的优化方法
CN106909651A (zh) * 2017-02-23 2017-06-30 郑州云海信息技术有限公司 一种基于hdfs小文件写入和读取的方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6643654B1 (en) * 2001-06-25 2003-11-04 Network Appliance, Inc. System and method for representing named data streams within an on-disk structure of a file system
CN102902716A (zh) * 2012-08-27 2013-01-30 苏州两江科技有限公司 基于Hadoop分布式计算平台的存储系统
CN103279474A (zh) * 2013-04-10 2013-09-04 深圳康佳通信科技有限公司 一种视频文件索引方法及系统
CN104112013A (zh) * 2014-07-17 2014-10-22 浪潮(北京)电子信息产业有限公司 HBase二级索引方法及装置
CN104536959A (zh) * 2014-10-16 2015-04-22 南京邮电大学 一种Hadoop存取海量小文件的优化方法
CN106909651A (zh) * 2017-02-23 2017-06-30 郑州云海信息技术有限公司 一种基于hdfs小文件写入和读取的方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110881062A (zh) * 2019-10-18 2020-03-13 平安科技(深圳)有限公司 基于大数据的文件传输方法、装置、设备和存储介质
CN111367857A (zh) * 2020-03-03 2020-07-03 中国联合网络通信集团有限公司 数据存储方法、装置、ftp服务器及存储介质

Similar Documents

Publication Publication Date Title
Chandrasekar et al. A novel indexing scheme for efficient handling of small files in hadoop distributed file system
Floratou et al. Column-oriented storage techniques for MapReduce
CN105868286B (zh) 基于分布式文件系统小文件合并的并行追加方法及系统
CN104243425B (zh) 一种在内容分发网络中进行内容管理的方法、装置及系统
US7752226B1 (en) Reverse pathname lookup by inode identifier
US20150347553A1 (en) Object Storage System with Local Transaction Logs, a Distributed Namespace, and Optimized Support for User Directories
US10747951B2 (en) Webpage template generating method and server
CN110069451A (zh) 一种hdfs存储小文件的方法及装置
US20170147602A1 (en) Allocating file system metadata to storage nodes of distributed file system
CN102882985A (zh) 基于云存储的文件共享方法
CN101539950A (zh) 数据存取方法和装置
US10423662B1 (en) Efficient and scalable time-series data storage and retrieval over a network
CN106874348A (zh) 文件存储和索引方法、装置及读取文件的方法
Rupprecht et al. SwiftAnalytics: Optimizing object storage for big data analytics
Changtong An improved HDFS for small file
US20130290383A1 (en) Mapping long names in a filesystem
CN104753626B (zh) 一种数据压缩方法、设备及系统
Renner et al. Addressing hadoop's small file problem with an appendable archive file format
CN105912696A (zh) 一种基于对数归并的dns索引创建方法及查询方法
CN102646133A (zh) 基于元数据存储的二维表及其组织方法
Gao et al. An effective merge strategy based hierarchy for improving small file problem on HDFS
CN111966742A (zh) 数据迁移方法及系统
Shang et al. Ndnfs: An ndn-friendly file system
Ramesh et al. Evolution and analysis of distributed file systems in cloud storage: analytical survey
Fattahi et al. A new approach for directory management in GlusterFS

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20190730