2015-09-30 49 views
1

我是hadoop和map缩小模型的新手,并试图让概念正确。mapreduce输入分割数量和mapper数量之间的关系hadoop

我首先想要了解输入分割的概念和映射器的数量是否正确。

我正在运行mapreduce wordcount程序,以下是我的问题。

1)如何确定输入分割? 我在2个不同大小的输入的同一集群上运行相同的程序。

file 1 : size 48mb. => i got number of splits:1 in log. 
file 2: size 126mb => number of splits : 1 
file 2 : size 126mb (executed in eclipse IDE) => number of splits: 4 

不应该是126 MB文件的分割数等于2吗?因为我已经读过,块的大小是64 MB。所以它必须创建2个分割。

2)如何确定mappers的数量?我试图通过以下行来获取mappers的数量以了解mapreduce的工作流程。

conf.get("mapred.map.tasks") 

它每次返回2。

3)分割数量和映射器数量之间是否有任何关系?

4)做以上事情取决于集群?伪分布式和其他集群还是不同?

谢谢。

回答

8

在MapReduce InputFormat类负责提供拆分信息。输入拆分是进入一个映射任务的数据量。

  1. 从Hadoop 2.4的默认块大小是128MB,因此您看到1 126MB文件拆分。
  2. 映射器的数量由输入路径的分割数量决定,假定如果您正在处理一个具有10个文件的目录并且每个文件由10个分割组成,那么您的工作将需要100个映射器来处理数据。
  3. 是的,就像我在大多数情况下所说的number of splits = number of mappers除非Hadoop知道如何计算拆分。例如在Gzip等压缩文件格式的情况下,在这种情况下不可拆分number of files = number of mappers
  4. 不,对于伪和集群模式它是相同的。

的更多信息:

  1. Default split size and changing split size
  2. How are splits calculated
  3. Record splits across block boundaries
相关问题