码迷,mamicode.com
首页 > 移动开发 > 详细

Job流程:Mapper类分析

时间:2015-08-27 13:14:09      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:

此文紧接Job流程:决定map个数的因素Job提交完成之后,由Mapper类进行处理。

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当中

Job流程:Mapper类分析

标签:

原文地址:http://www.cnblogs.com/skyl/p/4747603.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!