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

Kev*_*hah 1 hadoop mapreduce

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

我首先想要得到输入拆分的概念和映射器的数量是正确的.

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

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

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
Run Code Online (Sandbox Code Playgroud)

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

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

conf.get("mapred.map.tasks")
Run Code Online (Sandbox Code Playgroud)

它每次返回2.

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

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

谢谢.

Ash*_*ith 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. 不,它对于伪模式和集群模式都是一样的.

更多信息:

  1. 默认分割大小和更改分割大小
  2. 如何计算拆分
  3. 记录跨块边界的拆分