在 Wordcount 中,您似乎可以在每个块中获得超过 1 个地图任务,并关闭推测执行。
jobtracker 是否在后台做了一些魔术来分配比 InputSplits 提供的更多的任务?
在 Wordcount 中,您似乎可以在每个块中获得超过 1 个地图任务,并关闭推测执行。
jobtracker 是否在后台做了一些魔术来分配比 InputSplits 提供的更多的任务?
块和拆分是两个不同的东西。如果一个 Block 有多个 Splits,您可能会为一个 Block 获得多个 mapper。
这个问题的答案在于 Hadoop InputFormats 的工作方式:
在 HDFS 中:
让我们举个例子,块大小为 1MB,HDFS 的输入文件大小为 10MB,最小分割大小大于 1MB
1)首先,将一个文件添加到HDFS。
2) 文件被分成 10 个块,每个块大小为 1MB。
3) 然后,输入分离器读取每个 1MB 的块。
4) 由于 1MB 块更小,因此 MIN_SPLIT_SIZE,HDFS 一次处理 1MB,没有额外的分割。
故事的寓意:如果您的拆分低于最小拆分大小,FileInputFormat 实际上会为您进行额外的拆分。
我想我完全忘记了这一点,但回头看,这从一开始就是 hadoop 的一个特性。许多生态系统工具使用输入格式在运行时任意拆分块的能力以特定于应用程序的方式分配负载。
这里棘手的部分是,在玩具 mapreduce 作业中,在所有情况下都期望每次拆分一个块,然后在实际集群中,我们忽略了拆分默认大小参数,除非您使用大文件,否则这些参数不会发挥作用.