【问题标题】:Can a reducer dynamically make use of multiple nodes?减速器可以动态地使用多个节点吗?
【发布时间】:2018-01-10 20:28:36
【问题描述】:

在为 MapReduce 作业编写代码时,如果我们手动设置 reducer 的数量,则发送到某个 reducer 的数据可能很大。在这种情况下,reducer 任务可以同时在多个节点上运行吗?也许是通过将List<Value>中的数据与一个键对应,然后在内部合并?

如果 reducer 不能自动缩放它要使用的节点数量,那么我们如何处理可能存在与键对应的值分布不均的情况? default hadoop MapReduce partitioner根据hash的值进行分区,并没有考虑到key对应的List<Value>的大小。

【问题讨论】:

    标签: hadoop mapreduce


    【解决方案1】:

    不,reducer 不会自动缩放。如果它的工作量太大,它就会崩溃。

    您能做的最好的事情(可能)是编写您自己的自定义分区器,在减速器之间平均分配工作负载。这样做并不总是那么容易,因为您可能必须对数据进行采样或估计,甚至是额外的计数工作,并编写一个体面的负载平衡算法来满足您的问题需求。

    您想要的可能不是基于每个键的值的大小来分配负载,而是基于 reducer 将执行的计算(这两个并不总是相同的)。

    【讨论】:

    • 好的,但是有两件事。 1. 是否可以定义分配给reducer的节点资源的百分比? 2.如果在某种情况下必须手动设置reducer的数量,那么可以做些什么来缓解某些reducer负载过重的问题?
    • @DhruvMullick 恐怕我没有 1 的答案。关于 2.,如果您不想要采样,您可以手动设置一个自定义分区器来分配您期望的键对他们自己的减速器有最重的负载(即,没有其他键应该转到同一个减速器)。例如,在 WordCount 中,将从最常见的字母(例如字母 's')开始的所有单词发送到它们自己的 reducer,并随机发送所有其他单词。
    猜你喜欢
    • 2014-01-17
    • 2016-08-12
    • 2019-08-13
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多