分享

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


问题导读:
1.Context能干什么?
2.你对Context类了解多少?
3.Context在mapreduce中的作用是什么?


本文实在能够阅读源码的基础上一个继续,如果你还不能阅读源码,请参考

从零教你如何获取hadoop2.4源码并使用eclipse关联hadoop2.4源码



如何通过eclipse查看、阅读hadoop2.4源码

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

下面主要对Setup函数进行深入探讨:首先看下两个程序的区别:

1.jpg



2.jpg


区别在于第一个程序把context这个上下文对象作为map函数的参数传到map函数中,第二个程序则是在setup函数中处理了context对象,从这个角度讲,在Map类的实例中是可以拿到Context这个上下文对象的,这一点是毋庸置疑的,不管是在类内部的哪个函数中使用都可以,既然是这样,那么讨论的重点就是map这个类中方法的声明及执行了,所以分析下Mapper类的源代码:

3.jpg


在mapper类中,只对这个方法进行了声明,也就是说它的子类可以重新实现这个方法,这一点很容易理解的。

下面从源码级分析下整个mapper类的结构和hadoop在设计这个类时的巧妙之处:

Map的主要任务就是把输入的key value转换为指定的中间结果(其实也是key value),这个类主要包括了四个函数:

4.jpg


Setup一般是在执行map函数前做一些准备工作,map是主要的数据处理函数,cleanup则是在map执行完成后做一些清理工作和finally字句的作用很像,下面看一下run方法:

5.jpg


这个方法调用了上面的三个函数,组成了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对象是怎么回事呢?


6.jpg


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




参考:http://www.dataguru.cn/thread-23148-1-1.htm

已有(3)人评论

跳转到指定楼层
tang 发表于 2015-4-3 21:22:36
回复

使用道具 举报

jiadianyan 发表于 2016-7-12 13:38:33
感谢楼主分享。
回复

使用道具 举报

spftoto 发表于 2018-7-8 15:33:45
抱着期待来看你帮我讲解Context类,你给我讲那么多mapper类,还是没有看到context类的真正的东西样。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条