一:Mapper类

在Hadoop的mapper类中,有4个主要的函数,分别是:setup,cleanup,map,run。代码如下:

  1. protected void setup(Context context) throws IOException, InterruptedException {
  2. // NOTHING
  3. }
  4. protected void map(KEYIN key, VALUEIN value,
  5. Context context) throws IOException, InterruptedException {
  6. context.write((KEYOUT) key, (VALUEOUT) value);
  7. }
  8. protected void cleanup(Context context) throws IOException, InterruptedException {
  9. // NOTHING
  10. }
  11. public void run(Context context) throws IOException, InterruptedException {
  12. setup(context);
  13. while (context.nextKeyValue()) {
  14. map(context.getCurrentKey(), context.getCurrentValue(), context);
  15. }
  16. cleanup(context);
  17. }
  18. }

由上面的代码,我们可以了解到,当调用到map时,通常会先执行一个setup函数,最后会执行一个cleanup函数。而默认情况下,这两个函数的内容都是nothing。因此,当map方法不符合应用要求时,可以试着通过增加setup和cleanup的内容来满足应用的需求。

二:Reducer类

在Hadoop的reducer类中,有3个主要的函数,分别是:setup,clearup,reduce。代码如下:
  1. /**
  2. * Called once at the start of the task.
  3. */
  4. protected void setup(Context context
  5. ) throws IOException, InterruptedException {
  6. // NOTHING
  7. }
  1. /**
  2. * This method is called once for each key. Most applications will define
  3. * their reduce class by overriding this method. The default implementation
  4. * is an identity function.
  5. */
  6. @SuppressWarnings("unchecked")
  7. protected void reduce(KEYIN key, Iterable<VALUEIN> values, Context context
  8. ) throws IOException, InterruptedException {
  9. for(VALUEIN value: values) {
  10. context.write((KEYOUT) key, (VALUEOUT) value);
  11. }
  12. }
  1. /**
  2. * Called once at the end of the task.
  3. */
  4. protected void cleanup(Context context
  5. ) throws IOException, InterruptedException {
  6. // NOTHING
  7. }
在用户的应用程序中调用到reducer时,会直接调用reducer里面的run函数,其代码如下:
  1. /*
  2. * control how the reduce task works.
  3. */
  4. @SuppressWarnings("unchecked")
  5. public void run(Context context) throws IOException, InterruptedException {
  6. setup(context);
  7. while (context.nextKey()) {
  8. reduce(context.getCurrentKey(), context.getValues(), context);
  9. // If a back up store is used, reset it
  10. ((ReduceContext.ValueIterator)
  11. (context.getValues().iterator())).resetBackupStore();
  12. }
  13. cleanup(context);
  14. }
  15. }
由上面的代码,我们可以了解到,当调用到reduce时,通常会先执行一个setup函数,最后会执行一个cleanup函数。而默认情况下,这两个函数的内容都是nothing。因此,当reduce不符合应用要求时,可以试着通过增加setup和cleanup的内容来满足应用的需求。

MapReduce框架Mapper和Reducer类源码分析相关推荐

  1. hisi3516dv300芯片基于hwmon驱动框架的温度获取驱动源码分析

    1.内核hwmon驱动框架 参考博客:<内核hwmon驱动框架详解以及海思芯片温度驱动分析>: 2.驱动实现的效果 /sys/devices/virtual/hwmon/hwmon0 # ...

  2. 02.并发编程(2)Thread类源码分析

    概述 在说线程之前先说下进程,进程和线程都是一个时间段的描述,是CPU工作时间段的描述. 进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位.每一 ...

  3. java vector实现的接口_java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析...

    java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异. 首先看一下List接口的的继承关系: list接口继承Colle ...

  4. 插件式换肤框架搭建 - 资源加载源码分析

    资源加载源码分析 1.首先我们来看一下ImageView是如何加载资源的: public ImageView(Context context, @Nullable AttributeSet attrs ...

  5. MapReduce中map并行度优化及源码分析

    mapTask并行度的决定机制 一个job的map阶段并行度由客户端在提交job时决定,而客户端对map阶段并行度的规划的基本逻辑为:将待处理数据执行逻辑切片(即按照一个特定切片大小,将待处理数据划分 ...

  6. java disruptor压测_Java并发框架Disruptor实现原理与源码分析(二) 缓存行填充与CAS操作...

    ##缓存行填充 关于缓存行填充在我个人的印象里面第一次看到是在Java的java.util.concurrent包中,因为当时很好奇其用法背后的逻辑,所以查了很多资料才明白到底是怎么回事*(也许事实上 ...

  7. java.lang.object源码_第三篇:java.lang.Object 类源码分析

    Object所包含的方法如下: ① public Object(); 构造函数: 大部分情况下,类对象的声明,都是通过构造函数完成的(Java中规定:在类定义过程中,对于未定义构造函数的类,默认会有一 ...

  8. Java 8 中 GZIPInputStream 类源码分析

    这是<水煮 JDK 源码>系列 的第4篇文章,计划撰写100篇关于JDK源码相关的文章 GZIPInputStream 类位于 java.util.zip 包下,继承于 InflaterI ...

  9. java.lang中String类源码分析

    一.类 public final class String:final关键字说明String类不能被修改(不能被其他类继承和重写) public final class Stringimplement ...

最新文章

  1. 素数、最大公约数、最下公倍数、质因数分解
  2. boost::test模块测试参数化测试
  3. 划分VLAN,根据每个VLAN通过DHCP分配IP地址
  4. 解决创建maven项目后,不能创建scala
  5. pata1015_ATA / PATA的完整形式是什么?
  6. CodeForces - 894E Ralph and Mushrooms (强连通缩点+dp)
  7. MySQL安装叫重启,如何重启MySQL,正确启动MySQL
  8. 递增三元组蓝桥杯c语言,蓝桥-递增三元组-蓝桥
  9. 06Matplotlib数据可视化--6.3折线图和柱状图
  10. Linux基础-获取命令帮助与命令的查找(1)
  11. ftp服务器默认文件夹,ftp服务器设置文件目录
  12. navicat建mysql数据库密码_Navicat修改MySQL数据库密码的多种方法
  13. Hexo博客-NexT主题自定义主页配置方法
  14. 微信小程序及其兼容性
  15. 基于朴素贝叶斯的兴趣分类
  16. stm32F407按键例程安富莱
  17. mysql删除某张表三个月前的数据
  18. Python基础(三)Python容器:列表、元组、字典和集合
  19. lamport面包店算法详细讲解及代码实现
  20. 日语二级语法汇总(part7/16)

热门文章

  1. SQL Server : T-SQL中拆分字符串的一个自定义函数
  2. 把项目发到github
  3. ubuntu 14.04 LTS 右键菜单解压压缩包时出错
  4. halcon算子翻译——set_framegrabber_param
  5. MathType如何设置标尺的单位
  6. 特别推荐:15个精美 Metro UI 风格 WordPress 主题
  7. Tomcat三种模式及配置APR模式
  8. 了解 NoSQL 的必读资料
  9. SpringBoot使用教程【1】Restful API设计 返回json,xml格式...
  10. js数组、字符串常用方法和互相转换,==和===