7.1 MapReduce概述

一、概念

MapReduce是一种分布式并行编程框架
——分布式并行编程:借助一个集群的多台机器,同时并行处理大规模数据。

MapReduce最早由Google提出,Apache做了优化,成为Hadoop的两大组件之一(另一个就是HDFS)

二、特点

相比传统的MPI、OpenCL、CUDA等并行编程框架,MapReduce有许多优点

1. 容错率高

采用非共享式架构——某些节点出问题不会影响其他节点正常运行

2. 横向扩展性好

可以随意增减节点,而且可以使用廉价机器,扩展集群又好又省。

3. 编程难度低

MapReduce屏蔽了整个底层运行的所有细节,包括进程间通信、数据同步、负载均衡、失败恢复等等。框架会自动分布式部署到集群上的各个机器上,极大降低了编程难度。

4. 适合数据密集型应用

适用于非实时的批处理,以及数据密集型应用(传统的适用于计算密集型应用)。

三、策略和理念

1. 处理策略

MapReduce采用“分而治之”的数据处理策略:
(1) 把非常庞大的数据集切分成多个独立的分片(split)
(2) 然后为每一个分片单独启动一个map任务
(3) 最终并行地在多个机器上同时并行处理这些map任务

2. 设计理念

传统的数据分析常常是“数据向计算靠拢”:做数据分析时,选择一个计算节点,把分析程序放到计算节点上运行,然后把所涉及的数据从各个存储节点传输到计算节点上去。这种方式不适合海量数据,甚是会导致计算崩溃。



MapReduce相反,秉承“计算向数据靠拢”的核心理念。系统会把计算任务分散到各个节点,每个数据处理任务建立在离目标数据尽可能近的节点上,甚至就在同一台机器上。这样做最明显的好处就是大大减少了数据传输的开销,提高了分布式处理的性能。


四、架构

MapReduce采用Master/Slave架构。



一个完整架构有唯一的Master服务器,在上面运行作业跟踪器JobTracker,负责所有任务的调度处理以及失败恢复。另外还有若干台Slave服务器,在上面运行TaskTracker,负责接收JobTracker的指令来具体完成任务的处理。

五、两大函数

MapReduce函数把复杂的计算过程抽象为两个函数,即Map函数和Reduce函数

1. Map函数

输入是键值对<k1, v1>,如

<90020, "a a b a b c">

行号90020是键,文本"a a b a b c"是值。
输出是键值对列表list(k2, v2),比如我们定义Map函数是记录上面的输入做每个字母出现次数,则输出为

<"a", 3>
<"b", 2>
<"c", 1>

具体要Map出什么输出可以用户自定义。

2. Reduce函数

输入是键-值列表对<k3, list(v3)>,比如文本出现几次次a就写几个1

<"a", <1,1,1>>

输出为键值对<k4, v4>,如定义Reduce是统计a出现的次数,则对上述输入处理的结果是

<"a", 3>

同样,Reduce函数的具体算法也是用户自定义的。

Reference:
https://www.icourse163.org/learn/XMU-1002335004#/learn/content?type=detail&id=1214310149&cid=1217922309

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容