[大数据]——MapReducer基础
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。面向批处理的计算(主
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
- 面向批处理的计算(主从模式),主要做离线处理
- 一是软件框架,二是并行处理,三是可靠且容错,四是大规模集群,五是海量数据集。
一、MapReducer做什么
MapReduce擅长处理大数据,它为什么具有这种能力呢?这可由MapReduce的设计思想发觉。MapReduce的思想就是“分而治之”。(用空间换时间)
1、Mapper
Mapper负责“分”,即把复杂的任务分解为若干个“简单的任务”来处理。其中,简单的任务分为三层含义:
- 一是数据或计算的规模相对原任务要大大缩小;
- 二是就近计算原则,即任务会分配到存放着所需数据的节点上进行计算;
- 三是这些小任务可以并行计算,彼此间几乎没有依赖关系
2、Reducer
Reducer负责对map阶段的结果进行汇总。至于需要多少个Reducer,用户可以根据具体问题,通过在mapred-site.xml配置文件里设置参数mapred.reduce.tasks的值,缺省值为1。
二、MapReducer工作机制
Master中就是 JobTracher,Slave做具体的任务(TaskTracker) 【计算向数据靠拢】
- 收入的数据通过split(分片)把数据分割,分发到不同节点上 【分片是mapper任务的最小单位】
- 每个Mapper任务在split进行处理
- Mapper任务输出数据
- 在shuffle过程中,节点数据交换
- 同样key值的中间data被送到同样的Reducer中 【Reducer做Mapper任务数据的归并】
- JobTracker负责调度构成一个作业的所有任务,这些任务分布在不同的TaskTracker上
- TaskTracker负责执行由JobTracker指派的任务,这里我们就可以将其理解为开发工程师,完成项目经理安排的开发任务即可。
三、MapReducer的输入输出
MapReduce框架运转在<key,value>键值对上,也就是说,框架把作业的输入看成是一组<key,value>键值对,同样也产生一组<key,value>键值对作为作业的输出,这两组键值对有可能是不同的。
一个MapReduce作业的输入和输出类型如下图所示:可以看出在整个流程中,会有三组<key,value>键值对类型的存在。
更多推荐
所有评论(0)