MapReduce:并行计算框架

MapReduce 是 Hadoop 的核心组成,是专用于进行数据计算的。重点掌握实现 MapReduce 算法的步骤,掌握 map、reduce 函数的特点、如何写函数。

如果我们把 MapReduce 拆开看,就是两个单词 map 和 reduce。map 翻译为“映射” ,reduce 翻译为“归约” 。

Hadoop中的Map和Reduce

1,在 Hadoop 中 ,map 函 数 位 于 内 置 类 org.apache.hadoop.mapreduce.Mapper<KEYIN,VALUEIN, KEYOUT, VALUEOUT>中,reduce 函数位于内置类 org.apache.hadoop.mapreduce.Reducer<KEYIN, VALUEIN, KEYOUT, VALUEOUT>中。 我们要做的就是覆盖 map 函数和 reduce 函数。

对于 Hadoop 的 map 函数和 reduce 函数,处理的数据是键值对,也就是说 map 函数接收的数据是键值对,两个参数;输出的也是键值对,两个参数;reduce 函数接收的参数和输出的结果也是键值对。

现在再看一下 Mapper 类,有四个泛型,分别是 KEYIN、VALUEIN、KEYOUT、VALUEOUT,前面两个 KEYIN、 VALUEIN 指的是 map 函数输入的参数 key、 value 的类型; 后面两个 KEYOUT、VALUEOUT 指的是 map 函数输出的 key、value 的类型。

源码中的Mapper.map

  /**
   * Called once for each key/value pair in the input split. Most applications
   * should override this, but the default is the identity function.
   */
  @SuppressWarnings("unchecked")
  protected void map(KEYIN key, VALUEIN value, 
                     Context context) throws IOException, InterruptedException {
    context.write((KEYOUT) key, (VALUEOUT) value);
  }
源码中输入参数 key、value 的类型就是 KEYIN、VALUEIN,每一个键值对都会调用一次 map 函数。在这里,map 函数没有处理输入的 key、value,直接通过 context.write(…)方法输出了,输出的 key、value 的类型就是 KEYOUT、VALUEOUT。这是默认实现,通常是需要我们根据业务逻辑覆盖的


2,接下来看一下 Reducer 类,也有四个泛型,同理,分别指的是 reduce 函数输入的 key、value
类型,和输出的 key、value 类型。看一下 reduce 函数定义

  /**
   * This method is called once for each key. Most applications will define
   * their reduce class by overriding this method. The default implementation
   * is an identity function.
   */
  @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);
    }
  }
reduce 函数的形参 key、value 的类型是 KEYIN、VALUEIN。要注意这里的value 是存在于java.lang.Iterable<VALUEIN>中的,这是一个迭代器,用于集合遍历的,意味着 values 是一个集合。reduce 函数默认实现是把每个 value 和对应的 key,通过调用context.write(…)输出了,这里输出的类型是 KEYOUT、VALUEOUT。通常我们会根据业务逻辑覆盖 reduce 函数的实现。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值