MapReduce简介

在过去的很长一段时间里,CPU的性能都会遵循“摩尔定律”,大约每隔18个月性能提升一倍。这意味着不需要对程序做任何改变,仅仅通过使用更高级的CPU,程序就可以享受免费的性能提升。但是,大规模集成电路的制作工艺已经达到一个极限,从2005年开始摩尔定律逐渐失效,就不能再把希望过多地寄托在性能更高的CPU身上。于是,人们开始钟情于分布式并行编程来提高程序的性能。分布式程序运行在大规模计算机集群上,集群中包括大量廉价服务器,可以并行执行大规模数据处理任务,从而获得海量的计算能力。
分布式并行程序可以运行在由大量计算机构成的集群上,从而可以充用集群的并行处理能力,同时通过向集群中增加新的计算节点,就可以很容易地实现集群算力的扩充。
谷歌公司最先提出了分布式并行编程模型 MapReduce,Hadoop MapReduce是它的开源实现。谷歌的Mapreduce运行在分布式文件系统GFS上。与谷歌类似,Hadoop MapReduce运行在分布式文件系统HDFS上。

一、什么是MapReduce

MapReduce就是一种实现并行计算的编程模型,它向用户提供接口,屏蔽了并行计算特别是分布式处理的诸多细节
MapReduce由两个概念合并而来,map(映射)和reduce(归约)。map负责把任务分解为多个任务,reduce负责把分解后多任务的处理结果进行汇总。
在MapReduce中,一个存储在分布式文件系统中的大规模数据集会被切分成许多独立的小数据块,这些小数据块可以被多个Map任务并行处理。MapReduce框架会为每个Map任务输入一个数据子集,Map任务生成的结果会继续作为Reduce任务的输入,最终由Reduce 任务输出最后结果,并写入分布式文件系统。
MapReduce由两个阶段组成。
map():任务分解。
reduce():结果汇总。

在这里插入图片描述

二、MapReduce编程模型

当编写完成MapReduce程序时,要配置为一个MapReduce作业(Job)。这里的“作业”可以理解为:为了进行一次分布式计算任务而编写 MapReduce程序后,将该程序提交到 MapReduce执行框架中并执行的全过程。
比如:我们的作业是获得每个单词出现的次数,这就是一个Job。
在这里插入图片描述

  1. input(输入):由JobTracker创建该Job,并根据Job的输入计算输入分片(Input
    Split)。这里要求待处理的数据集必须可以分解成许多小的数据集,且每个小的数据集都可以完全并行地进行处理。输入目录中文件的数量决定了分片的数量,如果单个文件超过HDFs默认块大小(64MB),则将按块大小进行分割。
  2. split(分片):作业调度器获取Job的输入分片信息,对输入分片中的记录按照一定规则解析成键值对。“键”(key)是每行的起始位置,以字节为单位,“值”(vaue)是本行文本内容,最后每个分片创建一个
    MapTask并分配到某个 TaskTracker。
  3. map(映射):TaskTracker开始执行MapTask,处理输入的每个键值对。如何处理取决于在该阶段的程序代码,处理完成后产生新的键值对,保存在本地。
  4. shuffle(混洗) :将MapTask的输出转换为ReduceTask的输入的过程。从图7.3中可以看出该过程会在各
    TaskTracker Node之间进行数据交换,按照key进行分组。
  5. reduce:读取Shuffling阶段的输出,开始执行ReduceTask,处理输入的每个键值对。同样如何处理取决于该阶段的程序代码。最后输出最终结果。

其中

每个map()方法负责计算一个输入分片并输出计算结果,由org.apache.hadoop.mapreduce.Mapper类提供。每个 MapTask都会创建一个Mapper实例。

每个reduce()方法负责将多个map()的处理结果进行汇总,由org.apache.hadoop.mapreduce.Reducer类提供。每个 ReduceTask都会创建一个 Reducer实例。
一个 MapReduce作业的完整运行过程包括10个步骤:

  1. 编写 MapReduce程序,包括Mapper处理、
    Reducer处理以及为执行这些处理而定义的作业,首先将所有这些程序打包后运行作业。
  2. 获取作业D
  3. 复制作业资源。
  4. 提交作业资源。
  5. 初始化作业。
  6. 获取输入分片。
  7. 心跳通信。TaskTracker通过运行一个简单的循环来定期发送“心跳”给JobTracker,表明Task
    Tracker是否还存活,同时也充当两者之间的消息通道。
  8. 获取作业资源。
  9. 分配任务。
  10. 运行任务 MapTask或 ReduceTask,最后输出 MapReduce任务处理结果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值