正如我们所知,hadoop倾向于在运行相应Map程序的机器上运行reducer。如果我们有100个制图器和1个缩小器呢。我们知道mapper将数据存储在本地磁盘上,所有Map的数据是否都将被传输到单个reducer?
mftmpeh81#
是的,如果reducer只有一个,那么所有数据都将传输到该reducer。每个Map器最初将其输出存储在其本地缓冲区(默认为100mb)中,当缓冲区填充到io.sort.spill.percent定义的某个百分比时,结果将溢出到mapred.local.dir定义的磁盘上。在复制阶段,这些文件被复制到reducer上,其中mapred.reduce.parallel.copies parallel threads复制每个Map器的输出。(默认值5)
1dkrff032#
如果只有一个reducer,那么所有数据都将传输到该reducer,所有输出都将作为单个文件存储在hdfs中。如果您没有给出减速机的数量,那么运行的减速机的默认数量是1。您可以使用job.setnumreducetasks(\uuux)设置减速器的数量,如果您使用的是toolrunner,则可以通过命令行本身设置减速器的数量-dmapred.reduce.tasks=4
hc2pp10m3#
如果将reducer number固定为1(按job.setnumreducetasks(1)或-dmapred.reduce.tasks=1),则来自Map器的所有数据都将传输到一个处理所有键的reducer。
3条答案
按热度按时间mftmpeh81#
是的,如果reducer只有一个,那么所有数据都将传输到该reducer。
每个Map器最初将其输出存储在其本地缓冲区(默认为100mb)中,当缓冲区填充到io.sort.spill.percent定义的某个百分比时,结果将溢出到mapred.local.dir定义的磁盘上。
在复制阶段,这些文件被复制到reducer上,其中mapred.reduce.parallel.copies parallel threads复制每个Map器的输出。(默认值5)
1dkrff032#
如果只有一个reducer,那么所有数据都将传输到该reducer,所有输出都将作为单个文件存储在hdfs中。如果您没有给出减速机的数量,那么运行的减速机的默认数量是1。
您可以使用job.setnumreducetasks(\uuux)设置减速器的数量,如果您使用的是toolrunner,则可以通过命令行本身设置减速器的数量-dmapred.reduce.tasks=4
hc2pp10m3#
如果将reducer number固定为1(按job.setnumreducetasks(1)或-dmapred.reduce.tasks=1),则来自Map器的所有数据都将传输到一个处理所有键的reducer。