getSplits() 方法 returns 究竟是什么?

What exactly the getSplits() method returns?

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

它是 returns 映射器要运行 的文件字节块吗??

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

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

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

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

InputSplit object contains information about the split, but not the split data itself. Depending on the subclass (such as FileSplit) 此信息可以是诸如拆分位置及其大小之类的项目。

方法getSplits() return 拆分 - 关于部分文件的元数据。每个地图处理一个分割。

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

如果文件小于块大小,它将在单独的拆分中。在您的第一个示例中,您将有三个 50MB 的分割。如果你想将它们组合起来并在一个 Mapper 中处理,你可以使用 CombineFileInputFormat (example).