程序员人生 网站导航

通过简单的Word Count讲解MapReduce原理以及Java实现

栏目:互联网时间:2014-10-04 08:00:00

MapReduce原理:

      MapReduce采用"分而治之"的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。简单地说,MapReduce就是"任务的分解与结果的汇总"

 

  在Hadoop中,用于执行MapReduce任务的机器角色有两个:一个是JobTracker;另一个是TaskTrackerJobTracker是用于调度工作的,TaskTracker是用于执行工作的。一个Hadoop集群中只有一台JobTracker

 

  在分布式计算中,MapReduce框架负责处理了并行编程中分布式存储、工作调度、负载均衡、容错均衡、容错处理以及网络通信等复杂问题,把处理过程高度抽象为两个函数:mapreducemap负责把任务分解成多个任务,reduce负责把分解后多任务处理的结果汇总起来。

 

需要注意的是,用MapReduce来处理的数据集(或任务)必须具备这样的特点:待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理。

Hadoop中,每个MapReduce任务都被初始化为一个Job,每个Job又可以分为两种阶段:map阶段和reduce阶段。这两个阶段分别用两个函数表示,即map函数和reduce函数。map函数接收一个形式的输入,然后同样产生一个形式的中间输出,Hadoop函数接收一个如形式的输入,然后对这个value集合进行处理,每个reduce产生01个输出,reduce的输出也是形式的。

下面以一个最简单的例子说明:

单词计数是最简单也是最能体现MapReduce思想的程序之一,可以称为MapReduce"Hello World",该程序的完整代码可以在Hadoop安装包的"src/examples"目录下找到。单词计数主要完成功能是:统计一系列文本文件中每个单词出现的次数,如下图所示。

 

package org.apache.hadoop.examples;

 

import java.io.IOException;

 

import java.util.StringTokenizer;

 

import org.apache.hadoop.conf.Configuration;

 

import org.apache.hadoop.fs.Path;

 

import org.apache.hadoop.io.IntWritable;

 

import org.apache.hadoop.io.Text;

 

import org.apache.hadoop.mapreduce.Job;

 

import org.apache.hadoop.mapreduce.Mapper;

 

import org.apache.hadoop.mapreduce.Reducer;

 

import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;

 

import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

 

import org.apache.hadoop.util.GenericOptionsParser;

 

public class WordCount {

 

  public static class TokenizerMapper

 

      extends Mapper {

 

      private final static IntWritable one = new IntWritable(1);

 

      private Text word = new Text();

 

 

 

      public void map(Object key, Text value, Context context)

 

        throws IOException, InterruptedException {

 

------分隔线----------------------------

上一篇 软考之算法

下一篇 我的简历

------分隔线----------------------------

最新技术推荐