MapReduce 编程模型
MapReduce 是一种编程模型,该模型将数据扩展到多个数据节点上进行处理,它最早是
Google 提出的一个软件架构,用于大规模数据集(大于 1TB)的并行运算。并行编程模式的最大
优点是容易扩展到多个计算节点上处理数据。开发者可以很容易就编写出分布式并行程序。
mapreduce 的主要思想是将自动分割要执行的问题(例如程序)拆解成 map(映射)和
reduce(化简)的方式;一个 MapReduce 作业(job)首先会把输入的数据集分割为多个独立的数
据块,再以键值对形式输给 Map 函数并行处理。Map 函数接受一个输入键值对的值,产生一个中
间键值对集合,由 MapReduce 保存并集合所有具有相同中间 key 值的中间 value 值传递给 Reduce
函数, reduce 对这些 value 值进行合并,形成一个 value 值集合,最终形成输出数据。 处理流程
如下图:
输入 Map任务 中间结果
Reduce任务
输出
数据块1 Map()
K1,v1
K2,v2
K1,list(vl,v3
,v5,v7)
Reduce() K1,v9
数据块2 Map()
K1,v3
K2,v4
数据块3 Map()
K1,v5
K2,v6
K2,list(v2,v4
,v6,v8)
Reduce() K2,v10
数据块4 Map()
K1,v7
K2,v8
MapReduce 的处理流程
Hadoop 的分布式文件系统(HDFS)
Hadoop 分布式文件系统(HDFS)是 Google GFS 存储系统的开源实现,HDFS 具有高容
错性和高传输率,特别适合具有大数据集的程序应用。
HDFS 采用 master/slave 架构。一个
HDFS 集群包含
一个
单独的
名字节点(Namenode)和一定数目的数据节点(Datanode)组成
一个 HDFS 集群。
HDFS 被设计成一个可以在大集群中、跨机器、可靠的存储海量数据的框架。它
将所有文件存储成 block 块组成的序列,除了最后一个 block 块,所有的 block 块大小都是一样的,他
们存放在一组 Datanode 中,文件的所有 block 块都会因为容错而被复制,每个文件的 block 块大小和
容错复制份数都是可配置的,他们在 Namenode 的统一调度小进行数据块的创建、删除和复制工作。
下图所示为 HDFS 的体系架构
6