大数据技术MapReduce

1.1 分布式并行编程

1.出现的原因

大规模的集成电路的制作工艺已经到达一个极限,从2005年开始摩尔定律逐渐失效。为了提升程序的性能。就把希望寄托到cpu上。于是人们就借助分布式并行编程提高程序的运行性能。

  1. 分布式程序运行在大规模的计算机集群上,
  2. 集群中包括大量廉价服务器,
  3. 可以并行执行大规模数据处理任务,从而获取海量的计算能力

2.分布式并行编程和传统的程序开发的区别

传统的程序都是以单指令,单数据流的方式顺序执行,虽然这种方式符合人类的思维习惯。但是这种程序

  1. 性能受到单台机器性能的限制
  2. 可扩展性差

分布式并行程序运行在由大量计算机构成的集群上

  1. 可以利用集群的并行处理能力,同时向集群中增加新的计算节点
  2. 可以容易实现计算能力的扩充

1.2MapReduce模型简介

谷歌的三篇论文:GFS,MapReduce,BigTable
MapReduce是谷歌公司的核心计算模型。
MapReduce将复杂的,运行在大规模集群上的并行计算过程高度的抽象到两个函数:Map和Reduce

MapReduc的设计理念: 计算向数据靠拢
MapReduce的策略: 分而治之
hadoop框架是有java实现的,但是MapReduce应用不一定用java来写

1.3Map和Reduce

MapReduce模型的核心是Map和Reduce函数,二者都是由应用程序开发者负责具体实现的。
程序员只要关注如何实现Map和Reduce函数,而不需要处理并行编程中的其他复杂问题。

Map和Reduce都是以<key,value>作为输入,按照一定的映射规则转换成另外一个或者一批<key,value>进行输出

函数输入输出说明
Map<k1,v1>List(<k2,v2>)(1)将小数据集解析成一批<key,value>对,输入Map函数中进行处理(2)每一个输入的<k1,v1>会输出一批<k2,v2>,<k2,V2是计算的中间结果>
Reduce<k2,List(v2)><k3,v3>输入的中间结果<k2,list(v2)>中的,List(v2)表示一批属于同一个k2得value

1.4MapReduce的工作流程

1.4.1 MapReduce的各个执行阶段

  1. MapReduce框架使用InputFormat模块做Map前的预处理。然后将输入的文件分为逻辑上的多个InputSpit。InputSpit是MapReduce对文件处理和运算的输入单位,只是一个逻辑概念。Inputspit并没有对文件进行实际切割,只是记录了处理数据的位置和长度。
  2. InputSplit是逻辑切分而非物理切分。通过RecordReader(RR)根据InputSplitd的信息,加载数据并转换为合适的Map任务读取的键值对,输入给Map任务。
  3. Map任务会根据用户定义的映射规则,输出一系列的<key,Value>作为中间结果。
  4. 为了让Reduce可以并行处理Map结果。需要对Map的输出进行分区,排序,合并,归并等操作。得到<key,value-list>形式的中间结果。再交给相应的Reduce进行处理。这个过程叫做Shuffle。
  5. Reduce以系列的<key,value-list>作为输入执行用户的逻辑,输出结果给OutputFormat模块。
  6. OutputFormat模块进行验证,满足输出Reduce结果到分布式文件系统

1.4.2Shuffle过程

Reduce端的Shuffle过程

  1. 输入数据和执行Map任务
  2. 写入缓存
  3. 溢写(分区,排序,和合并)
  4. 文件归并

Reduce端的Shuffle过程

  1. 领取数据
  2. 归并数据
  3. 把数据输入给Reduce任务
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值