0

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

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

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

4

2 回答 2

1

(a) 不可以。您可以根据需要拥有任意数量的减速器。分区只是决定哪一组键/值对将进入哪个reducer。它不决定将生成多少个减速器。但是,如果您想根据自己的要求设置减速器的数量,您可以通过 Job 来做到这一点:

job.setNumReduceTasks(2);

(b) 这就是实际发生的事情。根据插槽的可用性,启动一组 reducer,处理所有输入给它们的输入。如果所有 reducer 都已完成,并且仍有一些数据未处理,则第二批 reducer 将启动并完成其余数据。无论分区和减速器的数量如何,您的所有数据最终都会得到处理。

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

PS:为什么你认为默认的 reducer 数量是 6?

于 2013-06-27T01:56:10.347 回答
1

当您将作业提交给 hadoop 时,您还可以要求一些 reducer。$hadoop jar myjarfile mymainclass -Dmapreduce.job.reduces=n myinput myoutputdir

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

于 2014-06-21T18:48:07.273 回答