• 注册
  • BBS 大数据 关注:2 内容:74

    十二):mapper 本地模式执行过程源码分析

  • 查看作者
  • 打赏作者
  • 拉黑名单
  • 当前位置: 字节脉搏 > 大数据 > 正文
    VIP
    字节脉搏运营

    1. 得到jobsubmitter用于提交任务,使用的是LocalJobRunner#

    十二):mapper 本地模式执行过程源码分析

    2. 执行提交工作的提交任务方法#

    以下内容回帖刷新可见………………#

    十二):mapper 本地模式执行过程源码分析

    3. 得到提交job的工作目录#

    十二):mapper 本地模式执行过程源码分析

    4. 设置map数量#

    十二):mapper 本地模式执行过程源码分析

    5. 能过job配置信息得到使用的inputformat类的class地址,然后使用反射工类实例化,发现使用的是TextInputFormat。从而知道input.getSplits使用的是那个类里的getSplits方法。#

    十二):mapper 本地模式执行过程源码分析

    6. 写出配置文件到job工作目录,task生成的时候会被使用#

    十二):mapper 本地模式执行过程源码分析

    7. 正式提交任务#

    十二):mapper 本地模式执行过程源码分析

    8. 生成真正工作的job对象#

    十二):mapper 本地模式执行过程源码分析

    9. 调用job线程的run方法#

    十二):mapper 本地模式执行过程源码分析

    10. 开始运行map任务#

    十二):mapper 本地模式执行过程源码分析

    11. 启动maptaskRunnable线程#

    十二):mapper 本地模式执行过程源码分析

    12. 执行maptaskRunnable线程的run方法#

    十二):mapper 本地模式执行过程源码分析

    13. 初始化运行map任务的对象#

    十二):mapper 本地模式执行过程源码分析

    14. 提交任务运行#

    十二):mapper 本地模式执行过程源码分析

    15. 根据配置初始化map job#

    十二):mapper 本地模式执行过程源码分析

    16. 初始化过程#

    十二):mapper 本地模式执行过程源码分析

    17. 使用新的mapreducer api运行map任务#

    十二):mapper 本地模式执行过程源码分析

    18. 实例化自己配置的mapper类#

    十二):mapper 本地模式执行过程源码分析

    19. 实例化使用的inputformat#

    十二):mapper 本地模式执行过程源码分析

    20. 根据分块信息得到map输入文件#

    十二):mapper 本地模式执行过程源码分析

    21. map输出时使用的输出工具#

    十二):mapper 本地模式执行过程源码分析

    22. 在日志信息里能看到使用的是MapOutputBuffer。这个类是把输出结果输出到内存中去#

    十二):mapper 本地模式执行过程源码分析

    23. 包装map的context,指定输入、输出所使用的类型#

    十二):mapper 本地模式执行过程源码分析
    十二):mapper 本地模式执行过程源码分析
    十二):mapper 本地模式执行过程源码分析

    24. map中的context方法使用的write是mapContext的write方法。mapContext的具体实现是MapContextImpl。所以使用的是MapContextImpl它的父类的write方法。而父类里面使用的是mapoutputbuff的write方向#

    十二):mapper 本地模式执行过程源码分析
    十二):mapper 本地模式执行过程源码分析
    十二):mapper 本地模式执行过程源码分析
    十二):mapper 本地模式执行过程源码分析
    十二):mapper 本地模式执行过程源码分析

    25. 写入buffer时得到key value的分区号#

    十二):mapper 本地模式执行过程源码分析
    分区小于1时直接返回固定的分区号不进行计算
    十二):mapper 本地模式执行过程源码分析
    分区大于1时,也就是reducernum大于1时使用按key进行hash的算法进行分区
    十二):mapper 本地模式执行过程源码分析

    26. 序列化key值和value值进内存#

    十二):mapper 本地模式执行过程源码分析

    27. 如果达到内存阀值进行溢写操作#

    十二):mapper 本地模式执行过程源码分析

    28. 如果自定义了cleanup方法则执行自定义的cleanup方法#

    十二):mapper 本地模式执行过程源码分析

    29. 开始进行map任务的sort过程#

    十二):mapper 本地模式执行过程源码分析

    30. 执行newOutputCollector的close方法,内部执行的是mapOutputBuff的flush方法#

    十二):mapper 本地模式执行过程源码分析
    十二):mapper 本地模式执行过程源码分析

    31. 在flush方法内部执行的是buff剩余内存数据的排序和溢写#

    十二):mapper 本地模式执行过程源码分析

    32. 排序算法默认使用的是快速排序#

    十二):mapper 本地模式执行过程源码分析
    十二):mapper 本地模式执行过程源码分析

    33. 在硬盘上生成溢写文件,根据mapreduce.map.output.compress.codec配置的压缩算法进行压缩#

    十二):mapper 本地模式执行过程源码分析

    34. 如果有combiner则运行相应的combiner,combiner使用的是与map相同的溢写输出#

    十二):mapper 本地模式执行过程源码分析
    combiner使用的是reducer
    十二):mapper 本地模式执行过程源码分析

    35. 计算merge文件的索引长度#

    十二):mapper 本地模式执行过程源码分析

    36. 开始合并多个溢写文件#

    十二):mapper 本地模式执行过程源码分析

    37. 得到每个溢写输出文件的地址#

    十二):mapper 本地模式执行过程源码分析

    38. 如果只有一个溢写文件那这个溢写文件就被用做最后的merger文件也就是map最后的输出#

    十二):mapper 本地模式执行过程源码分析
    只有一个溢写文件时的文件地址
    十二):mapper 本地模式执行过程源码分析

    39. map任务的最终输出结果,一个是数据文件,一个是索引文件#

    十二):mapper 本地模式执行过程源码分析

    40. 关闭NewOutputCollector#

    十二):mapper 本地模式执行过程源码分析

    41. 完成mapper任务过程#

    十二):mapper 本地模式执行过程源码分析

    42. 通过reporter回报任务执行进度,这时map完成进度为100%#

    十二):mapper 本地模式执行过程源码分析

    43. 完成map任务的减幅操作#

    十二):mapper 本地模式执行过程源码分析

    来自海牛部落-青牛,http://hainiubl.com/topics/91

    请登录之后再进行评论

    登录
  • 做任务
  • 帖子间隔 侧栏位置: