通过源代码认识Context的作用
来源:互联网 发布:金蝶房地产软件 编辑:程序博客网 时间:2024/06/08 06:41
转自:认识Context,保存在此学习。
我们通过来源码,来得到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方法
从上面run方法可以看出,K/V对是从传入的Context获取的。我们也可以从下面的map方法看出,输出结果K/V对也是通过Context来完成的。
- /**
- * Expert users can override this method for more complete control over the
- * execution of the Mapper.
- * @param context
- * @throws IOException
- */
- public void run(Context context) throws IOException, InterruptedException {
- setup(context);
- try {
- while (context.nextKeyValue()) {
- map(context.getCurrentKey(), context.getCurrentValue(), context);
- }
- } finally {
- cleanup(context);
- }
- }
那么我们上文中提到的Context对象是怎么回事呢?
0 0
- 通过源代码认识Context的作用
- hadoop开发必读:认识Context类的作用
- hadoop开发必读:认识Context类的作用
- Context的作用
- <context-param>的作用
- context的作用
- android context的作用
- context.progress()的作用
- <context-param>的作用
- tools:context的作用
- tools:context的作用
- <context:spring-configured/> 的作用
- <context:spring-configured/> 的作用
- context和Applicaion的作用
- android中Context的作用
- Mapreduce中context的作用
- Android--tools:context的作用
- <context:spring-configured/> 的作用
- UVALive 4636 B - Cubist Artwork
- Linux下EasyPanel版本安装及升级
- Chromium分发输入事件给WebKit处理的过程分析
- extern 用法总结
- 实战retrofit
- 通过源代码认识Context的作用
- B树、B+树与B*树简介
- handler机制详解
- 从B树、B+树、B*树谈到R 树
- MultiAutoCompleteTextView的学习
- git学习三——打发布标签(tag)
- 111
- extern "C"用法总结
- 数据结构之堆的定义