您的位置:首页 > 产品设计 > UI/UE

HDFS小文件问题解决方案+SequenceFile简单介绍

2018-01-26 11:46 232 查看
HDFS和MR主要针对大数据文件来设计,在小文件处理上效率低.

解决方法是选择一个容器,将这些小文件包装起来,将整个文件作为一条记录,可以获取更高效率的储存和处理,避免多次打开关闭流耗费计算资源.

hdfs提供了两种类型的容器 SequenceFile和MapFile


小文件问题解决方案

1、在原有HDFS基础上添加一个小文件处理模块,具体操作流程如下:
2、当用户上传文件时,判断该文件是否属于小文件。
如果是,则交给小文件处理模块处理。
否则,交给通用文件处理模块处理。
在小文件模块中开启一定时任务,其主要功能是当模块中文件总size大于HDFS上block大小的文件时,则通过SequenceFile组件以文件名做key,相应的文件内容为value将这些小文件一次性写入hdfs模块。
3、同时删除已处理的文件,并将结果写入数据库。
4、当用户进行读取操作时,可根据数据库中的结果标志来读取文件。


SequenceFile

Sequence file由一系列的二进制key/value组成.
如果key为小文件名,value为文件内容,则可以将大批小文件合并成一个大文件。
Hadoop-0.21.0版本开始中提供了SequenceFile,包括Writer,Reader和SequenceFileSorter类进行写,读和排序操作。
该方案对于小文件的存取都比较自由,不限制用户和文件的多少,支持Append追加写入,支持三级文档压缩(不压缩、文件级、块级别)。


存储结构如图:



SequenceFile储存

文件中每条记录是可序列化,可持久化的键值对,提供相应的读写器和排序器,写操作根据压缩的类型分为3种
Write 无压缩写数据
RecordCompressWriter记录级压缩文件,只压缩值
BlockCompressWrite块级压缩文件,键值采用独立压缩方式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息