Job流程:Mapper类分析

此文紧接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当中

时间: 2024-10-12 18:49:26

Job流程:Mapper类分析的相关文章

从ViewRootImpl类分析View绘制的流程(一)

[出处:从ViewRootImpl类分析View绘制的流程 CSDN 废墟的树] 从上两篇博客 <从setContentView方法分析Android加载布局流程> 和 <从LayoutInflater分析XML布局解析成View的树形结构的过程> 中我们了解到Activity视图UI是怎么添加到Activity的根布局DecorView上面的. 我们知道Activity中的PhoneView对象帮我们创建了一个PhoneView内部类DecorView(父类为FrameLayou

从ViewRootImpl类分析View绘制的流程

[转载请注明出处:从ViewRootImpl类分析View绘制的流程 CSDN 废墟的树] 从上两篇博客 <从setContentView方法分析Android加载布局流程> 和 <从LayoutInflater分析XML布局解析成View的树形结构的过程> 中我们了解到Activity视图UI是怎么添加到Activity的根布局DecorView上面的. 我们知道Activity中的PhoneView对象帮我们创建了一个PhoneView内部类DecorView(父类为Frame

在Ceph中创建虚拟机流程改进之分析

作为个人学习笔记分享,有任何问题欢迎交流! 最近在Gerrit中看到一个change:https://review.openstack.org/#/c/94295/ , 它主要是对当前在Ceph中创建虚拟机的流程的改进.如果glance的backend是ceph, 则nova创建虚拟机到RBD的流程是这样的: 通过glance从ceph中下载image --> 本地 --> 复制image到rbd 这个change的目的就是:不需要下载到本地,直接在rbd中复制image,以提高虚拟机创建的速

Cordova Android源码分析系列二(CordovaWebView相关类分析)

本篇文章是Cordova Android源码分析系列文章的第二篇,主要分析CordovaWebView和CordovaWebViewClient类,通过分析代码可以知道Web网页加载的过程,错误出来,多线程处理等. CordovaWebView类分析 CordovaWebView类继承了Android WebView类,这是一个很自然的实现,共1000多行代码.包含了PluginManager pluginManager,BroadcastReceiver receiver,CordovaInt

支付宝app支付java后台流程及原理分析

java版支付宝app支付流程及原理分析 本实例是基于springmvc框架编写     一.流程步骤         1.执行流程           当手机端app(就是你公司开发的app)在支付页面时,调起服务端(后台第1个创建订单接口)接口,后台把需要调起支付宝支付的参数返回给手机端,手机端拿到         这些参数后,拉起支付宝支付环境完成支付,完成支付后会调异步通知(第2个接口),此时需要给支付宝返回成功或者失败信息,成功后会调用同步通知(第3个接口)         返回支付成

MFC的窗口分割的设计与实现以及CSplitterWnd 类分析

1 引言 在Microsoft VC++ 6.0 中,基于MFC 的应用程序一般分为以下几种:多文档界面(MDI). 单文档界面(SDI)以及基于对话框的应用程序.其中单文档又可分为单视图的和多视图的, 一般情况下,单文档仅需要单视图就够了,如Windows 自带的记事本.画图程序等等,但 在一些情况下,单文档需要多视图支持,比如同时观察文档的不同部分,同时从不同的角度 观察同一文档等. 在MFC 的框架下,文档对象(CDocument)有一个保存其所有视图的列表,并提供了 增加视图(AddVi

JAVA File类 分析(三)

前面两篇与大家一起研究了unix下的文件系统,本篇将和大家一起分析 文件的属性和文件夹. ok,废话不说,先来段代码 #include <stdio.h> #include <sys/types.h> #include <dirent.h> void do_ls(char[]); void main(int ac,char *av[]){ if(ac==1) do_ls("."); else{ while(--ac){ printf("%s

Tomcat 学习进阶历程之Tomcat架构与核心类分析

前面的http及socket两部分内容,主要是为了后面看Tomcat源码而学习的一些网络基础.从这章开始,就开始实际深入到Tomcat的'内在'去看一看. 在分析Tomcat的源码之前,准备先看一下Tomcat的架构与一些核心类的简单分析,并简单介绍一下Tomcat是如何处理一次Http请求的.这部分内容有相当一部分来源于网络,在此,感谢原作者的贡献. Tomcat的总体架构 Tomcat的架构关系可以从Tomcat的配置文件server.xml中看到端倪. 从上图中可以看出Tomcat 的心脏

Spring源码分析——BeanFactory体系之抽象类、类分析(二)

上一篇分析了BeanFactory体系的2个类,SimpleAliasRegistry和DefaultSingletonBeanRegistry——Spring源码分析——BeanFactory体系之抽象类.类分析(一),今天继续分析. 一.工厂Bean注册支持——FactoryBeanRegistrySupport 废话不多说,直接看我注释的源码: /* * Copyright 2002-2012 the original author or authors. * * Licensed und