部分参考:http://www.javaeye.com/topic/606962

1.图解MapReduce

MapReduce整体流程图

并行读取文本中的内容,然后进行MapReduce操作

Map过程:并行读取三行,对读取的单词进行map操作,每个词都以<key,value>形式生成

reduce操作是对map的结果进行排序,合并,最后得出词频。

2.简单过程:

Input:

Hello World Bye World

Hello Hadoop Bye Hadoop

Bye Hadoop Hello Hadoop

Map:

<Hello,1>

<World,1>

<Bye,1>

<World,1>

<Hello,1>

<Hadoop,1>

<Bye,1>

<Hadoop,1>

<Bye,1>

<Hadoop,1>

<Hello,1>

<Hadoop,1>

Sort:

<Bye,1>

<Bye,1>

<Bye,1>

<Hadoop,1>

<Hadoop,1>

<Hadoop,1>

<Hadoop,1>

<Hello,1>

<Hello,1>

<Hello,1>

<World,1>

<World,1>

Combine:

<Bye,1,1,1>

<Hadoop,1,1,1,1>

<Hello,1,1,1>

<World,1,1>

Reduce:

<Bye,3>

<Hadoop,4>

<Hello,3>

<World,2>

MergeSort的过程(ps:2012-10-18)

Map:

<Hello,1><World,1><Bye,1><World,1><Hello,1><Hadoop,1><Bye,1><Hadoop,1><Bye,1><Hadoop,1><Hello,1><Hadoop,1>

MergeSort:

  1. <Hello,1><World,1><Bye,1><World,1><Hello,1><Hadoop,1> | <Bye,1><Hadoop,1><Bye,1><Hadoop,1><Hello,1><Hadoop,1>
  2. <Hello,1><World,1><Bye,1> || <World,1><Hello,1><Hadoop,1> | <Bye,1><Hadoop,1><Bye,1> || <Hadoop,1><Hello,1><Hadoop,1>
  3. <Hello,1><World,1> ||| <Bye,1> || <World,1><Hello,1> ||| <Hadoop,1> | <Bye,1><Hadoop,1> ||| <Bye,1> || <Hadoop,1><Hello,1> ||| <Hadoop,1>
  4. MergeArray结果:<Hello,1><World,1> ||| <Bye,1> || <Hello,1><World,1> ||| <Hadoop,1> | <Bye,1><Hadoop,1> ||| <Bye,1> || <Hadoop,1><Hello,1> ||| <Hadoop,1> 在|||这一层级
  5. MergeArray结果:<Bye,1><Hello,1><World,1> || <Hadoop,1><Hello,1><World,1> | <Bye,1><Bye,1><Hadoop,1> || <Hadoop,1><Hadoop,1><Hello,1> 在||这一层级
  6. MergeArray结果:<Bye,1><Hadoop,1><Hello,1><World,1><Hello,1><World,1> | <Bye,1><Bye,1><Hadoop,1><Hadoop,1><Hello,1><Hadoop,1> 在|这一层级
  7. MergeArray结果:<Bye,1><Bye,1><Bye,1><Hadoop,1><Hadoop,1><Hadoop,1><Hadoop,1><Hello,1><Hello,1><Hello,1><World,1><World,1> 排序完成

3.代码实例:

View Code

package com.felix;
import java.io.IOException;
import java.util.Iterator;
import java.util.StringTokenizer;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.mapred.FileOutputFormat;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.Mapper;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Reducer;
import org.apache.hadoop.mapred.Reporter;
import org.apache.hadoop.mapred.TextInputFormat;
import org.apache.hadoop.mapred.TextOutputFormat;
/*** * 描述:WordCount explains by Felix* @author Hadoop Dev Group*/
public class WordCount
{/*** MapReduceBase类:实现了Mapper和Reducer接口的基类(其中的方法只是实现接口,而未作任何事情)* Mapper接口:* WritableComparable接口:实现WritableComparable的类可以相互比较。所有被用作key的类应该实现此接口。* Reporter 则可用于报告整个应用的运行进度,本例中未使用。 * */public static class Map extends MapReduceBase implementsMapper<LongWritable, Text, Text, IntWritable>{/*** LongWritable, IntWritable, Text 均是 Hadoop 中实现的用于封装 Java 数据类型的类,这些类实现了WritableComparable接口,* 都能够被串行化从而便于在分布式环境中进行数据交换,你可以将它们分别视为long,int,String 的替代品。*/private final static IntWritable one = new IntWritable(1);private Text word = new Text();/*** Mapper接口中的map方法:* void map(K1 key, V1 value, OutputCollector<K2,V2> output, Reporter reporter)* 映射一个单个的输入k/v对到一个中间的k/v对* 输出对不需要和输入对是相同的类型,输入对可以映射到0个或多个输出对。* OutputCollector接口:收集Mapper和Reducer输出的<k,v>对。* OutputCollector接口的collect(k, v)方法:增加一个(k,v)对到output*/public void map(LongWritable key, Text value,OutputCollector<Text, IntWritable> output, Reporter reporter)throws IOException{String line = value.toString();StringTokenizer tokenizer = new StringTokenizer(line);while (tokenizer.hasMoreTokens()){word.set(tokenizer.nextToken());output.collect(word, one);}}}public static class Reduce extends MapReduceBase implementsReducer<Text, IntWritable, Text, IntWritable>{public void reduce(Text key, Iterator<IntWritable> values,OutputCollector<Text, IntWritable> output, Reporter reporter)throws IOException{int sum = 0;while (values.hasNext()){sum += values.next().get();}output.collect(key, new IntWritable(sum));}}public static void main(String[] args) throws Exception{/*** JobConf:map/reduce的job配置类,向hadoop框架描述map-reduce执行的工作* 构造方法:JobConf()、JobConf(Class exampleClass)、JobConf(Configuration conf)等*/JobConf conf = new JobConf(WordCount.class);conf.setJobName("wordcount");           //设置一个用户定义的job名称conf.setOutputKeyClass(Text.class);    //为job的输出数据设置Key类conf.setOutputValueClass(IntWritable.class);   //为job输出设置value类conf.setMapperClass(Map.class);         //为job设置Mapper类conf.setCombinerClass(Reduce.class);      //为job设置Combiner类conf.setReducerClass(Reduce.class);        //为job设置Reduce类conf.setInputFormat(TextInputFormat.class);    //为map-reduce任务设置InputFormat实现类conf.setOutputFormat(TextOutputFormat.class);  //为map-reduce任务设置OutputFormat实现类/*** InputFormat描述map-reduce中对job的输入定义* setInputPaths():为map-reduce job设置路径数组作为输入列表* setInputPath():为map-reduce job设置路径数组作为输出列表*/FileInputFormat.setInputPaths(conf, new Path(args[0]));FileOutputFormat.setOutputPath(conf, new Path(args[1]));JobClient.runJob(conf);         //运行一个job
    }
}

