• Mapreduce原理


    切片的计算:

             long splitSize = Math.max(minSize, Math.min(maxSize, blockSize))

             默认:minSize  1

                         maxSize  Long.MAX_VALUE

                         blockSize  128 

    splitSize默认是128M。

    FileInputFormat先扫描切片,每次扫描一行数据,调用RecordReader类中的getCurrentKey()、getCurrentValue()返回一个key(行偏移量),value(每行的内容)。

    context将返回的key和value带入到MapTask中,让map方法去进行处理。

    map方法处理完以后,将处理后的key、value进行序列化,写入到环形缓冲区中。(默认是100M)。当环形缓冲区到达80%以后,就会将里面的内容进行溢写。

    溢写的时候会进行分区,并默认按照key的hashcode值,对reduceTask进行取余。根据余数相同的分到一个分区中。在分区时还会进行排序,默认按字典顺序。使用快速排序。

    Key -> key的hashcode ->根据reduceTask的个数取余->根据取余的结果进行分区。

    在MapTask结束的时候,会将相同分区的数据聚合到一块。并进行排序,使用归并排序。

    MapTask自此结束。 

    Reduce端会将map端处理完以后的文件,相同分区的拉取到一块。进行合并和排序,归并排序。

    一个ReduceTask去处理一个分区的数据。

    ReduceTask会根据相同的key分组,key相同的数据被分为了一组。

    一组数据去调用一次reduce方法。

    一个reduceTask处理完以后写入到一个reduceTask文件中。

    Shuffle:从数据进入缓冲区开始到reducetask调用reduce方法之前。

  • 相关阅读:
    es reason=Fielddata is disabled on text fields by default.
    macOS安装使用youget
    多账户拉取
    golang 基础笔记二
    PLI是什么
    Delphi 11.1 在FMX Image上画图遇到坑
    kbmMW 5.19 Debug状态编译的Android应用闪退的原因
    Delphi 11.1 用原生TBase64Encoding将图片文件转换成Base64串
    Unknown picture file extension (.jpg)
    Java中 DecimalFormat 用法详解
  • 原文地址:https://www.cnblogs.com/shqnl/p/11429596.html
Copyright © 2020-2023  润新知