reducer 可以动态地使用多个节点吗?
Can a reducer dynamically make use of multiple nodes?
在编写MapReduce作业的代码时,如果手动设置reducer的个数,有可能发送给某个reducer的数据很大。在这种情况下,reducer 任务 运行 可以同时在多个节点上进行吗?或许是把List<Value>
里面的数据划分成一个key对应的,然后再内部合并?
如果 reducer 无法自动调整要使用的节点数量,那么我们如何处理可能存在与键对应的值分布不均的情况? default hadoop MapReduce partitioner根据hash的值进行分区,不考虑key对应的List<Value>
的大小
不,reducer 不会自动缩放。如果它的工作量太大,它就会崩溃。
你能做的最好的(可能)是编写你自己的自定义分区程序,在 reducer 之间平均分配工作负载。这样做并不总是那么容易,因为您可能需要对数据进行采样或估计,甚至需要额外的计数工作,并编写一个合适的负载平衡算法来满足您的问题的需要。
您想要的可能不是基于每个键值的大小来分配负载,而是基于 reducer 将执行的计算(这两者并不总是相同的)。
在编写MapReduce作业的代码时,如果手动设置reducer的个数,有可能发送给某个reducer的数据很大。在这种情况下,reducer 任务 运行 可以同时在多个节点上进行吗?或许是把List<Value>
里面的数据划分成一个key对应的,然后再内部合并?
如果 reducer 无法自动调整要使用的节点数量,那么我们如何处理可能存在与键对应的值分布不均的情况? default hadoop MapReduce partitioner根据hash的值进行分区,不考虑key对应的List<Value>
的大小
不,reducer 不会自动缩放。如果它的工作量太大,它就会崩溃。
你能做的最好的(可能)是编写你自己的自定义分区程序,在 reducer 之间平均分配工作负载。这样做并不总是那么容易,因为您可能需要对数据进行采样或估计,甚至需要额外的计数工作,并编写一个合适的负载平衡算法来满足您的问题的需要。
您想要的可能不是基于每个键值的大小来分配负载,而是基于 reducer 将执行的计算(这两者并不总是相同的)。