zoukankan      html  css  js  c++  java
  • Job流程:Mapper类分析

    此文紧接Job流程:决定map个数的因素Map任务被提交到Yarn后,被ApplicationMaster启动,任务的形式是YarnChild进程,在其中会执行MapTask的run()方法。无论是MapTask还是ReduceTask都是继承的Task这个抽象类。

    1). Mapper类中 setup()cleanup() 两个方法负责 map 任务的 初始化 清理工作(默认是空实现)

    2). Mapper类中 run() 方法负责调用用户自定义的 map()方法。最主要的代码在于while()循环。其中,Context类是一个内部类,继承自MapContext接口,间接继承自TaskInputOutputContext类。此类中有一个nextKeyValue()抽象方法,用于将Inputsplit解析成一个个的键值对。在其子类MapContextImpl中提供了具体的解析实现。

    其中,reader是RecordReader类的一个实例。可以看出:map解析Inputsplit成一个个键值对是通过调用RecordReader类的nextKeyValue()方法完成的

    3). map结果是通过context.write()方法写入内存,实际是写入MapOutputBuffer类中。在此类实例化的第一个阶段是初始化init()过程,会根据配置信息初始化内存buf:

    • partition:读取job中设置的分区个数,默认为1.
    • sortmb:内存buf的大小,默认100MB
    • spillper:内存buf的阀值,默认0.8,即100*0.8=80MB
    • indexCacheMemoryLimit:内存index的大小。默认为1024*1024
    • sorter:对mapper输出的key的排序,默认是快排QuickSort

    MR执行流程

    1) 客户端提交一个MapReduce的JAR包给JobClient(提交方式:hadoop jar ...),JobClient就是提交节点

    2) JobClient通过RPC协议和RM进行通信,返回一个JobId存放JAR包的HDFS路径

    3) JobClient使用FileSystem将JAR包写入到HDFS当中(path = hdfs上的地址 + JobId)。默认10份(mapreduce.client.submit.file.replication),运行结束会被删掉。

    4) 开始提交MR任务,提交任务的描述信息(不是JAR包,而是JobId,JAR存放的位置,配置信息等)给RM。

    5) RM进行初始化任务。将任务的描述信息存放进调度器(默认是队列调度器)之中,NM通过心跳HeartBeat机制向RM领取任务。NM领取任务之后,NM启动相应的子进程ApplicationMaster运行任务

    6) ApplicationMaster读取HDFS上的要处理的文件,开始计算输入分片,每一个分片对应一个MapperTask

    7) NM通过HeartBeat心跳机制继续领取任务资源(任务的描述信息)

    8) 下载所需的JAR包,配置文件等

    9) NM启动一个子进程yarn-child,用来执行具体的子任务(MapperTask或ReducerTask)

    10) 将最终结果写入到HDFS当中

  • 相关阅读:
    定位中方向余弦矩阵(DCM)简介
    前端UI框架小汇总
    前端知识点小结
    overflow兼容iOS
    使用Flexible实现手淘H5页面的终端适配
    获取当前Javascript脚本文件的路径
    Javascript中document.execCommand()的用法 ( 实现浏览器菜单的很多功能 )
    jquery中的map()方法与js中的map()方法
    js判断是否为移动端
    页面制作注意事项
  • 原文地址:https://www.cnblogs.com/skyl/p/4747603.html
Copyright © 2011-2022 走看看