问题导读:
1.Context能干什么?
2.你对Context类了解多少?

3.Context在mapreduce中的作用是什么?

下面我们通过来源码,来得到Context的作用:

下面主要对Setup函数进行深入探讨:首先看下两个程序的区别:
 
 
区别在于第一个程序把context这个上下文对象作为map函数的参数传到map函数中,第二个程序则是在setup函数中处理了context对象,从这个角度讲,在Map类的实例中是可以拿到Context这个上下文对象的,这一点是毋庸置疑的,不管是在类内部的哪个函数中使用都可以,既然是这样,那么讨论的重点就是map这个类中方法的声明及执行了,所以分析下Mapper类的源代码:
 
在mapper类中,只对这个方法进行了声明,也就是说它的子类可以重新实现这个方法,这一点很容易理解的。
下面从源码级分析下整个mapper类的结构和hadoop在设计这个类时的巧妙之处:
Map的主要任务就是把输入的key value转换为指定的中间结果(其实也是key value),这个类主要包括了四个函数:
 
Setup一般是在执行map函数前做一些准备工作,map是主要的数据处理函数,cleanup则是在map执行完成后做一些清理工作和finally字句的作用很像,下面看一下run方法:
 
这个方法调用了上面的三个函数,组成了setup-map-cleanup这样的执行序列,这一点和设计模式中的模版模式很类似,当然在这里我们也可以改写它的源码,比如可以在map的时候增加多线程,这样可以对map任务做进一步的优化,从以上的分析可以很清楚的知道setup函数的作用了。

下面为run方法

  1. /**
  2. * Expert users can override this method for more complete control over the
  3. * execution of the Mapper.
  4. * @param context
  5. * @throws IOException
  6. */
  7. public void run(Context context) throws IOException, InterruptedException {
  8. setup(context);
  9. try {
  10. while (context.nextKeyValue()) {
  11. map(context.getCurrentKey(), context.getCurrentValue(), context);
  12. }
  13. } finally {
  14. cleanup(context);
  15. }
  16. }

复制代码

从上面run方法可以看出,K/V对是从传入的Context获取的。我们也可以从下面的map方法看出,输出结果K/V对也是通过Context来完成的。

那么上文中提到的Context对象是怎么回事呢?
 

原来它是mapper的一个内部类,简单的说顶级接口是为了在map或是reduce任务中跟踪task的状态,很自然的MapContext就是记录了map执行的上下文,在mapper类中,这个context可以存储一些job conf的信息,比如习题一中的运行时参数等,我们可以在map函数中处理这个信息,这也是hadoop中参数传递中一个很经典的例子,同时context作为了map和reduce执行中各个函数的一个桥梁,这个设计和java
web中的session对象、application对象很相似。

Hadoop中Context类的作用相关推荐

  1. Hadoop中Context类的作用和Mapper<LongWritable, Text, Text, LongWritable>.Context context是怎么回事【笔记自用】

    问题导读: 1.Context能干什么? 2.你对Context类了解多少? 3.Context在mapreduce中的作用是什么? 下面我们通过来源码,来得到Context的作用: 下面主要对Set ...

  2. .class与.java_Java中Class类的作用与深入理解

    Java中Class类的作用与深入理解 在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识.这个信息跟踪着每个对象所属的类.JVM利用运行时信息选择相应的方法执行.而保存 ...

  3. hadoop开发必读:认识Context类的作用

    问题导读: 1.Context能干什么? 2.你对Context类了解多少? 3.Context在mapreduce中的作用是什么? 本文实在能够阅读源码的基础上一个继续,如果你还不能阅读源码,请参考 ...

  4. Hadoop中Writable类

    1.Writable简单介绍 在前面的博客中,经常出现IntWritable,ByteWritable.....光从字面上,就可以看出,给人的感觉是基本数据类型 和 序列化!在Hadoop中自带的or ...

  5. 《小白兔到大黑牛》第十四篇Hadoop中五个进程作用

    问题导读: 1.job的本质是什么? 2.任务的本质是什么? 3.文件系统的Namespace由谁来管理,Namespace的作用是什么? 4.Namespace 镜像文件(Namespace ima ...

  6. java中math类的作用_Java开发知识之Java的数字处理类Math类

    Java开发知识之Java的数字处理类Math类 一丶Java.text.DecimalFormat类与NumberFormat类 首先 Java.text.DecimalFormat指的是Decim ...

  7. java中PageInfo类的作用及用法

    作用 在我们使用SpringBoot查询数据时,可能会返回多个结果,而前端页面需要分页展示数据,PageInfo这个类帮助我们对数据进行分页,我们只需要传我们需要的页数和总条数即可 用法 首先我们要在 ...

  8. java中static类的作用是什么意思_java中static关键字是什么意思

    java中static关键字是什么意思 发布时间:2020-11-11 11:01:11 来源:亿速云 阅读:86 作者:小新 这篇文章给大家分享的是有关java中static关键字是什么意思的内容. ...

  9. java中dateformat类的作用_java-SimpleDateFormat类中可用的日期格式是什么?

    让我抛出一些示例代码,这些代码是从[http://www3.ntu.edu.sg/home/ehchua/programming/java/DateTimeCalendar.html]中获得的.然后, ...

最新文章

  1. transition标签_图解直到今天也没什么人知道的原生dialog标签(非常详细)
  2. PowerShell runspace 的创建,使用和查错
  3. 【转】Ubuntu VI基本用法
  4. 同一台电脑上使用两个 github 账号
  5. 产品经理如何专业吐槽产品?友谊小船从此不再翻
  6. linux uname 命令 打印系统信息
  7. 2018--Linux命令总结整理复习版
  8. TensorFlow, PyTorch, Caffe2的比较
  9. 初识 Vue(11)---(Vue 中的事件绑定)
  10. C++ Templates 中的一个例子
  11. Deep Convolutional Network Cascade for Facial Point Detection论文算法解析
  12. HTML表格(table)属性--左右(colspan)、上下(rowspan)合并、合并边框、位置 部分内容
  13. Excel的数据导入到PB的DW中
  14. signature=6c079696129d622a67d7c54abb9b893c,合肥2017年1月24日至2017年2月10日交通违章查询...
  15. 基于ABAQUS蠕变储层稠油蒸汽吞吐开发过程数值模拟
  16. python四边形转矩形_如何用PIL将矩形图像映射成四边形?
  17. cas4.2登出后,跳转指定链接
  18. fun和fun()的区别,函数也是对象
  19. PHP Fatal error: Uncaught Error: Class ‘\Elasticsearch\Serializers\SmartSerializer‘ not found in /h
  20. catti 三笔 计算机专业,工科过CATTI三笔,学习计划真系统!

热门文章

  1. 数据预处理(Python scikit-learn)
  2. libjingle源码解析(4)-【PseudoTcp】建立UDP之上的TCP(2):对交互数据流的处理
  3. Swagger UI 与SpringMVC的整合 II
  4. Percona5.6自身已支持杀死慢SQL
  5. PhD representive Punting and Dinner Plan
  6. 纪念一下第一次在开源项目上commit:好神奇啊!
  7. SWIFT入门 Dictionary
  8. 通过SSH克隆远程仓库(GitLab)到本地
  9. 网页渲染的颜色竟然和设定值的不同!Chrome 61+色差解决办法
  10. maven+tomcat8.0+eclipse远程部署项目