专栏首页about云hadoop开发必读:认识Context类的作用

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

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

本文实在能够阅读源码的基础上一个继续,如果你还不能阅读源码,请参考 从零教你如何获取hadoop2.4源码并使用eclipse关联hadoop2.4源码 如何通过eclipse查看、阅读hadoop2.4源码 下面我们通过来源码,来得到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方法

  /**

   * 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);

    }

  }

从上面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对象很相似。

本文分享自微信公众号 - about云(wwwaboutyuncom)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2014-06-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • hive数据:名词解释

    问题导读 1.hive数据分为那两种类型? 2.什么表数据? 3.什么是元数据? 4.Hive表里面导入数据的本质什么? 5.表、分区、桶之间之间的关系是什么?...

    学到老
  • 看2014年云计算和大数据的发展

    在2013年,我们看到了越来越多的大数据项目走出概念验证阶段,进入了生产和实施阶段。大数据并不是一个全新的思路了;企业们知道需要解决它,由这些大数据可以产生...

    静一
  • 大数据Hadoop解决方案的形势

    根据最新的Forrest报告,有很多公司都在努力挖掘他们拥有的大量数据,包括结构化、非结构化、半结构化以及二进制数据等,探索对数据的深入利用。下面是报告结论...

    静一
  • 开源框架Hadoop发布新版本

    分布式计算开源框架Hadoop近日发布了今年的第一个版本Hadoop-2.3.0,新版本不仅增强了核心平台的大量功能,同时还修复了大量bug。 新版本对...

    静一
  • Hadoop查看所有JOB以及如何Kill指定用户的所有Job

    如何kill掉制定用户的所有job,有没有现成的命令?我看了一下hadoop job命令的提示,没有这样的命令。 其实实现kill指定用户的job也非常简单,本...

    学到老
  • 为什么不改进MapReduce,而要取代它?

    MapReduce的高延迟已经成为Hadoop发展的瓶颈,为当前的MapReduce寻找性能更高的替代品已成为Hadoop社区的一个共识。 MapReduce ...

    静一
  • 2014年大数据与云计算的预测

    在2013年,我们看到了越来越多的大数据项目走出概念验证阶段,进入了生产和实施阶段。大数据并不是一个全新的思路了;企业们知道需要解决它,由这些大数据可以产生...

    静一
  • 一个紧急查询的改进思路(r7笔记第44天)

    今天下午有一个紧急需求,是辅助业务部门做一个紧急查询,既然说紧急查询,那么肯定业务上需要加急处理,那么很快就需要找到我们DBA来帮忙了。 需求的情况是,需要根据...

    jeanron100
  • 大数据公司Cloudera获得一轮投资

    为企业级市场提供大数据系统处理的创业公司 Cloudera 刚获得一轮 1.6 亿美元的融资,此轮融资由 T. Powe Price 领投,Google Ven...

    静一
  • 六个超大规模Hadoop部署案例

    Hadoop的优点很多,但也并非十全十美。这次我们介绍eBay、Orbitz Worldwide、Facebook、Infchimps等大型网络公司实际部署...

    静一

扫码关注云+社区

领取腾讯云代金券