如Hadoop Wiki所给的那样,计算理想的reducer数量为0.95或1.75 *(节点* mapred.tasktracker.tasks.maximum)
但是什么时候选择0.95,什么时候选择1.75?决定这个乘数时考虑的因素是什么?
最佳答案
假设您的集群中有100个减少插槽。
当负载因子为0.95时,所有95个reduce任务将同时启动,因为有足够的reduce插槽可用于所有任务。这意味着在其余任务之一完成之前,没有任务将在队列中等待。当reduce任务“较小”(即相对较快地完成),或者它们全部或多或少地需要相同的时间时,我建议使用此选项。
另一方面,在负载因子为1.75的情况下,将同时启动100个reduce任务,与可用的reduce插槽数量一样多,剩下的75个任务将在队列中等待,直到reduce插槽可用。这样可以提供更好的负载平衡,因为如果某些任务比其他任务“重”,即需要更多时间,那么它们就不会成为工作的瓶颈,因为其他任务减少了插槽,而不是完成任务并等待正在执行队列中的任务。由于映射输出的数据分散到更多任务,因此这也减轻了每个化简任务的负担。
如果我发表意见,我不确定这些因素是否总是理想的。通常,我使用大于1.75的因数(有时甚至是4或5),因为我正在处理大数据,并且我的数据不适用于每台计算机,除非我将此系数设置得更高并且负载平衡也更好。
关于hadoop - Hadoop上理想的reducer数量是多少?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21980110/