hadoop中每个映射器有一个或多个文件?

时间:2017-02-24 01:53:49

标签: hadoop mapreduce yarn hadoop2

映射器是同时处理多个文件还是映射器一次只能处理一个文件?我想知道默认行为

1 个答案:

答案 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以了解如何在映射器之间分发数据。