在wordcount中,似乎在关闭推测执行的情况下,每个块可以获得多个map任务。jobtracker是否在幕后施展了一些魔法来分配比inputsplits提供的任务更多的任务?
zz2j4svz1#
答案在于hadoop inputformats的工作方式:在hdfs中:让我们举一个例子,其中块的大小是1mb,hdfs的输入文件的大小是10mb,最小分割大小是>1mb1) 首先,一个文件被添加到hdfs中。2) 文件被分成10个块,每个块大小为1mb。3) 然后,输入分配器读取每个1mb块。4) 由于1mb块小于最小拆分大小,hdfs一次处理1mb,没有额外的拆分。故事的寓意是:如果您的拆分小于最小拆分大小,fileinputformat实际上会为您进行额外的拆分。我想我完全忘记了这一点,但是回顾过去,这从一开始就是hadoop的一个特性。输入格式在运行时任意分割块的能力被许多生态系统工具用来以特定于应用程序的方式分配负载。这里比较棘手的一点是,在toy mapreduce作业中,在所有情况下都希望每个分割一个块,而在实际集群中,我们忽略了分割默认大小参数,除非使用大文件,否则这些参数不会起作用。
3pmvbmvn2#
块和分裂是两种不同的东西。如果一个块有多个拆分,则可能会为该块获得多个Map器。
2条答案
按热度按时间zz2j4svz1#
答案在于hadoop inputformats的工作方式:
在hdfs中:
让我们举一个例子,其中块的大小是1mb,hdfs的输入文件的大小是10mb,最小分割大小是>1mb
1) 首先,一个文件被添加到hdfs中。
2) 文件被分成10个块,每个块大小为1mb。
3) 然后,输入分配器读取每个1mb块。
4) 由于1mb块小于最小拆分大小,hdfs一次处理1mb,没有额外的拆分。
故事的寓意是:如果您的拆分小于最小拆分大小,fileinputformat实际上会为您进行额外的拆分。
我想我完全忘记了这一点,但是回顾过去,这从一开始就是hadoop的一个特性。输入格式在运行时任意分割块的能力被许多生态系统工具用来以特定于应用程序的方式分配负载。
这里比较棘手的一点是,在toy mapreduce作业中,在所有情况下都希望每个分割一个块,而在实际集群中,我们忽略了分割默认大小参数,除非使用大文件,否则这些参数不会起作用。
3pmvbmvn2#
块和分裂是两种不同的东西。如果一个块有多个拆分,则可能会为该块获得多个Map器。