Haddop MapReduce:具有TextInputFormat的映射器数量

时间:2019-05-06 06:47:46

标签: hadoop mapreduce hdfs

我对MapReduce作业产生的映射器数量有些困惑。

我在很多地方都知道映射器的数量与数量无关 块数,但取决于分割数,即映射数由InputFormat确定。 Mapper = {(总数据大小)/(输入拆分大小)}

示例-数据大小为1 TB,输入拆分大小为128 MB。

映射器数量=(1 * 1024 * 1024)/ 128 = 8192

如果我的输入格式为FileInputFormat,则上述内容似乎正确。

但是如果我的输入格式是TextInputFormat,该怎么办?

假设我有一个文件大小为1 GB,默认块大小为128MB(在Hadoop 2.x中),块数为8。

该文件是一个文本文件,每行占用1MB。

  • 总行数:1024

  • 每个块中的总行数:128

现在,当我将inputFormat设置为TextInputFormat时,Hadoop将产生多少个映射器。

是1024(每行一个)还是8(每块一个)?

1 个答案:

答案 0 :(得分:0)

您使问题感到困惑。

在可怕的JAVA Map Reduce中举一个典型的例子:

FileInputFormat.setInputPaths(job, new Path(baseDir, CONTROL_DIR_NAME));
job.setInputFormat(SequenceFileInputFormat.class);

简单地如下:

  • FileInputFormat指定要从中读取数据文件的输入目录。 FileInputFormat将读取所有文件,并将这些文件分为一个或多个InputSplits。所以你的主张是正确的。

  • TextInputFormat是MapReduce的默认InputFormat。还有其他类似SequenceFileInputFormat。输入拆分始终应用,并且与TextInputFormat上的讨论正交。

前者是必需的,后者是可选的,因为在MR中处理记录存在默认设置。