Hadoop MapReduce:具有TextInputFormat的映射程序数
对于MapReduce作业产生的映射程序数量,我有点困惑 我在很多地方读到,制图员的数量并不取决于人数 块的数量,但取决于拆分的数量,即映射的数量由InputFormat确定。 映射器={(总数据大小)/(输入拆分大小)} 示例-数据大小为1 TB,输入拆分大小为128 MB Num Mappers=(1*1024*1024)/128=8192 如果我的输入格式是FileInputFormat,那么上面的内容似乎是正确的 但是如果我的输入格式是TextInputFormat呢 假设我有一个大小为1GB的文件,默认块大小为128MB(在Hadoop 2.x中),块的数量将是8 该文件为文本文件,每行占用1MBHadoop MapReduce:具有TextInputFormat的映射程序数,hadoop,mapreduce,hdfs,Hadoop,Mapreduce,Hdfs,对于MapReduce作业产生的映射程序数量,我有点困惑 我在很多地方读到,制图员的数量并不取决于人数 块的数量,但取决于拆分的数量,即映射的数量由InputFormat确定。 映射器={(总数据大小)/(输入拆分大小)} 示例-数据大小为1 TB,输入拆分大小为128 MB Num Mappers=(1*1024*1024)/128=8192 如果我的输入格式是FileInputFormat,那么上面的内容似乎是正确的 但是如果我的输入格式是TextInputFormat呢 假设我有一个大小为
- 总行数:1024
- 每个块中的行总数:128
是1024(一行一个)还是8(一块一个)?你把问题搞糊涂了 以可怕的JAVA Map Reduce中的这个典型示例为例:
FileInputFormat.setInputPaths(job, new Path(baseDir, CONTROL_DIR_NAME));
job.setInputFormat(SequenceFileInputFormat.class);
简而言之:
- FileInputFormat指定要从中读取数据文件的输入目录。FileInputFormat将读取所有文件并将这些文件分成一个或多个InputSplit。所以你的断言是正确的
- TextInputFormat是MapReduce的默认InputFormat。还有其他类似的SequenceFileInputFormat。输入拆分始终应用,并且与TextInputFormat的讨论正交
前者是必需的,后者是可选的,因为MR中有一个默认的处理记录的方法。或者可能只有一个映射器,因为块大小是HDFS特性,不确定TextInputFormat是否使用了它。但是,
TextInputFormat是MapReduce的默认InputFormat
。你能解释一下文档中提到的地方吗?太久以前了,记不得了。本周晚些时候我有空的时候我会去看看的。经过一番挖掘。我找到了。谢谢,Hadoop很难。