hadoop中的序列文件是什么?

0ejtzxu1  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(500)

我是新的Map减少,我想了解什么是序列文件数据输入?我学习过hadoop的书,但对我来说很难理解。

xfb7svmp

xfb7svmp1#

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

在hdfs中

sequencefile是hadoop中解决小文件问题的方法之一。
小文件明显小于hdfs块大小(128mb)。
hdfs中的每个文件、目录、块都表示为object,占用150字节。
1000万个文件,将使用namenode大约3g的内存。
十亿个文件是不可行的。

在mapreduce中

Map任务通常一次处理一个输入块(使用默认的fileinputformat)。
文件数量越多,Map任务需要的数量越多,作业时间可能会慢得多。

小文件场景

这些文件是较大的逻辑文件的一部分。
文件本身就很小,例如图像。
这两种情况需要不同的解决办法。
对于第一种方法,编写一个程序将小文件连接在一起(参见nathan marz关于一个名为consolidator的工具的文章,它正是这样做的)
对于第二种方法,需要某种容器以某种方式对文件进行分组。

hadoop中的解决方案

har文件
har(hadoop存档)的引入缓解了大量文件对namenode内存的压力。
HAR最好纯粹用于存档目的。
序列文件
sequencefile的概念是将每个小文件放到一个较大的单个文件中。
例如,假设有10000个100kb的文件,那么我们可以编写一个程序将它们放入一个sequencefile中,如下所示,您可以使用filename作为键,content作为值。

(来源:csdn.net)
一些好处:
namenode上需要的内存较少。继续10000 100kb文件示例,
在使用sequencefile之前,10000个对象在namenode中占用了大约4.5mb的ram。
在使用带有8个hdfs块的1gb的sequencefile之后,这些对象在namenode中占用了大约3.6kb的ram。
sequencefile是可拆分的,因此适用于mapreduce。
sequencefile支持压缩。
支持压缩,文件结构取决于压缩类型。
未压缩
record compressed:将每个记录添加到文件中时进行压缩。

(来源:csdn.net)
块压缩

(来源:csdn.net)
等待数据达到要压缩的块大小。
块压缩比记录压缩提供更好的压缩比。
使用sequencefile时,块压缩通常是首选选项。
这里的块与hdfs或文件系统块无关。

相关问题