Mapreduce计算过程

  • Mapreduce计算过程
    分为三个部分,map、shuffle和reduce,map负责对文件切片后的原始数据转化为key-value键值对,shuffle负责将map的结果进行整体分发给reduce作为输入,reduce对不同map任务得到的数据进行合并处理,得到最终的数据文件。
  • shuffle过程
    shuffle在map端和reduce都参与操作,所以可以分为map shuffle和reduce shuffle两个过程:
    map shuffle过程:
    从map的输出,需要经过分区、排序、合并过程输出为一个分区有序的文件。

在这里插入图片描述
首先根据数据的key值进行分区(默认是hash分区),然后数据写入一个环形缓冲区中,环形缓冲区的实质是一个字节数组,里面包含两部分数据,分别是数据和索引,索引中记录了每个key-value数据的分区等信息,环形缓冲区为100M,默认达到0.8的内存数据量时开始spill溢出到磁盘中,溢出过程前会对环形缓冲区按照partition和key进行排序操作(一般采用快排),也就是数据分区聚集,分区内按照key升序排列,如果这个时候设置了combiner的话,会按照相同的key进行合并,然后溢写到磁盘的一个文件中,当数据量很大的时候,会有多个这样的溢出小文件,多个小文件会按照分区进行合并,从而得到一个大的按照分区排序的输出文件。这是map shuffle做的事。

总结起来map shuffle需要做的事情有:
①分区partition(分区在进入缓冲区之前进行)
②写入环形内存缓冲区
③执行溢出写
排序sort(快排)—>合并combiner—>生成溢出写文件
④归并merge(归并排序),还可能再调用一次combiner
reduce shuffle:
reduce shuffle也有两个过程,分别是复制map数据然后排序合并。
当map输出文件后,会将map输出和机器位置的映射信息报告给application master,同时reduce也会定期向application master询问,获得所需要复制数据的位置。reduce通过http从map端复制相应的数据到自己的内存缓冲区中,当内存数据量达到一定量的时候,进行merge合并,如果设置了combiner,还会combine操作,因为每个map文件已经是有序的,所以多个文件合并的时候采用的是根据key进行归并排序,这样reduce shuffle就产生了一个整体有序的数据块。
reference1
reference2

  • shuffle怎么知道在哪拉取map输出数据给reduce?
    map执行完后会将map输出和机器位置的映射关系报告给application master,同时reduce会定期向application master询问,获得所需要的数据位置信息,之后reduce会通过http从map端复制相应的数据到reduce端的内存缓冲区中。

  • shuffle缺点:
    主要是数据传输IO的问题。由于从环形缓冲区需要溢写多个小文件到磁盘,产生较多的磁盘IO。

  • combiner函数作用和作用在几个地方:

  • 主要是实现本地key的聚合。
    一个map都可能会产生大量的本地输出,这些输出会通过网络到达reducer端,这样会浪费带宽。解决这个问题可以通过Combiner。Combiner的作用就是对map端的输出先做一次合并。
    combiner有三处:(1)从环形缓冲区写到磁盘(2)小文件合并为大文件(3)reduce的内存缓冲区溢写到磁盘中。

  • mapreduce执行速度太慢,优化措施:

  1. 自定义分区(自己定义分割点,数据量多的时候采样排序确定分割点),让key值尽量均匀分布在每个分区上。
  2. 当map端数据量太大的时候,可以对数据进行压缩。
  3. 在不影响最后结果的情况下,使用combiner,在本地对key进行聚合。
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值