可能的答案,
工作节点如何划分此文件进行处理。不同的工作节点每个会处理 341(1024/3)KB。或者单个工作节点会处理该文件?
与 Windows 中可用的 NTFS 和 FAT 等普通文件系统相比,Hadoop 分布式文件系统 (HDFS) 通常具有更大的块大小。HDFS 中的块分散在具有复制功能的多个节点(机器)上,如果提供了机架拓扑脚本,则可以更好地处理复制,并且块的放置更有策略性以防止数据丢失(例如,如果 Hadoop 在不知情的情况下将复制因子为 2 的块放置在同一个机架和整个机架都失败了,哎呀!一个好的策略可能是将一个块存储在一个机架中,而将其他复制的块存储在不同的机架中)。默认情况下,一个块的大小为 64MB。因此,一个 1 MB 的文件可能会驻留在单个块中,当然,会在不同的节点上复制。通常,单个 Map 适用于称为拆分的东西,它可以由一个或多个块组成。TextInputFormat通常处理带有 endline 作为分隔符的文本文件,并为每个拆分触发映射,这大约是单个块的大小。为了保证端线边界,分割大小可以略大于或小于块大小。最重要的是,在正常情况下驻留在单个 64MB 块中的 1 MB 文件将由单个映射任务处理。
如果我处理 100 个这样的文件。工作节点会在它们之间划分要处理的文件数量吗?
如果存在 100 个单独的此类文件,则有可能会调用 100 个地图任务,除非您使用了像CombineInputFormat这样的东西,它可以将多个块组合并处理在一起作为地图的拆分。
另一种选择是尽可能将这 100 个文件合并到一个文件和进程中。
如果我处理一个大约 100MB 的文件呢?
同样,假设您的块大小为 64MB,一个 100MB 的 TextInputFormat 文件应该大致由 2 个地图任务处理。正如我所说,使用不同的 InputFormat 可以以不同的方式处理事物!
注意(摘自此处):
推测执行: Hadoop 系统的一个问题是,通过将任务划分到许多节点上,一些慢速节点可能会限制程序其余部分的速率。例如,如果一个节点有一个慢速磁盘控制器,那么它读取其输入的速度可能仅为所有其他节点的 10%。所以当 99 个 map 任务已经完成时,系统还在等待最后一个 map 任务的签入,这比所有其他节点花费的时间要长得多。
通过强制任务彼此隔离运行,单个任务不知道它们的输入来自哪里。任务信任 Hadoop 平台来提供适当的输入。因此,相同的输入可以并行处理多次,以利用机器能力的差异。由于作业中的大多数任务即将结束,Hadoop 平台将在没有其他工作要执行的几个节点上安排剩余任务的冗余副本。这个过程被称为推测执行。当任务完成时,他们会向 JobTracker 宣布这一事实。无论哪个任务副本首先完成,都将成为最终副本。如果其他副本是推测性地执行,Hadoop 会告诉 TaskTracker 放弃任务并丢弃它们的输出。