映射器是同时处理多个文件还是映射器一次只能处理一个文件?我想知道默认行为
答案 0 :(得分:2)
如果你转到FileInputFormat的定义,你会发现它有三种方法:
addInputPath(JobConf conf,路径路径) - 将路径添加到map-reduce作业的输入列表中。所以它会选择目录中的所有文件而不是单个文件,如你所说
addInputPathRecursively(列表结果,FileSystem fs,路径路径,PathFilter inputFilter) - 将输入路径中的文件递归地添加到结果中。
addInputPaths(JobConf conf,String commaSeparatedPaths) - 将给定的逗号分隔路径添加到map-reduce作业的输入列表
操作这三种方法,您可以轻松设置所需的任何多个输入。然后,您的InputFormat的InputSplits开始在映射器作业之间拆分此数据。 Map-Reduce框架依赖于作业的InputFormat:
验证作业的输入规范。
将输入文件拆分为逻辑InputSplits,然后将每个输入文件分配给单个Mapper。
提供RecordReader实现,用于从逻辑InputSplit中收集输入记录以供Mapper处理。
因此技术上单一的映射器将仅处理其自己的部分,其中可以包含来自多个文件的数据。但是对于每种特定格式,您应该查看InputSplit以了解如何在映射器之间分发数据。