【问题标题】:Parallel running MapReduce on Hadoop在 Hadoop 上并行运行 MapReduce
【发布时间】:2016-05-04 12:16:30
【问题描述】:

我正在尝试了解并行处理如何与 Hadoop 和 MapReduce 一起使用。

我了解 Map 可以如何并行运行,但我不了解 Reduce 可以如何。例如,如果我想找到以下列表的平均值:

COMPUTER  |    YEAR    |  RUNS
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾  
compA     |    1989    |  20
compA     |    1990    |  10
compB     |    1991    |  300

其中compA & compB 是两个数据节点 如果 Reduce 中的平均函数在 compAcompB 上运行,然后将两个数据 noes 的结果平均,那将是错误的。

【问题讨论】:

    标签: hadoop


    【解决方案1】:

    不会为所有类型的逻辑生成多个 reducer 任务。对于聚合,平均逻辑数据将在单个 reducer 上运行。 Mapper 类以键值对的形式获取数据。它将输出发送到减速器类。在到达reducer之前,key会被排序,同一个key对应的值会到达同一个reducer。这样,结果将是正确的。如果您的要求涉及对整个数据进行平均,那么所有 map 任务的输出将被发送到单个 reducer。

    例如:我想计算一年内每月平均售出的汽车数量。 我有 12 个文件中的数据,每个文件包含一个月对应的销售详细信息。

    我必须编写以下逻辑。 映射器类 Mapper 将获取每条记录作为输入。 从每条记录中解析销售数量和月份详细信息。 写一个常量作为键,销售额作为值(例如:1 月份售出的 2000 辆汽车类似于 [sales,2000]。类似地,2 月份的 1000 辆销量类似于 [sales,1000])。我使用了键 sales,这样所有具有相同键的值都会到达同一个 reducer。

    输入数据示例

    jan.txt

    car-sold,2000
    

    feb.txt

    cars-sold,1000
    

    ..... .....

    dec.txt

    cars-sold,5000
    

    映射器输出

    [销售额,2000]

    [销售额,1000]

    .... ....

    [销售额,5000]

    减速器输入

    {销售额,[1000,2000,.....,5000]}

    即(键,值列表)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-27
      • 2016-07-02
      相关资源
      最近更新 更多