AmosCloud

Library

Have a Question?

If you have any question you can ask below or enter what you are looking for!

day06_hadoop_MR

MapReduce

  • Split文件的分片
    分片原理:
    默认的分片大小是Block的大小
    一个文件最少分一个分片
    如果剩余的文件大小小于block的1.1倍,就不再进行切片而是成为一个切片

  • RecordReader<k,v>

    • nextKeyValue()
      进行IO操作,读取数据
      本方法返回一个boolean
    • currentKey()
    • currentValue()
  • FileInputFormat<k,v>

  • Mapper

    • setup()

    • map(k,v,context)

    • cleanup()
      run(){
      setup()
      while(nextKeyValue()){
      map(currentKey(),currentValue(),context)
      }
      cleanup()
      }

    • combiner 合并器
      combiner是MR中一个可以优化的点
      作用:combiner可以实现Map端的聚合
      使用:combiner在绝大部分可以使用的场景下,都和reduce的逻辑一致
      所以一般直接使用reduce,另外一些场景会影响到任务逻辑,就无法使用(求平均)

    • 分区

    • 默认:
      使用HashPartitoner对数据按照Key的Hash值和NumReduceTask求模
      模的值就是分区的编号
      reduce的数据量决定输出文件的数量
      Partitioner决定数据分区的数量

    • 排序
      MR框架在Map结束之后会自动按照Key进行排序
      所以放在Map输出的Key上的类必须实现Comparable接口
      并且实现comparaTo()方法
      在这个方法中可以按照多个字段实现多次排序

    • Hadoop自己的序列化
      如果我们自己写的类想要放在MR中的K,V的位置上
      必须实现Writable接口
      而且要实现两个方法
      write()序列化
      readFields()反序列化
      序列化和反序列化的顺序必须一致

    • outputFormat

    • RecordWriter
      write(k,v){
      k,v如果有reduce的话,这个kv是reduce的输出,如果没有reduce直接拿到map的输出
      可以自己实现io的操作控制输出逻辑
      }

    • GroupingComparator ?????
      在map结束后shuffle结束后,数据到达reduce端进行reduce方法处理之前
      MR框架给我们提供了一个排序的方法,GroupingComparator
      需要写一个类继承WritableComparator,

      1. 写一个构造方法
        调用super(需要排序的key类型,true)
      2. compara()实现排序逻辑,对数据进行reduce前的最后一次排序

You must be logged in to post a comment.