Hadoop示例程序WordCount详解及实例相关推荐

  1. STM32应用IAP进行程序更新详解及实例

      这是以前就想写的一个小专题关于IAP,以及IAP在STM32编程的应用,专题分三小节,主要介绍常见的单片机烧录方式,IAP的实际应用,以及Ymodem协议在IAP编程中应用,在笔记吃灰很久了,终于 ...

  2. java公钥加密私钥解密_公钥加密,私钥解密示例程序(JAVA)详解

    公钥与私钥机制属于非对称加密的范畴,非对称是相对于对称加密而言的,对称加密用于加密与解密的密钥是同一把,而非对称加密则用于加密与解密的密钥不相同,一个公开,称为公钥:一个保密,称为私钥,公钥与私钥必须 ...

  3. python随机数程序源码_Python 实现随机数详解及实例代码

    Python3实现随机数 random是用于生成随机数的,我们可以利用它随机生成数字或者选择字符串. random.seed(x)改变随机数生成器的种子seed. 一般不必特别去设定seed,Pyth ...

  4. java拉姆达表达式事例,Java Lambda表达式详解和实例

    简介 Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体( ...

  5. hadoop之hdfs命令详解

    目录 一.hadoop命令 1.archive 2.checknative 3.classpath 4.credential 5.distcp(比较常用) 6.fs 7.jar 8.key 9.tra ...

  6. Flutter中Scaffold布局的使用详解及实例代码

    Flutter中Scaffold布局的使用详解及实例代码 Scaffold实现了基本的Material布局.只要是在Material中定义了的单个界面显示的布局控件元素,都可以使用Scaffold来绘 ...

  7. python的执行过程_在交互式环境中执行Python程序过程详解

    前言 相信接触过Python的伙伴们都知道运行Python脚本程序的方式有多种,目前主要的方式有:交互式环境运行.命令行窗口运行.开发工具上运行等,其中在不同的操作平台上还互不相同.今天,小编讲些Py ...

  8. java super实例_java Super 用法详解及实例代码

    java Super 用法详解及实例代码 发布于 2021-1-8| 复制链接 摘记: java  Super 用法详解 1)有人写了个很好的初始化属性的构造函数,而你仅仅想要在其中添加另一些自己新建 ...

  9. java技术详解_Java反射技术详解及实例解析

    前言 相信很多人都知道反射可以说是Java中最强大的技术了,它可以做的事情太多太多,很多优秀的开源框架都是通过反射完成的,比如最初的很多注解框架,后来因为java反射影响性能,所以被运行时注解APT替 ...

最新文章

  1. Ubuntu 防火墙常用配置操作(ufw)【适用于 Debian 及其衍生版---Linux Mint、Deepin 等】
  2. xbox可以录视频声音吗_什么是Xbox Live Gold,它值得吗?
  3. 在浏览器地址栏按回车、F5、Ctrl+F5刷新网页的区别
  4. cout输出精确小数点
  5. java双向链表结构_【Java数据结构】2.3双向链表的迭代实现
  6. LR报错 No buffer space available Try changing the registry value 端口号不够用了
  7. Linux安装Jenkins教程
  8. 基于JavaWeb的汽车销售管理系统
  9. Matlab plot画图线型、符号及颜色
  10. [论文总结] 深度学习在农业领域应用论文笔记8
  11. VTN联合GWI共同启动“全球健康登月计划”让更多人享受到健康新生活
  12. 自定义 iPhone 铃声
  13. 发明专利名称的撰写原则和技巧总结
  14. 王小云院士真地破解了 MD5 吗
  15. 惠普打印机卡纸问题,解决.
  16. 解决org.junit.runners.model.InvalidTestClassError: Invalid test class ‘xxx‘ 1. No runnable methods
  17. 原理+实战|7天带你学会GAN,生活从此乐无限
  18. 嵌入式系统学习---------2.嵌入式系统设计过程
  19. 语文天地杂志语文天地杂志社语文天地编辑部2022年第6期目录
  20. sqli-labs靶场(1-22关)

热门文章

  1. Nginx反向代理以及负载均衡配置
  2. 《C++面向对象高效编程(第2版)》——2.29 泛化关系(is-a)
  3. codevs 1531 山峰
  4. webApp移动开发之REM
  5. 自己动手编写tomcat服务器(三)
  6. Oracle 包(Package)
  7. 火狐中H1到H5都有特定margn
  8. 让asp.net默认的上传组件支持进度条反映(转)
  9. yii2快速導出phpexcel
  10. VUE中让由全局变量添加生成的新数组不随全局变量的变化而变化