创建更多的分区而不是reducer

jw5wzhpr  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(264)

在我的单机上进行本地开发时,我相信默认的减速器数量是6。在特定的mr步骤中,我实际上将数据划分为n个分区,其中n可以大于6。从我观察到的情况来看,实际上只有6个分区得到了处理,因为我只看到6个特定分区的输出。有几个问题:
(a) 我需要设置减速器的数量大于分区的数量吗?如果是,我可以在运行Map程序之前/期间/之后执行此操作吗?
(b) 为什么其他分区没有排队?有没有一种方法可以在处理另一个分区之前等待一个reducer完成一个分区的处理,这样不管实际reducer的数量是否小于分区的数量,所有分区都可以被处理?

pobjuy32

pobjuy321#

当您将作业提交给hadoop时,还可以请求一些reducer$hadoop jar myjarfile mymainclass-dmapreduce.job.reduces=n myinput myoutputdir
有关更多选项和一些详细信息,请参阅:hadoop number of reducers configuration options priority

vecaoik1

vecaoik12#

(a) 不。根据你的需要,你可以有任意数量的减速器。分区只是决定哪一组键/值对将转到哪一个缩减器。它不能决定将产生多少减速器。但是,如果您需要根据您的要求设置减速器的数量,您可以通过以下工作来实现:

job.setNumReduceTasks(2);

(b) 事实上就是这样。根据插槽的可用性,启动一组减速机,处理所有输入。如果所有的减速机都完成了,而一些数据仍然没有处理,那么第二批减速机将开始并完成其余的数据。不管分区和缩减器的数量如何,所有数据最终都会得到处理。
请确保分区逻辑正确。
p、 为什么你认为默认的减速器数量是6?

相关问题