hadoop中的序列文件是什么?

问题描述 投票:10回答:1

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

file hadoop input mapreduce sequence
1个回答
49
投票

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

在HDFS中

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

在MapReduce中

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

  • [文件数量越多,所需的Map任务数量就越多,作业时间可能会变慢。

小文件方案

  • 文件是更大的逻辑文件的一部分。
  • 文件本质上很小,例如图像。

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

  • [对于第一个,编写一个程序将小文件连接在一起。(请参阅Nathan Marz的post关于名为Consolidator的工具的确切说明)]
  • 对于第二个,需要某种容器以某种方式对文件进行分组。

Hadoop解决方案

HAR文件

  • 引入HAR(Hadoop Archives)来缓解文件过多问题,从而给namenode的内存带来压力。
  • HAR可能最好仅用于存档目的。

SequenceFile

  • SequenceFile的概念是将每个小文件放入一个较大的单个文件。
  • 例如,假设有10,000个100KB文件,那么我们可以编写一个程序将它们放入单个SequenceFile中,如下所示,您可以在其中使用filename作为键,而内容可以作为值。

    SequenceFile File Layout((来源:csdn.net

  • 一些好处:

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

    1. 未压缩
    2. Record-Compressed:在将每个记录添加到文件时对其进行压缩。record_compress_seq((来源:csdn.net

    3. 块压缩这里写图片描述(来源:csdn.net

      • 等待数据达到要压缩的块大小。
      • 块压缩比记录压缩提供更好的压缩率。
      • 使用SequenceFile时,通常首选块压缩。
      • 这里的块与HDFS或文件系统块无关
© www.soinside.com 2019 - 2024. All rights reserved.