MR原语:map + reduce

  • map数量由什么确定?

    • map --- split 与split片数量一一对应
    • block块是真正被切割开的物理块,
    • split片是在block块根底上再切割的逻辑片,由block块决定
    • 一个job作业中map数量与split片数量无关
  • map 拿到数据后进行两头集映射(K,V),同时生成分区partition编号
  • reduce数量由什么决定?

    • 惯例:一个 K 对应一个 reduce
    • 也能够把多个 K 对应到一个 reduce,然而不能把一个 K 对应多个 reduce(雷同的 K 必须交给同一个 reduce)

  • 先获取split片,交给map(默认split片大小 == block块大小,128M)
  • map映射成(K,V)两头集后,先将数据写入内存缓冲区buffer in memory

    • 一次排序:在缓冲区中依照分区partition(有几个reduce就有几个分区partition)进行排序,雷同分区的数据放在一起
    • 二次排序:分区内依照K 进行排序,雷同的K 放到一起(一个reduce可能对应多个K)
    • 数据压缩combiner :在map端进行一次迭代计算后再发送给reduce 缩小reduce计算量
  • 内存缓冲区写满后,先译写成小文件存到磁盘,当map数据处理完之后会造成一堆小文件,

    • 三次排序:泛滥小文件还要进行排序,并合并成大文件
    • 四次排序:泛滥map产生的大文件再进行排序,合并成更大的文件
    • 最初合并成的更大的文件交给reduce解决