MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

  • 面向批处理的计算(主从模式),主要做离线处理
  • 一是软件框架,二是并行处理,三是可靠且容错,四是大规模集群,五是海量数据集。

一、MapReducer做什么

MapReduce擅长处理大数据,它为什么具有这种能力呢?这可由MapReduce的设计思想发觉。MapReduce的思想就是“分而治之”。(用空间换时间)

1、Mapper

Mapper负责“分”,即把复杂的任务分解为若干个“简单的任务”来处理。其中,简单的任务分为三层含义:

  1. 一是数据或计算的规模相对原任务要大大缩小
  2. 二是就近计算原则,即任务会分配到存放着所需数据的节点上进行计算;
  3. 三是这些小任务可以并行计算,彼此间几乎没有依赖关系

2、Reducer

Reducer负责对map阶段的结果进行汇总。至于需要多少个Reducer,用户可以根据具体问题,通过在mapred-site.xml配置文件里设置参数mapred.reduce.tasks的值,缺省值为1。

二、MapReducer工作机制

Master中就是 JobTracher,Slave做具体的任务(TaskTracker)  【计算向数据靠拢】

  1. 收入的数据通过split(分片)把数据分割,分发到不同节点上 【分片是mapper任务的最小单位】
  2. 每个Mapper任务在split进行处理
  3. Mapper任务输出数据
  4. 在shuffle过程中,节点数据交换
  5. 同样key值的中间data被送到同样的Reducer中 【Reducer做Mapper任务数据的归并】

  • JobTracker负责调度构成一个作业的所有任务,这些任务分布在不同的TaskTracker上
  • TaskTracker负责执行由JobTracker指派的任务,这里我们就可以将其理解为开发工程师,完成项目经理安排的开发任务即可。 

 三、MapReducer的输入输出

MapReduce框架运转在<key,value>键值对上,也就是说,框架把作业的输入看成是一组<key,value>键值对,同样也产生一组<key,value>键值对作为作业的输出,这两组键值对有可能是不同的。

一个MapReduce作业的输入和输出类型如下图所示:可以看出在整个流程中,会有三组<key,value>键值对类型的存在。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