MapReduce 理解

MapReduce 理解

MapReduce原语句

MapReduce原语:“相同”key的键值对为一组调用一次Reduce方法,方法内迭代这组数据进行计算。

MapReduce 采用分治的思想 MapTask & ReduceTask

MapReduce的执行流程

  1. 数据一般都是存放在HDFS上,MapReduce 计算框架第一步 就是先通过InputFormat的子类将计算需要的数据进行分片(分片的方法式getSplits()),分片的数量决定了MapTask的数量
    Ps:并不是所有的文件都可以分片,比如gzip snappy压缩文件是无法分割的
  2. MapTask最终是通过nextkeyvalue() 方法 遍历分片中的数据,并按照行数以及每一行的数据分别作为key和value传递给map方法,Map方法拿到数据后进行处理(这个处理的逻辑是我们自己写的)输出新组成的key和value
  3. 其实Map方法之后 就进入到了shuffle过程 输出的数据先到分区方法partition()中,把数据标记好分区,(kvp)然后写入到缓形缓冲区当中,缓形缓冲区默认的大小是100M 当达到80%的时候,会进行溢写生成临时文件存到磁盘,当产生了大量的溢写文件时,会进行文件的合并
    (优化IO 批量/ 优化数据 排序)
    Ps:当缓形缓冲区达到百分之八十的时候,进行溢写,在溢写之前 在触碰IO之前, 进行了快排(也就是二次排序 先按分区排序,再按分区内key排序==》分区有序且分区内的key有序),把相同的key排在了一起,这些溢写文件都是内部有序 外部无序的,这个时候可以进行归并排序 形成一个大的文件,这样就方便了reduce端的处理,方便了下游拉去数据的性能
    Ps:一个分区会对应多个组 ,在map数据kv之后 进入内存缓冲区之前,会根据分区器进行分区
    相同的key的分区是一样的。hash取模
  4. Reduce端的处理,Reduce会根据Map端的分区号取拉取数据,拉取数据之后先存到内存中,内存不够再存在磁盘里,拉取完所有的数据之后,采用归并排序对内存和磁盘的数据进行排序,然后调用reduce()方法

你可能感兴趣的:(Hadoop,mapreduce,hadoop,big,data)