HDFS - 一个大文件或几个块大小的小文件

Pac*_*chu 5 hadoop bigdata hdfs

所以我在理解应该以何种方式存储大文件时遇到一些问题。例如,我的 HDFS 中的块大小是 128MB,我有一个 1GB 的文件。

我知道保存小于块大小的文件不是最佳实践,我理解原因。

但是我应该如何处理大文件,对于我的 1GB 文件,我应该保存 1 个文件还是 8 个每个 128MB 的文件,为什么?

Str*_*ick 5

1GB 可以存储 1 个文件。Hadoop 会自动将该文件存储在 8 个块中。Hadoop 是为更大的文件而不是更小的文件而设计的。请注意,Block是hadoop中的物理存储。

由于您没有提到集群中的拆分大小,因此我假设它是 128 MB。拆分是并行性所依赖的东西。因此,如果您在 128 个分割大小上处理 1 GB 文件,将调用 8 个映射器(每个分割 1 个映射器)。如果您存储 8 个文件,每个文件 128 MB。您的 Namenode 上会产生不必要的开销来维护这 8 个文件的信息。在 8 个文件的情况下,性能可能与 1 GB 文件或多或少相似,但在具有 8 个块的 1 GB 文件的情况下,性能肯定会更好。

不要与hadoop中的块混淆,它们只是像其他文件系统一样的存储单元。无论文件有多大,Hadoop都会自动处理存储,并将文件分成块。存储小文件在 I/O 操作中不会产生不必要的开销。