在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. SQL TOP分页法

    原理: PageSize, PageIndex: 升序   order  by  a asc a的 值 大于, 上一页数据 最大的  a值. 降序  order by  a desc a的 值 小于, ...

  2. CF715E Complete the Permutations(第一类斯特林数)

    题目 CF715E Complete the Permutations 做法 先考虑无\(0\)排列的最小花费,其实就是沿着置换交换,花费:\(n-\)环个数,所以我们主要是要求出规定环的个数 考虑连 ...

  3. Tomcat Connector 参数优化说明

    默认参数 注: Connector 通常在%HOME_TOMCAT%/conf/servser.xml 文件内 # 正常参数 <Connector port=" protocol=&q ...

  4. 安装MySQL 5.6

    记录安装mysql 5.6的全过程 下载安装包(尝试过使用mysql的yum源去安装--如果你的网络够好的话...) 注:我的系统是Centos 7.2的 如下,根据自己的需求去下载 CentOS L ...

  5. Eclipse 添加JSP模板

    0.环境 Eclipse IDE for Java EE Developers (4.3.2) win8.1系统 1.原因 Eclipse自带新建JSP为: <%@ page language= ...

  6. nodejs 设计模式

    1 . 单例模式 顾名思义,单例就是保证一个类只有一个实例,实现的方法是,先判断实例是否存在,如果存在则直接返回,若不存在,则创建实例对象,并将实例对象保存在静态变量中,当下次请求时,则可以直接返回这 ...

  7. 一位交易巨匠的十年心得:如何使用MACD判断后期趋势,把握买卖点

    高手与散户的区别在哪里? 高手与散户的区别在哪里,从宏观上讲:一流高手用境界,二流高手用趋势,三流高手用技术,普通散户用迷糊.最高境界的人在讲心境如何,什么也不看,只用感觉就能炒好股赚钱.我说一流高手 ...

  8. nginx限制ip并发数

    nginx限制ip并发数,也是说限制同一个ip同时连接服务器的数量 1.添加limit_zone 这个变量只能在http使用 vi /usr/local/nginx/conf/nginx.conf l ...

  9. selenium学习笔记(selenium下载安装)

    博主自己捣鼓的接口框架先到这里 等工作上正式开始使用再后续完善需求 还是继续学习python.学编程就直接动手写 就想看看python+selenium的组合 什么都不多说.先下载安装 博主这里已经安 ...

  10. 【C#】Socket中的ssl通信

    引言    有个项目中用到了Socket ssl通信,在此记录一下. 证书 Socket ssl需要用到证书用来校验身份,而作为调试,我们只需用测试证书即可. 有个工具可以很方便地制作测试证书,下载地 ...