getSplits() 方法究竟返回什么



getSplits() 方法到底返回了什么?根据 apache 文档,它返回 InputSplit 的数组,这是什么意思?

它是否返回映射器将在其上运行的文件字节块?

  1. 假设我们有 3 个文件,每个文件 50MB,那么它返回字节 64MB(50MB+14MB 第 2 个文件)在 [0],64MB(36MB 第 2 个 + 28MB 的第三个),36MB(第三个文件),每个都由 3 个不同的映射器处理?

  2. 如果我们有一个 120MB 的大文件,那么它为同一个文件返回 64MB 的块?

什至不确定我问的是否合乎逻辑,我是Hadoop堆栈的新手。

方法getSplits()返回拆分 - 有关文件部分的元数据。每个地图处理一次拆分。

如果您的文件很大,则会将其分成具有 HDFS 块大小(至少 64MB)的部分。在第二个示例中,它将是 64MB 和 56MB 的两个拆分。虽然,现在推荐的块大小是128MB甚至256MB。

如果文件小于块大小,它将在单独的拆分中。在您的第一个示例中,您将有三个拆分,每个拆分 50MB。如果要将它们组合并在一个映射器中处理,可以使用CombineFileInputFormat(示例)。

MapReduce中的输入拆分是映射器阶段的并行化单位。如果您有十个输入拆分,那么您将有十个映射器。在一般情况下,文件块将映射到输入拆分。

对象包含有关拆分的信息,但不包含拆分数据本身。根据子类(如 FileSplit),此信息可能是诸如拆分的位置及其大小等项目。

最新更新