zoukankan      html  css  js  c++  java
  • MapRedue详细工作流程

    MapRedue详细工作流程

    MapReduce工作流程一

    MapReduce工作流程二

    简述

    (1)客户端submit之前获取待处理的数据信息,根据参数配置,形成一个任务分配的规划。
    (2)提交切片信息到YARN(split.xml,job.split,wc.jar)
    (3)由MRAPPMaster计算出MapTask的个数
    (4)启动MapTask
    (5)通过InputFormat拷贝数据,默认使用TextInputFormat
    (6)执行用户自定义的Map()方法
    (7)写出数据到环形缓冲区
    (8)环形缓冲区默认大小是100M,80%溢出文件。溢出文件之前对数据进行分区排序
    (9)环形缓冲区溢写到文件中,此时的文件是分区且有序的
    (10)对结果文件进行归并排序
    (11)如果设置有合并操作,执行合并,合并之后再次进行归并
    (12)所有的MapTask执行完成之后,启动相应数量的ReduceTask,并告知Reduce的操作范围(分区)
    (13)Reduce拷贝Map端的输出文件,先拷贝到内存,内存不足,写入到磁盘
    (14)合并文件,归并排序,进入Reduce方法
    (15)如果设置了分组操作,进行分组(分组是为了让两个不相同的对象,
    							通过某一个条件让其认为是一个对象,从而进入到一个Reduce方法中)	
    (16)执行用户自定义的Reduce方法
    (17)通过OutputFormat将执行的结果输出到文件中
    
    
    
    
    1)maptask 收集我们的 map()方法输出的 kv 对,放到内存缓冲区中
    2)从内存缓冲区不断溢出本地磁盘文件,可能会溢出多个文件
    3)多个溢出文件会被合并成大的溢出文件
    4)在溢出过程中,及合并的过程中,都要调用 partitioner 进行分区和针对 key 进行排
    序
    5)reducetask 根据自己的分区号,去各个 maptask 机器上取相应的结果分区数据
    6)reducetask 会取到同一个分区的来自不同 maptask 的结果文件,reducetask 会将这些
    文件再进行合并(归并排序)
    7)合并成大文件后,shuffle 的过程也就结束了,后面进入 reducetask 的逻辑运算过程
    (从文件中取出一个一个的键值对 group,调用用户自定义的 reduce()方法)
    3)注意
    Shuffle 中的缓冲区大小会影响到 mapreduce 程序的执行效率,原则上说,缓冲区越大,
    磁盘 io 的次数越少,执行速度就越快。
    环形缓冲区的大小可以通过参数调整,参数:io.sort.mb 默认 100M。
    

    本博客仅为博主学习总结,感谢各大网络平台的资料。蟹蟹!!

  • 相关阅读:
    oracle函数查询数据字典
    股票市场不是年轻人应该去的地方
    惊蟄
    大学问
    教条示龙场诸生
    生成器表达式
    三次锁定(文件加强版)
    文件的增删改查
    Python试题(1)
    Python入门(1)
  • 原文地址:https://www.cnblogs.com/shaofeer/p/11154307.html
Copyright © 2011-2022 走看看