当前位置:  开发笔记 > 大数据 > 正文

什么是hadoop中的序列文件?

如何解决《什么是hadoop中的序列文件?》经验,为你挑选了1个好方法。

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



1> JiaMing Lin..:

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

在HDFS中

SequenceFile是Hadoop中小文件问题的解决方案之一.

小文件明显小于HDFS块大小(128MB).

HDFS中的每个文件,目录,块都表示为对象,占用150个字节.

1000万个文件,将使用大约3千兆字节的NameNode内存.

十亿个文件是不可行的.

在MapReduce中

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

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

小文件方案

这些文件是较大逻辑文件的一部分.

文件固有地很小,例如图像.

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

对于第一个,编写一个程序将小文件连接在一起.(参见Nathan Marz 关于一个名为Consolidator的工具的帖子,它正是这样做的)

对于第二个,需要某种容器以某种方式对文件进行分组.

Hadoop中的解决方案

HAR文件

引入了HAR(Hadoop Archives)来缓解大量文件对namenode内存施加压力的问题.

HAR可能最适合用于存档目的.

SequenceFile

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

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

SequenceFile文件布局http://img.blog.csdn.net/20151213123516719

一些好处:

    NameNode上需要较少的内存.继续10,000个100KB文件示例,

    在使用SequenceFile之前,10,000个对象在NameNode中占用大约4.5MB的RAM.

    在使用SequenceFile,1GB SequenceFile和8个HDFS块之后,这些对象在NameNode中占用大约3.6KB的RAM.

    SequenceFile是可拆分的,因此适用于MapReduce.

    SequenceFile支持压缩.

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

    未压缩

    记录压缩:压缩每个记录,因为它已添加到文件中. record_compress_seq http://img.blog.csdn.net/20151213182753789

    Block-Compressed 这里写图片描述http://img.blog.csdn.net/20151213183017236

    等待数据达到块大小以进行压缩.

    块压缩提供比Record压缩更好的压缩率.

    使用SequenceFile时,块压缩通常是首选选项.

    这里的阻塞与HDFS或文件系统块无关.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有