如果我们只有一个减速器怎么办?

时间:2014-10-13 21:23:33

标签: hadoop

我们知道Hadoop倾向于在运行相应映射器的机器上运行reducer reducer。如果我们有100个映射器和1个减速器怎么办?我们知道映射器将数据存储在本地磁盘上,所有映射的数据都会被转移到单个reducer吗?

3 个答案:

答案 0 :(得分:2)

是的,如果减速器只有一个,则所有数据都将传输到该减速器。

每个映射器最初将其输出存储在其本地缓冲区(默认为100mb),当缓冲区填充到 io.sort.spill.percent 定义的某个百分比时,结果将溢出在 mapred.local.dir 定义的磁盘上。

这些文件在复制阶段期间复制到reducer,其中每个映射器的输出由 mapred.reduce.parallel.copies 并行线程复制。(默认5)

答案 1 :(得分:0)

如果将reducer数量修改为1(通过job.setNumReduceTasks(1)或-Dmapred.reduce.tasks = 1),则映射器中的所有数据都将传输到一个将处理所有键的reducer。

答案 2 :(得分:0)

如果您只有1个reducer,那么所有数据都会传输到该reducer,所有输出将作为单个文件存储在HDFS中。 如果你没有给出减速器,则运行的减速器的默认值为1。

您可以使用 job.setNumReduceTasks(__)设置减少器数量,如果您使用的是ToolRunner,则可以通过命令行本身设置减少器数量。  的 -Dmapred.reduce.tasks = 4