我正在尝试理解并行处理如何与Hadoop& MapReduce的。
我理解Map可以并行运行,但我不明白Reduce可以如何运行。例如,如果我想找到以下列表的平均值:
compA
compB
& compA
是两个数据节点
如果Reduce中的平均函数在compB
& {{1}}然后两个数据的结果是平均的,这将是错误的。
答案 0 :(得分:0)
不会为所有类型的逻辑生成多个reducer任务。对于聚合,平均逻辑数据将在单个reducer上运行。 Mapper类将数据作为键值对获取。它将输出发送到reducer类。在到达减速器之前,将对键进行排序,并且对应于相同键的值将到达相同的减速器。这样,结果就是正确的。如果您的要求涉及平均整个数据,则所有映射任务的输出将发送到单个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]}
即(键,值列表)