创建比reducers更多的分区

时间:2013-06-27 01:38:09

标签: hadoop hadoop-streaming hadoop-partitioning

在我的单台机器上进行本地开发时,我认为默认的减速器数量是6.在特定的MR步骤中,我实际上将数据分成n个分区,其中n可以大于6.从我观察到的,它看起来只有6个分区实际得到处理,因为我只看到6个特定分区的输出。几个问题:

(a)我是否需要将减速器数量设置为大于分区数量?如果是这样,我可以在运行Mapper之前/期间/之后执行此操作吗?

(b)为什么其他分区没有排队?有没有办法等待reducer在处理另一个分区之前完成处理一个分区,这样无论实际的reducers数是否小于分区数,都可以处理所有分区?

2 个答案:

答案 0 :(得分:1)

(a)否。根据您的需要,您可以拥有任意数量的减速器。分区只决定哪一组键/值对将转到哪个reducer。它不会决定生成多少减速器。但是,如果您希望根据您的要求设置减速器的数量,您可以通过Job执行此操作:

job.setNumReduceTasks(2);

(b)这实际上是发生了什么。基于插槽的可用性,启动设置的减速器,其处理馈送给它们的所有输入。如果所有减速器都已完成且某些数据仍未处理,则第二批减速器将启动并完成其余数据。无论分区和缩减器的数量如何,最终都会处理您的所有数据。

请确保您的分区逻辑正确。

P.S。 :为什么你认为减速器的默认数量是6?

答案 1 :(得分:1)

当您将作业提交给hadoop时,您也可以要求许多减速器。 $ hadoop jar myjarfile mymainclass -Dmapreduce.job.reduces = n myinput myoutputdir

有关更多选项和一些详细信息,请参阅: Hadoop Number of Reducers Configuration Options Priority

相关问题