在Hadoop的mapper类中,有4个主要的函数,分别是:setup,clearup,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的内容来满足应用的需求。

在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的内容来满足应用的需求。

map/reduce类简单介绍的更多相关文章

  1. oc-12-NSString 类简单介绍及用法

    // 11-[掌握]NSString 类简单介绍及用法 #import <Foundation/Foundation.h> int main(int argc, const char * ...

  2. Tstrings类简单介绍及实例

    用TStrings保存文件;var  S: TStrings;begin  S := TStringList.Create();  { ... }  S.SaveToFile('config.txt' ...

  3. C++map类型 之 简单介绍

    一:map的前世今生 (1)从关联容器与顺序容器说起.关联容器通过键(key)存储和读取元素.而顺序容器则通过元素在容器中的位置顺序存储和訪问元素(vector,queue,stack,list等). ...

  4. 12.常用类简单介绍.md

    目录 1.Scanner类 2.System类 4.Object类和工具类 5.StringBuffer类和StringBuilder类 6.Math类 7.Random类和ThreadLocalRa ...

  5. Java学习笔记43(打印流、IO流工具类简单介绍)

    打印流: 有两个类:PrintStream,PrintWriter类,两个类的方法一致,区别在于构造器 PrintStream:构造方法:接收File类型,接收字符串文件名,接收字节输出流(Outpu ...

  6. Java并发之Semaphore和Exchanger工具类简单介绍

    一.Semaphore介绍 Semaphore意思为信号量,是用来控制同时访问特定资源的线程数数量.它的本质上其实也是一个共享锁.Semaphore可以用于做流量控制,特别是公用资源有限的应用场景.例 ...

  7. Java中的Number和Math类简单介绍

    Java Number类 一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double 等. 实例: int a = 5000; float b = 13.65 ...

  8. java IO类简单介绍

    一.流的概念 流是字节序列的抽象概念.流和文件的差别:文件是数据的静态存储形式,而流是指数据传输时的形态.文件只是流的操作对象之一.流按其操作的对象不同可以分为文件流.网络流.内存流.磁带流等.Jav ...

  9. android application类简单介绍(一)

    每次应用程序执行时.应用程序的application类保持实例化的状态. 通过扩展applicaiton类,能够完毕下面3项工作: 1.对android执行时广播的应用程序级事件如低低内做出响应. 2 ...

随机推荐

  1. netty2---服务端和客户端

    客户端: package com.client; import java.net.InetSocketAddress; import java.util.Scanner; import java.ut ...

  2. 如何编写自己的虚拟DOM

    要构建自己的虚拟DOM,需要知道两件事.你甚至不需要深入 React 的源代码或者深入任何其他虚拟DOM实现的源代码,因为它们是如此庞大和复杂--但实际上,虚拟DOM的主要部分只需不到50行代码. 有 ...

  3. uitableview 侧滑删除

    https://github.com/MortimerGoro/MGSwipeTableCell

  4. codeforces 738

    D: 题意:一行1*n的格子放船只,船数为a,船的长度为b,每格为0或1,1表示该格并不是船只的一部分,找出最少的格子数使得射击这些格子至少能打中一艘船. 思路:船的长度为b,即每段连续的长度为b的0 ...

  5. 并发-AtomicInteger源码分析—基于CAS的乐观锁实现

    AtomicInteger源码分析—基于CAS的乐观锁实现 参考: http://www.importnew.com/22078.html https://www.cnblogs.com/mantu/ ...

  6. thinkPHP中怎么使用阿里云的sdk

    使用阿里云官方给的方法总会报错 Class 'Home\Controller\DefaultProfile' not found 这样是因为namespace的原因,将aliyun sdk 放在con ...

  7. 十二道MR习题 – 1 – 排序

    题目: 一个文件,大小约为100G.文件的每一行都是一个数字,要求对文件中的所有数字进行排序. 对于这个题目,了解过Hadoop的同学可以笑而不语了.即使用spark实现也是非常简单的事情. 先说下如 ...

  8. JNI_Z_03_类中的字段和方法的签名

    1. Java类型 相应的签名 例子 boolean Z byte B char C short S int I long L float F double D void V Object L用&qu ...

  9. bootstrap框架:常用内容一

    <!DOCTYPE html><html lang="zh-CN"> <head> <meta charset="utf-8&q ...

  10. Python SQL相关操作

    环境 Anaconda3 Python 3.6, Window 64bit 目的 从MySQL数据库读取数据,进行数据查询.关联 代码 # -*- coding: utf-8 -*- "&q ...