hadoop mapreduce:具有textinputformat的Map程序数

ykejflvf  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(581)

我对mapreduce作业产生的Map程序的数量有点困惑。
我在很多地方读到,Map器的数量并不取决于块的数量,而是取决于分割的数量,即Map的数量由输入格式决定。Map器={(总数据大小)/(输入拆分大小)}
示例-数据大小为1 tb,输入拆分大小为128 mb。
Map数=(110241024)/128=8192
如果我的输入格式是fileinputformat,上面的似乎是正确的。
但是如果我的输入格式是textinputformat呢。
假设我有一个大小为1GB的文件,默认块大小为128mb(在Hadoop2.x中),块的数量将是8。
该文件是一个文本文件,每行占用1mb。
总行数:1024
每个区块的总行数:128
现在,当我将inputformat设置为textinputformat时,hadoop将生成多少Map器。
是1024(每行一个)还是8(每块一个)?

jxct1oxe

jxct1oxe1#

你把问题搞糊涂了。
以java map reduce中的这个典型示例为例:

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

简单如下:
fileinputformat指定要从中读取数据文件的输入目录。fileinputformat将读取所有文件并将这些文件划分为一个或多个InputSplit。所以你的Assert是正确的。
textinputformat是mapreduce的默认输入格式。还有其他类似的sequencefileinputformat。始终应用输入拆分,并与textinputformat的讨论正交。
前者是必需的,后者是可选的,因为mr中存在如何处理记录的默认值。

相关问题