zoukankan      html  css  js  c++  java
  • MapReduce源码Mapper和Reducer


    1、Mapper类,有setup()、map()、run()、cleanup()这4个方法,如下:
        setup():在run方法执行前首先被调用,且只调用1次,通常用于初始化。
        map():需要重写的方法,此方法中实现业务逻辑。run方法会循环遍历,为每个key、value调用一次这个方法。
        run():此方法由框架控制执行。
        cleanup():map函数处理完所有的key、value会停止遍历,接下来调用此方法1次用于清理。
        
        Mapper类源码如下:    
            public class Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT> {

              public abstract class Context implements MapContext<KEYIN,VALUEIN,KEYOUT,VALUEOUT> {}
              
              protected void setup(Context context) throws IOException, InterruptedException {}

              @SuppressWarnings("unchecked")
              protected void map(KEYIN key, VALUEIN value, Context context) throws IOException, InterruptedException {
                context.write((KEYOUT) key, (VALUEOUT) value);
              }

              protected void cleanup(Context context) throws IOException, InterruptedException {}

              public void run(Context context) throws IOException, InterruptedException {
                setup(context);
                try {
                  while (context.nextKeyValue()) {
                    map(context.getCurrentKey(), context.getCurrentValue(), context);
                  }
                } finally {
                  cleanup(context);
                }
              }
              
            }

    2、Reducer类,有setup()、reduce()、run()、cleanup()这4个方法,如下:
        setup():在run方法执行前首先被调用,且只调用1次,通常用于初始化。
        reduce():需要重写的方法,此方法中实现业务逻辑。run方法会循环遍历,为每个key、value调用一次这个方法。
        run():此方法由框架控制执行。
        cleanup():reduce函数处理完所有的key、value会停止遍历,接下来调用此方法1次用于清理。
        
        Reducer类源码如下:    
            public class Reducer<KEYIN,VALUEIN,KEYOUT,VALUEOUT> {

              public abstract class Context implements ReduceContext<KEYIN,VALUEIN,KEYOUT,VALUEOUT> {}

              protected void setup(Context context) throws IOException, InterruptedException {}

              @SuppressWarnings("unchecked")
              protected void reduce(KEYIN key, Iterable<VALUEIN> values, Context context) throws IOException, InterruptedException {
                for(VALUEIN value: values) {
                  context.write((KEYOUT) key, (VALUEOUT) value);
                }
              }

              protected void cleanup(Context context) throws IOException, InterruptedException {}

              public void run(Context context) throws IOException, InterruptedException {
                setup(context);
                try {
                  while (context.nextKey()) {
                    reduce(context.getCurrentKey(), context.getValues(), context);
                    // If a back up store is used, reset it
                    Iterator<VALUEIN> iter = context.getValues().iterator();
                    if(iter instanceof ReduceContext.ValueIterator) {
                      ((ReduceContext.ValueIterator<VALUEIN>)iter).resetBackupStore();        
                    }
                  }
                } finally {
                  cleanup(context);
                }
              }
              
            }

  • 相关阅读:
    CodeIgniter控制器
    CodeIgniter URL添加后缀
    CodeIgniter 用户指南 基础教程 摘要
    微信公众平台搭建与开发
    星座与性格
    CodeIgniter学习笔记(十六)——CI中的验证码
    PHP 捕捉错误,记录到日志
    js写的闹钟,支持多个闹钟
    列王的纷争,COK,675区,有去的没有?加群:159108918,盟的名字准备叫:大话西游
    下载一个指定文件,下载成功后修改权限,自动重试60次,带详细日志记录。
  • 原文地址:https://www.cnblogs.com/mengyao/p/4869454.html
Copyright © 2011-2022 走看看