Hadoop SequenceFile存储格式入门

SequenceFile本质上是一种二进制文件格式,类似key-value存储,通过map/reducerinput/output format方式生成。文件内容由Header、Record/Block、SYNC标记组成,根据压缩的方式不同,组织结构也不同,主要分为Record组织模式Block组织模式

有什么用?

我们应该了解SequenceFile尝试解决哪些问题,然后SequenceFile如何帮助解决问题。

HDFS 中,SequenceFileHadoop小文件问题的解决方案之一。

小文件明显小于 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.5MBRAM
在使用带有8个HDFS块的1GB SequenceFile,SequenceFile之后,这些对象在NameNode中占据约3.6KBRAM

SequenceFile是可拆分的,因此适用于MapReduce
SequenceFile支持压缩。

受支持的压缩,文件结构取决于压缩类型。

第一种是不压缩
第二种是record形式的压缩
在这里插入图片描述
第三种是block形式的压缩
在这里插入图片描述
等待直到数据达到块大小以进行压缩。
Block压缩Record压缩提供更好的压缩率。
使用SequenceFile时,通常首选Block压缩
这里的BlockHDFS或文件系统Block无关。

总结

  • Hadoop SequenceFileHadoop的小文件解决方式之一
  • 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值