如果我们只有一个减速机呢

igetnqfo  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(343)

正如我们所知,hadoop倾向于在运行相应Map程序的机器上运行reducer。如果我们有100个制图器和1个缩小器呢。我们知道mapper将数据存储在本地磁盘上,所有Map的数据是否都将被传输到单个reducer?

mftmpeh8

mftmpeh81#

是的,如果reducer只有一个,那么所有数据都将传输到该reducer。
每个Map器最初将其输出存储在其本地缓冲区(默认为100mb)中,当缓冲区填充到io.sort.spill.percent定义的某个百分比时,结果将溢出到mapred.local.dir定义的磁盘上。
在复制阶段,这些文件被复制到reducer上,其中mapred.reduce.parallel.copies parallel threads复制每个Map器的输出。(默认值5)

1dkrff03

1dkrff032#

如果只有一个reducer,那么所有数据都将传输到该reducer,所有输出都将作为单个文件存储在hdfs中。如果您没有给出减速机的数量,那么运行的减速机的默认数量是1。
您可以使用job.setnumreducetasks(\uuux)设置减速器的数量,如果您使用的是toolrunner,则可以通过命令行本身设置减速器的数量-dmapred.reduce.tasks=4

hc2pp10m

hc2pp10m3#

如果将reducer number固定为1(按job.setnumreducetasks(1)或-dmapred.reduce.tasks=1),则来自Map器的所有数据都将传输到一个处理所有键的reducer。

相关问题