mapreduce hadoop中输入分割数与映射器数之间的关系

时间:2015-09-30 22:09:15

标签: hadoop mapreduce

我是hadoop的新手和地图缩小模型并试图让这些概念正确。

我首先想要获得输入拆分的概念和映射器的数量。

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

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

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

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

2)如何确定地图制作者的数量?我试图通过以下行来获得映射器的数量来理解mapreduce的工作流程。

{{1}}

每次返回2。

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

4)做上面的事情取决于集群?对于伪分布式模式和其他集群是否相同或不同?

谢谢。

1 个答案:

答案 0 :(得分:9)

在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. 不,它对于伪模式和集群模式都是一样的。
  5. 更多信息:

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