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

5

我在理解如何存储大文件方面遇到了一些问题。例如,我的HDFS块大小为128MB,我有一个1GB的文件。

我知道保存小于块大小的文件并不是最佳实践,而且我也明白原因。

但对于大文件,比如我的1GB文件,我应该保存一个文件还是8个大小为128MB的文件?为什么?

1个回答

5

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

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

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


如果您正在读取的文件格式不可分割,那么您的MapReduce/Spark/Flink/Tez任务将不得不在没有并行性的情况下读取整个大文件。因此,拥有非常大的文件也是一个问题。 - pavel_orekhov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接