hadoop中的序列文件是什么?

时间:2015-12-12 17:59:14

标签: file hadoop input mapreduce sequence

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

1 个答案:

答案 0 :(得分:43)

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

在HDFS中

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

在MapReduce中

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

  • 文件数量越多,Map任务需要的数量就越多,作业时间就会慢得多。

小文件方案

  • 这些文件是较大逻辑文件的一部分。
  • 文件本来就很小,例如图像。

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

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

Hadoop中的解决方案

HAR文件

  • 引入了HAR(Hadoop Archives)来缓解大量文件对namenode内存施加压力的问题。
  • HARs可能最适合用于存档目的。

<强> SequenceFile

  • SequenceFile的概念是将每个小文件放到一个更大的单个文件中。
  • 例如,假设有10,000个100KB文件,那么我们可以编写一个程序将它们放入一个像下面这样的SequenceFile中,在这里你可以使用filename作为键,将内容作为值。

    SequenceFile File Layout http://img.blog.csdn.net/20151213123516719

  • 一些好处:

    1. NameNode上需要的内存较少。继续10,000个100KB文件示例,
      • 在使用SequenceFile之前,10,000个对象在NameNode中占用大约4.5MB的RAM。
      • 使用SequenceFile,1GB SequenceFile和8个HDFS块后,这些对象在NameNode中占用大约3.6KB的RAM。
    2. SequenceFile是可拆分的,因此适用于MapReduce。
    3. SequenceFile支持压缩。
  • 支持的压缩,文件结构取决于压缩类型。

    1. 未压缩
    2. Record-Compressed:压缩添加到文件中的每条记录。 record_compress_seq http://img.blog.csdn.net/20151213182753789

    3. 块压缩 这里写图片描述 http://img.blog.csdn.net/20151213183017236

      • 等待数据达到块大小以进行压缩。
      • 块压缩比Record压缩提供更好的压缩率。
      • 使用SequenceFile时,块压缩通常是首选选项。
      • 此处的阻止与HDFS或文件系统阻止无关。