SequenceFile
本质上是一种二进制文件格式
,类似key-value
存储,通过map/reducer
的input/output format
方式生成。文件内容由Header、Record/Block、SYNC
标记组成,根据压缩的方式不同,组织结构也不同,主要分为Record组织模式
和Block组织模式
。
有什么用?
我们应该了解SequenceFile
尝试解决哪些问题,然后SequenceFile
如何帮助解决问题。
在 HDFS
中,SequenceFile
是 Hadoop
中小文件
问题的解决方案之一。
小文件明显小于 HDFS 块大小 (128MB)。
HDFS 中的每个文件、目录和块都表示为对象,占用 150 字节。
1000 万个文件,将使用 NameNode 的大约 3 GB 内存。
十亿个文件是不可行的。
在MapReduce中
map任务通常一次处理输入块(使用默认的 FileInputFormat
)。
文件数量越多,需要map
任务的数量就更多,作业时间可能越慢。
小型文件方案
The files are pieces of a larger logical file.
The files are inherently small, for example, images.
这两种情况需要不同的解决方案。
对于第一个,编写一个程序来将小文件串联在一起
。(见内森 · 马兹的帖子, 关于一个叫做合并器的工具, 它正是这样做的)
对于第二个容器,需要某种容器来对文件进行分组
。
Hadoop 中的解决方案
HAR
文件
HAR(Hadoop档案馆)
被引入,以减轻许多文件给namenode
带来压力的问题。
HARs
可能最好纯粹用于存档目的。
SequenceFile
SequenceFile
的概念是将每个小文件放在一个更大的单个文件中。
例如,假设有 10,000 个 100KB
文件,那么我们可以编写一个程序,将它们放入如下所示的单个序列文件中,其中您可以使用文件名作为键,内容作为值。
一些好处:
NameNode
上需要的内存数量较少。 继续以10,000个100KB
文件为例,
在使用SequenceFile
之前,NameNode
中有10,000个对象占用约4.5MB
的RAM
。
在使用带有8个HDFS块的1GB SequenceFile,SequenceFile
之后,这些对象在NameNode
中占据约3.6KB
的RAM
。
SequenceFile
是可拆分的,因此适用于MapReduce
。
SequenceFile
支持压缩。
受支持的压缩,文件结构取决于压缩类型。
第一种是不压缩
第二种是record形式的压缩
第三种是block形式的压缩
等待直到数据达到块大小以进行压缩。
Block压缩
比Record压缩
提供更好的压缩率。
使用SequenceFile
时,通常首选Block压缩
。
这里的Block
与HDFS
或文件系统Block无
关。
总结
Hadoop SequenceFile
是Hadoop
的小文件解决方式之一Hadoop SequenceFile
格式可以进行切分Hadoop SequenceFile
有多种压缩方式,不过优先选择块压缩
参考
Hadoop小文件存储方案 - ballwql - 博客园
https://www.cnblogs.com/ballwql/p/8944025.html
What is sequence file in hadoop? - Stack Overflow
https://stackoverflow.com/questions/34243134/what-is-sequence-file-in-hadoop