Map Reduce 简明教程
MapReduce - Hadoop Implementation
MapReduce 是一个框架,用于编写应用程序,以便在大量商用硬件集群上可靠地处理海量数据。本章将带您了解在 Hadoop 框架中使用 Java 进行 MapReduce 操作。
MapReduce Algorithm
MapReduce 范式通常基于将 map-reduce 程序发送到实际数据所在的计算机。
-
在 MapReduce 作业期间,Hadoop 会将 Map 和 Reduce 任务发送到集群中的相应服务器。
-
该框架会管理数据传递的所有细节,如发出任务、验证任务完成情况,以及在节点间在集群周围复制数据。
-
大多数计算都会在具有本地磁盘数据的节点上进行,这样可以减少网络流量。
-
在完成给定任务后,集群会收集并减少数据以形成适当的结果,并将它发送回 Hadoop 服务器。
Inputs and Outputs (Java Perspective)
MapReduce 框架对键值对进行操作,即该框架将作业的输入视为一组键值对,并将一组键值对作为作业的输出生成,想象中不同类型。
键和值类必须是可序列化框架,因此需要实现 Writable 接口。此外,键类必须实现 WritableComparable 接口,以利于框架进行排序。
MapReduce 作业的输入和输出格式都是键值对形式−
(Input) <k1, v1> → map → <k2, v2>→ reduce → <k3, v3> (Output)。
Input |
Output |
|
Map |
<k1, v1> |
list (<k2, v2>) |
Reduce |
<k2, list(v2)> |
list (<k3, v3>) |
MapReduce Implementation
下表显示了有关组织用电量的资料。该表包括连续五年的每月用电量和年平均值。
Jan |
Feb |
Mar |
Apr |
May |
Jun |
Jul |
Aug |
Sep |
Oct |
Nov |
Dec |
Avg |
|
1979 |
23 |
23 |
2 |
43 |
24 |
25 |
26 |
26 |
26 |
26 |
25 |
26 |
25 |
1980 |
26 |
27 |
28 |
28 |
28 |
30 |
31 |
31 |
31 |
30 |
30 |
30 |
29 |
1981 |
31 |
32 |
32 |
32 |
33 |
34 |
35 |
36 |
36 |
34 |
34 |
34 |
34 |
1984 |
39 |
38 |
39 |
39 |
39 |
41 |
42 |
43 |
40 |
39 |
38 |
38 |
40 |
1985 |
38 |
39 |
39 |
39 |
39 |
41 |
41 |
41 |
00 |
40 |
39 |
39 |
45 |
我们需要编写应用程序,处理给定表中的输入数据,找到用电量最大的年份、用电量最小的年份,等等。对于记录数量有限的程序员来说,这项任务很简单,因为他们只需编写逻辑来生成所需的输出,并将数据传递到编写的应用程序。
现在我们来增加输入数据的规模。假设我们必须分析一个特定州的所有大型产业的用电量。当我们编写应用程序来处理这种大量数据时,
-
它们执行需要很长时间。
-
当我们把数据从源数据移动到网络服务器时,网络流量将会很大。
为了解决这些问题,我们有MapReduce框架。