Hadoop 制图员人数

Hadoop 制图员人数,hadoop,mapreduce,Hadoop,Mapreduce,我在hdfs上有4个文件 1.txt、2.txt、3.txt和4.txt。在这4个文件中,前3个文件的数据内容如下,4.txt文件为空。如何执行mapper 映射器的数量=输入拆分的数量 我的问题是,所有这些文件是存储在一个64MB的块中还是存储在4个不同的块中?因为每个文件的数据大小小于64MB 1.txt这是文本文件1 这是文本文件2 这是文本文件3 4.txt“空” 它将存储在4个不同的块中,除非和直到您将其打包并存储在HAR文件中。其概念是,如果文件大小大于块大小,则单个文件将被拆分并存

我在hdfs上有4个文件

1.txt、2.txt、3.txt和4.txt。在这4个文件中,前3个文件的数据内容如下,4.txt文件为空。如何执行mapper

映射器的数量=输入拆分的数量

我的问题是,所有这些文件是存储在一个64MB的块中还是存储在4个不同的块中?因为每个文件的数据大小小于64MB

1.txt这是文本文件1

这是文本文件2

这是文本文件3

4.txt“空”


它将存储在4个不同的块中,除非和直到您将其打包并存储在HAR文件中。其概念是,如果文件大小大于块大小,则单个文件将被拆分并存储在不同的块中;如果文件大小小于块大小,则文件将独立存储在不同的块中。但是,即使块大小为64MB或更大,它也不会使用超过实际文件大小的文件。引用权威指南:

HDFS存储小文件效率低下,因为每个文件都存储在一个块中,而块元数据由namenode保存在内存中。因此,大量的小文件可能会占用namenode上的大量内存


因此,在您的情况下,它仍将使用4个映射器,因为我们有4个块。

默认情况下,HDFS不会将小文件合并到单个块中。 HDFS将所有文件存储在单独的块中,因此您的HDFS将使用4个块来存储您的4个文件(每个文件都小于dfs.block.size)。这并不意味着HDFS将占用4*64MB的大小。因此,您的MR作业将产生4个映射器来读取所有文件

理想情况下,您不应该在HDFS上存储小文件,因为这会增加Namenode上的负载

您可以在使用unix实用程序上载到HDFS之前组合这些文件,或者将文件转换为序列文件,或者编写pig脚本/hive脚本/mapreduce,将所有小文件组合成更大的文件。 HDFS上的小文件在这里有很好的描述: