• MapReduce中Shuffle概念

    1. MapReduce中Map阶段处理数据是如何传递给Reduce端,这个过程是MapReduce框架中最关键的一个流程这个流程就是Shuffle
      shuffle:洗牌,发牌。在MapReduce中shuffle的和新机制是:数据分区,排序,缓存
      具体来说就是将MapTask输入的处理结果数据,分发给Reduce Task并在分发的过程中面对数据按key进行分区和排序
      Hadoop---shuffle
    2. 主要流程简介:
      先对数据进行切片然后将数据传递给map,map的输出是内存缓冲区(圆形缓冲区),内存缓冲区默认大小是100M当达到80%的时候即0.8的时候将数据溢写到本地,用剩余的20%用来继续获取数据,在溢写到磁盘的时候会执行partition(分区)和当前的sort(排序),然后对文件进行合并操作,合并完成之后reducetask会启动线程去maptask拉取数据,然后进行文件合并,并进行排序(归并排序),然后将小文件合并成一个大文件并调用Reduce方法完成最终输出效果
      合并操作有三种方式:
      1. 本地--->本地
      2. 内存--->本地
      3. 内存--->内存
    3. Hadoop---shuffle
  • 详细的MapTask和Reduce详细解释

    1. MapTask

      1. Input split 分配给Map
      2. Map过程进行处理,Mapper任务会接受输入的分片,然后不断调用map方法,对记录进行处理,处理完毕之后,转换为新的<key,value>输出(其中每一个分片对应一个map,一个map可以可以调用多次来处理该分片)
      3. Map的输出结果会缓存到内存中,当内存中buffer in  memory当达到阈(yu)值默认的80%,就会把记录溢写到磁盘文件中,然后用剩余的20%来继续接受数据,
        ps:在优化Map时可以调大当前buffer的阈值,缓存更多数据
      4. 内存中进行Partition(分区),默认是HashPartition
        ps:(采用Hash(key,hashcode() & Integer.MAX_VALUE)% munReduce Tasks),
        有多少分区就会有多少reducetask,目的就是将map的结果分给不同的reducer,有几个Partition就有几个reduce,partition的数据可以在job启动的时候使用通过参数设置,可以让map的结果均匀的非给不同的机器上的reducer,保证负载均衡
      5. 内存中Partition结束之后对于不同分区的数据,会按照key进行排序,这里的key必须实现WritableComparable接口,该接口实现了Comparable,因此才可以进行比较排序
      6. 对于排序之后的<key,value>会按照key进行分组,如果key相同,那么相同key的<key,value>就会被分到一个组中,最终,每个分组会调用一次reduce方法
      7. 排序结束之后,相同的key就在一起组成一个列表,如果我们设置过Combiner,就合并数据,减少磁盘
        ps:combiner本身就是一个reducer
      8. 当磁盘中的spill文件数目比规定的文件数据多的时候,会多次调用combiner,在不影响结果的前提下,combiner可以被调用多次
      9. Map结束的时候会把spill出来的多个文件合并成一个,merge过程最多10个文件合并成一个文件,多余的文件就多次调用merge
      10. Map端的shuffle完毕!数据都有序的存放到磁盘中等待reducer来获取
    2. ReduceTask

      1. reducer的后台会被AppMaster指定的机器上将Map的output拷贝到本地,先拷贝到内存,内存满了就拷贝磁盘
      2. reducer采用Merge sort将来自各个map的数据进行merge,merge成一个有序的更大的文件
      3. reduce端job开始,输入是shuffle sort所产生的文件
      4. reducer的数据文件不断的merge后,他们会出现最终文件,这个最终文件可能存储在磁盘,也可能在内存,reduce方法就会被启动,执行当前这个文件的处理,最终处理结果放到HDFS上

相关文章:

  • 2021-11-13
  • 2021-10-08
  • 2021-04-17
  • 2021-06-14
  • 2021-10-21
  • 2021-08-28
  • 2021-12-21
  • 2021-10-02
猜你喜欢
  • 2021-07-26
  • 2021-04-26
  • 2021-12-20
  • 2021-04-21
  • 2021-06-09
  • 2021-09-10
相关资源
相似解决方案