hadoop 中每个映射器的单个或多个文件?
Single or multiple files per mapper in hadoop?
映射器是同时处理多个文件还是映射器一次只能处理一个文件?我想知道默认行为
如果您查看 FileInputFormat 的定义,您会看到它在顶部有三个方法:
addInputPath(JobConf conf, Path path) - 添加路径到 map-reduce 作业的输入列表。因此它将拾取目录中的所有文件,而不是单个文件,如您所说
addInputPathRecursively(List result, FileSystem fs, Path path, PathFilter inputFilter) - 将输入路径中的文件递归添加到结果中。
addInputPaths(JobConf conf, String commaSeparatedPaths) - 将给定的逗号分隔路径添加到 map-reduce 作业的输入列表中
操作这三种方法,您可以轻松设置您想要的任何多路输入。然后 InputSplits 的 InputFormat 开始在映射器作业之间拆分此数据。 Map-Reduce 框架依赖作业的 InputFormat 来:
验证作业的输入规范。
将输入文件拆分为逻辑 InputSplits,然后将每个分配给一个单独的 Mapper。
提供 RecordReader 实现,用于从逻辑 InputSplit 收集输入记录以供 Mapper 处理。
所以从技术上讲,单个映射器将只处理它自己的部分,它可以包含来自多个文件的数据。但是对于每种特定格式,您应该查看 InputSplit 以了解数据将如何在映射器之间分布。
- 默认情况下,典型的 Mapreduce 作业遵循每个映射器的一个输入拆分。
- 如果文件大小大于拆分大小(即,它有更多
比一个输入拆分),那么每个文件有多个映射器。
- 如果文件不像
Gzip
那样可拆分,则每个映射器一个文件
文件,或者如果进程是 Distcp
,其中文件是最精细的粒度级别。
映射器是同时处理多个文件还是映射器一次只能处理一个文件?我想知道默认行为
如果您查看 FileInputFormat 的定义,您会看到它在顶部有三个方法:
addInputPath(JobConf conf, Path path) - 添加路径到 map-reduce 作业的输入列表。因此它将拾取目录中的所有文件,而不是单个文件,如您所说
addInputPathRecursively(List result, FileSystem fs, Path path, PathFilter inputFilter) - 将输入路径中的文件递归添加到结果中。
addInputPaths(JobConf conf, String commaSeparatedPaths) - 将给定的逗号分隔路径添加到 map-reduce 作业的输入列表中
操作这三种方法,您可以轻松设置您想要的任何多路输入。然后 InputSplits 的 InputFormat 开始在映射器作业之间拆分此数据。 Map-Reduce 框架依赖作业的 InputFormat 来:
验证作业的输入规范。
将输入文件拆分为逻辑 InputSplits,然后将每个分配给一个单独的 Mapper。
提供 RecordReader 实现,用于从逻辑 InputSplit 收集输入记录以供 Mapper 处理。
所以从技术上讲,单个映射器将只处理它自己的部分,它可以包含来自多个文件的数据。但是对于每种特定格式,您应该查看 InputSplit 以了解数据将如何在映射器之间分布。
- 默认情况下,典型的 Mapreduce 作业遵循每个映射器的一个输入拆分。
- 如果文件大小大于拆分大小(即,它有更多 比一个输入拆分),那么每个文件有多个映射器。
- 如果文件不像
Gzip
那样可拆分,则每个映射器一个文件 文件,或者如果进程是Distcp
,其中文件是最精细的粒度级别。