我在理解如何存储大文件方面遇到了一些问题。例如,我的HDFS块大小为128MB,我有一个1GB的文件。
我知道保存小于块大小的文件并不是最佳实践,而且我也明白原因。
但对于大文件,比如我的1GB文件,我应该保存一个文件还是8个大小为128MB的文件?为什么?
您可以存储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操作中产生不必要的开销。