我对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(每块一个)?
答案 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中处理记录存在默认设置。