hadoop中的序列文件是啥?

Posted

技术标签:

【中文标题】hadoop中的序列文件是啥?【英文标题】:What is sequence file in hadoop?hadoop中的序列文件是什么? 【发布时间】:2016-03-18 12:33:11 【问题描述】:

我是 Map-reduce 的新手,我想了解什么是序列文件数据输入?我学习了 Hadoop 书籍,但我很难理解。

【问题讨论】:

我想如果你能把一个特定的问题排除在你的研究之外会更好。 重点是网上有很多关于序列文件的资源。但是我想知道是否有人可以轻松地说明序列文件的结构? 我的意思是我们应该在序列文件中考虑的键和值到底是什么。它们与纯文本有什么区别?序列文件是什么样的? Hadoop Sequence File. 【参考方案1】:

首先我们应该了解SequenceFile试图解决什么问题,然后SequenceFile如何帮助解决问题。

在 HDFS 中

SequenceFile 是 Hadoop 中小文件问题的解决方案之一。 小文件明显小于 HDFS 块大小 (128MB)。 HDFS中的每个文件、目录、块都表示为对象,占用150字节。 1000 万个文件,将使用大约 3 GB 的 NameNode 内存。 十亿个文件是不可行的。

在 MapReduce 中

Map 任务通常一次处理一个输入块(使用默认的 FileInputFormat)。

文件数越多,需要的Map任务数越多,作业时间会慢很多。

小文件场景

这些文件是一个更大的逻辑文件的片段。 文件本身就很小,例如图像。

这两种情况需要不同的解决方案。

对于第一个,编写一个程序将小文件连接在一起。(参见 Nathan Marz 的 post 关于一个名为 Consolidator 的工具,它正是这样做的) 对于第二个,需要某种容器以某种方式对文件进行分组。

Hadoop 中的解决方案

HAR 文件

引入了 HAR(Hadoop Archives) 以缓解大量文件对 namenode 内存造成压力的问题。 HAR 可能最适合纯粹用于存档目的。

序列文件

SequenceFile 的概念是将每个小文件放到一个更大的单个文件中。

例如,假设有 10,000 个 100KB 的文件,那么我们可以编写一个程序将它们放入如下所示的单个 SequenceFile 中,其中可以使用文件名作为键,使用内容作为值。

(来源:csdn.net)

一些好处:

    NameNode 上需要的内存数量较少。继续以 10,000 个 100KB 文件为例, 在使用 SequenceFile 之前,10,000 个对象在 NameNode 中占用大约 4.5MB 的 RAM。 使用SequenceFile、1GB SequenceFile 和8 个HDFS 块后,这些对象在NameNode 中占用了大约3.6KB 的RAM。 SequenceFile 是可拆分的,因此适用于 MapReduce。 SequenceFile 支持压缩。

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

    未压缩

    压缩记录:在将每条记录添加到文件时对其进行压缩。 (来源:csdn.net)

    块压缩 (来源:csdn.net)

    等待数据达到要压缩的块大小。 块压缩比记录压缩提供更好的压缩比。 块压缩通常是使用 SequenceFile 时的首选选项。 此处的块与 HDFS 或文件系统块无关

【讨论】:

您确定链接有效吗?抱歉,我无法打开链接。 链接已失效。仅链接的答案被认为是糟糕的答案。 最佳答案佳明,谢谢 这个答案是从“小文件问题”(2009,Balint Szele,cloudera)复制而来的:blog.cloudera.com/blog/2009/02/the-small-files-problem你可以在那里找到详细的解释。

以上是关于hadoop中的序列文件是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop 序列文件中的压缩

反序列化内存中的 Hadoop 序列文件对象

Hadoop文件系统中目录的路径是啥?

在hadoop中存储多个小文件的最佳位置是啥

请帮助 Hadoop 中的 Shuffle 和 Sorting 的必要性是啥?

请问hadoop的hdfs文件系统和本地windows文件系统或linux文件系统是啥关系啊,谢谢