1.图解MapReduce

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>

3.代码实例:

  1. package com.felix;
  2. import java.io.IOException;
  3. import java.util.Iterator;
  4. import java.util.StringTokenizer;
  5. import org.apache.hadoop.fs.Path;
  6. import org.apache.hadoop.io.IntWritable;
  7. import org.apache.hadoop.io.LongWritable;
  8. import org.apache.hadoop.io.Text;
  9. import org.apache.hadoop.mapred.FileInputFormat;
  10. import org.apache.hadoop.mapred.FileOutputFormat;
  11. import org.apache.hadoop.mapred.JobClient;
  12. import org.apache.hadoop.mapred.JobConf;
  13. import org.apache.hadoop.mapred.MapReduceBase;
  14. import org.apache.hadoop.mapred.Mapper;
  15. import org.apache.hadoop.mapred.OutputCollector;
  16. import org.apache.hadoop.mapred.Reducer;
  17. import org.apache.hadoop.mapred.Reporter;
  18. import org.apache.hadoop.mapred.TextInputFormat;
  19. import org.apache.hadoop.mapred.TextOutputFormat;
  20. /**
  21. *
  22. * 描述:WordCount explains by Felix
  23. * @author Hadoop Dev Group
  24. */
  25. public class WordCount
  26. {
  27. /**
  28. * MapReduceBase类:实现了Mapper和Reducer接口的基类(其中的方法只是实现接口,而未作任何事情)
  29. * Mapper接口:
  30. * WritableComparable接口:实现WritableComparable的类可以相互比较。所有被用作key的类应该实现此接口。
  31. * Reporter 则可用于报告整个应用的运行进度,本例中未使用。
  32. *
  33. */
  34. public static class Map extends MapReduceBase implements
  35. Mapper<LongWritable, Text, Text, IntWritable>
  36. {
  37. /**
  38. * LongWritable, IntWritable, Text 均是 Hadoop 中实现的用于封装 Java 数据类型的类,这些类实现了WritableComparable接口,
  39. * 都能够被串行化从而便于在分布式环境中进行数据交换,你可以将它们分别视为long,int,String 的替代品。
  40. */
  41. private final static IntWritable one = new IntWritable(1);
  42. private Text word = new Text();
  43. /**
  44. * Mapper接口中的map方法:
  45. * void map(K1 key, V1 value, OutputCollector<K2,V2> output, Reporter reporter)
  46. * 映射一个单个的输入k/v对到一个中间的k/v对
  47. * 输出对不需要和输入对是相同的类型,输入对可以映射到0个或多个输出对。
  48. * OutputCollector接口:收集Mapper和Reducer输出的<k,v>对。
  49. * OutputCollector接口的collect(k, v)方法:增加一个(k,v)对到output
  50. */
  51. public void map(LongWritable key, Text value,
  52. OutputCollector<Text, IntWritable> output, Reporter reporter)
  53. throws IOException
  54. {
  55. String line = value.toString();
  56. StringTokenizer tokenizer = new StringTokenizer(line);
  57. while (tokenizer.hasMoreTokens())
  58. {
  59. word.set(tokenizer.nextToken());
  60. output.collect(word, one);
  61. }
  62. }
  63. }
  64. public static class Reduce extends MapReduceBase implements
  65. Reducer<Text, IntWritable, Text, IntWritable>
  66. {
  67. public void reduce(Text key, Iterator<IntWritable> values,
  68. OutputCollector<Text, IntWritable> output, Reporter reporter)
  69. throws IOException
  70. {
  71. int sum = 0;
  72. while (values.hasNext())
  73. {
  74. sum += values.next().get();
  75. }
  76. output.collect(key, new IntWritable(sum));
  77. }
  78. }
  79. public static void main(String[] args) throws Exception
  80. {
  81. /**
  82. * JobConf:map/reduce的job配置类,向hadoop框架描述map-reduce执行的工作
  83. * 构造方法:JobConf()、JobConf(Class exampleClass)、JobConf(Configuration conf)等
  84. */
  85. JobConf conf = new JobConf(WordCount.class);
  86. conf.setJobName("wordcount");           //设置一个用户定义的job名称
  87. conf.setOutputKeyClass(Text.class);    //为job的输出数据设置Key类
  88. conf.setOutputValueClass(IntWritable.class);   //为job输出设置value类
  89. conf.setMapperClass(Map.class);         //为job设置Mapper类
  90. conf.setCombinerClass(Reduce.class);      //为job设置Combiner类
  91. conf.setReducerClass(Reduce.class);        //为job设置Reduce类
  92. conf.setInputFormat(TextInputFormat.class);    //为map-reduce任务设置InputFormat实现类
  93. conf.setOutputFormat(TextOutputFormat.class);  //为map-reduce任务设置OutputFormat实现类
  94. /**
  95. * InputFormat描述map-reduce中对job的输入定义
  96. * setInputPaths():为map-reduce job设置路径数组作为输入列表
  97. * setInputPath():为map-reduce job设置路径数组作为输出列表
  98. */
  99. FileInputFormat.setInputPaths(conf, new Path(args[0]));
  100. FileOutputFormat.setOutputPath(conf, new Path(args[1]));
  101. JobClient.runJob(conf);         //运行一个job
  102. }
  103. }

