在为mapreduce作业编写代码时,如果手动设置reducer的数量,则发送到某个reducer的数据可能很大。在这种情况下,reducer任务能否同时在多个节点上运行?也许是把数据分成 List<Value> 对应一个键,然后在内部合并?如果reducer不能自动缩放要使用的节点数,那么我们如何处理与键对应的值分布不均的情况?默认的hadoop mapreduce分区器基于哈希值进行分区,并且不考虑 List<Value> 对应于键。
List<Value>
a2mppw5e1#
不,减速机不能自动缩放。如果它的工作量太大,它就会崩溃。您所能做的最好的事情(可能)是编写您自己的自定义分区器,将工作负载均匀地分布在各个缩减器中。要做到这一点并不总是容易的,因为您可能需要对数据进行采样或估计,甚至需要额外的计数工作,并编写一个能够满足您的问题需要的体面的负载平衡算法。您想要的可能不是基于每个键的值的大小来分配负载,而是基于reducer将执行的计算(这两者并不总是相同的)。
1条答案
按热度按时间a2mppw5e1#
不,减速机不能自动缩放。如果它的工作量太大,它就会崩溃。
您所能做的最好的事情(可能)是编写您自己的自定义分区器,将工作负载均匀地分布在各个缩减器中。要做到这一点并不总是容易的,因为您可能需要对数据进行采样或估计,甚至需要额外的计数工作,并编写一个能够满足您的问题需要的体面的负载平衡算法。
您想要的可能不是基于每个键的值的大小来分配负载,而是基于reducer将执行的计算(这两者并不总是相同的)。