Hadoop示例程序WordCount详解及实例(转)的更多相关文章

  1. (转载)Hadoop示例程序WordCount详解

    最近在学习云计算,研究Haddop框架,费了一整天时间将Hadoop在Linux下完全运行起来,看到官方的map-reduce的demo程序WordCount,仔细研究了一下,算做入门了. 其实Wor ...

  2. JStorm第一个程序WordCount详解

    一.Strom基本知识(回顾) 1,首先明确Storm各个组件的作用,包括Nimbus,Supervisor,Spout,Bolt,Task,Worker,Tuple nimbus是整个storm任务 ...

  3. Hadoop示例程序WordCount编译运行

    首先确保Hadoop已正确安装及运行. 将WordCount.java拷贝出来 $ cp ./src/examples/org/apache/hadoop/examples/WordCount.jav ...

  4. hadoop集群配置方法---mapreduce应用:xml解析+wordcount详解---yarn配置项解析

    注:以下链接均为近期hadoop集群搭建及mapreduce应用开发查找到的资料.使用hadoop2.6.0,其中hadoop集群配置过程下面的文章都有部分参考. hadoop集群配置方法: ---- ...

  5. hadoop应用开发技术详解

    <大 数据技术丛书:Hadoop应用开发技术详解>共12章.第1-2章详细地介绍了Hadoop的生态系统.关键技术以及安装和配置:第3章是 MapReduce的使用入门,让读者了解整个开发 ...

  6. 《Hadoop应用开发技术详解》

    <Hadoop应用开发技术详解> 基本信息 作者: 刘刚 丛书名: 大数据技术丛书 出版社:机械工业出版社 ISBN:9787111452447 上架时间:2014-1-10 出版日期:2 ...

  7. Protocol Buffer技术详解(Java实例)

    Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...

  8. Hadoop Hive sql语法详解

    Hadoop Hive sql语法详解 Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件 ...

  9. Protocol Buffer技术详解(C++实例)

    Protocol Buffer技术详解(C++实例) 这篇Blog仍然是以Google的官方文档为主线,代码实例则完全取自于我们正在开发的一个Demo项目,通过前一段时间的尝试,感觉这种结合的方式比较 ...

随机推荐

  1. startActivity跳转失败而且没有异常信息

    startActivity跳转不能显示目标activity的布局(显示空白页),而且没有异常信息 onCreate()方法重写错误 应该重写的是onCreate(Bundle savedInstanc ...

  2. 使用JS实现轮播图的效果

    其中的一些css样式代码就省略了,下面只把结构层html.行为层js的代码展示出来 ,看代码说事. 一.简单的轮播图 <div class="box" id="bo ...

  3. 浅谈HTTPS以及Fiddler抓取HTTPS协议

    最近想尝试基于Fiddler的录制功能做一些接口的获取和处理工作,碰到的一个问题就是简单连接Fiddler只能抓取HTTP协议,关键的登录请求等HTTPS协议都没有捕捉到,所以想让Fiddler能够同 ...

  4. Javascript实现二级select联动

    1.js cities = new Object(); cities['河北省']=new Array('石家庄', '张家口市', '承德市', '秦皇岛市', '唐山市', '廊坊市', '保定市 ...

  5. Windows下搭建NodeJS绿色版开发环境

    文章最初发布于szhshp的第三边境研究所, 转载请注明 开发背景 博客一直用的是Jekyll, 突然想玩玩NodeJS和Hexo, 于是就试着搭建一下 绿色环境, 基于Window8, 不需要管理员 ...

  6. 直播中用到的一些js

    1.document.hidden ,<高级三>中详细解释 25.2 Page Visibility API不知道用户是不是正在与页面交互,这是困扰广大Web 开发人员的一个主要问题.如果 ...

  7. ajax中使用post传值数组array

    如果我们在data中想放入array的参数,根据在网上搜索的结果有如下方法,但是没有一个成功的……我还是贴出来,别人成功了,也许是我哪里不对,日后也许还有机会研究..在文章的最后贴出了转化为json的 ...

  8. @Transactional 事务管理

    全面分析 Spring 的编程式事务管理及声明式事务管理 事务传播行为 所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为.在Tra ...

  9. Java开发工具安装步骤内容如下

    Java开发工具安装步骤内容如下 安装 开发工具 STS 链接下载网址 eclipse 链接下载网址 JDK安装 jdk链接下载地址 Marven环境 marven链接下载地址 Tomcat tomc ...

  10. DB2语句详细资料

    http://www.2cto.com/database/201307/225809.html 1.数据操作语言(DML:select,delete,insert,update) <>查询 ...