前提准备:

1.hadoop安装运行正常。Hadoop安装配置请参考:Ubuntu下 Hadoop 1.2.1 配置安装

2.集成开发环境正常。集成开发环境配置请参考 :Ubuntu 搭建Hadoop源码阅读环境

MapReduce编程实例:

MapReduce编程实例(一),详细介绍在集成环境中运行第一个MapReduce程序 WordCount及代码分析

MapReduce编程实例(二),计算学生平均成绩

MapReduce编程实例(三),数据去重

MapReduce编程实例(四),排序

MapReduce编程实例(五),MapReduce实现单表关联

 

开发示例:WordCount

本文例详细的介绍如何在集成环境中运行第一个MapReduce程序 WordCount,以及WordCount代码分析

新建MapReduce项目:

Finish生成项目如下,建立WordCount.java类

WordCount.java类代码以下详细解,先运行起来。

在HDFS建立新目录并上传若干实验用的文本,上传后如下:

配置Run Configuration 参数:

  1. hdfs://localhost:9000/user/dat/input hdfs://localhost:9000/user/dat/output

Run On Hadoop,

OK,运行成功,检查HDFS的文件生成

Eclipse中可以直接查看也可以在命令行中查看结果

OK,第一个MapReduce程序 WordCount已经成功运行。下面开始解析代码部分

----------------------------------------------烦人的分割线-----------------------------------------------------

代码:

  1. import java.io.IOException;
  2. import java.util.StringTokenizer;
  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.fs.Path;
  5. import org.apache.hadoop.io.IntWritable;
  6. import org.apache.hadoop.io.Text;
  7. import org.apache.hadoop.mapreduce.Job;
  8. import org.apache.hadoop.mapreduce.Mapper;
  9. import org.apache.hadoop.mapreduce.Reducer;
  10. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  11. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  12. import org.apache.hadoop.util.GenericOptionsParser;
  13. public class WordCount {
  14. //嵌套类 Mapper
  15. //Mapper<keyin,valuein,keyout,valueout>
  16. public static class WordCountMapper extends Mapper<Object, Text, Text, IntWritable>{
  17. private final static IntWritable one = new IntWritable(1);
  18. private Text word = new Text();
  19. @Override
  20. protected void map(Object key, Text value, Context context)
  21. throws IOException, InterruptedException {
  22. StringTokenizer itr = new StringTokenizer(value.toString());
  23. while(itr.hasMoreTokens()){
  24. word.set(itr.nextToken());
  25. context.write(word, one);//Context机制
  26. }
  27. }
  28. }
  29. //嵌套类Reducer
  30. //Reduce<keyin,valuein,keyout,valueout>
  31. //Reducer的valuein类型要和Mapper的va lueout类型一致,Reducer的valuein是Mapper的valueout经过shuffle之后的值
  32. public static class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
  33. private IntWritable result = new IntWritable();
  34. @Override
  35. protected void reduce(Text key, Iterable<IntWritable> values,
  36. Context context)
  37. throws IOException, InterruptedException {
  38. int sum  = 0;
  39. for(IntWritable i:values){
  40. sum += i.get();
  41. }
  42. result.set(sum);
  43. context.write(key,result);//Context机制
  44. }
  45. }
  46. public static void main(String[] args) throws Exception{
  47. Configuration conf = new Configuration();//获得Configuration配置 Configuration: core-default.xml, core-site.xml
  48. String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();//获得输入参数 [hdfs://localhost:9000/user/dat/input, hdfs://localhost:9000/user/dat/output]
  49. if(otherArgs.length != 2){//判断输入参数个数,不为两个异常退出
  50. System.err.println("Usage:wordcount <in> <out>");
  51. System.exit(2);
  52. }
  53. ////设置Job属性
  54. Job job = new Job(conf,"word count");
  55. job.setJarByClass(WordCount.class);
  56. job.setMapperClass(WordCountMapper.class);
  57. job.setCombinerClass(WordCountReducer.class);//将结果进行局部合并
  58. job.setReducerClass(WordCountReducer.class);
  59. job.setOutputKeyClass(Text.class);
  60. job.setOutputValueClass(IntWritable.class);
  61. FileInputFormat.addInputPath(job, new Path(otherArgs[0]));//传入input path
  62. FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));//传入output path,输出路径应该为空,否则报错org.apache.hadoop.mapred.FileAlreadyExistsException。
  63. System.exit(job.waitForCompletion(true)?0:1);//是否正常退出
  64. }
  65. }

先解释两个Java基础问题

----------------------------------StringTokener类--------------------------------------------------------------

Java语言中,提供了专门用来分析字符串的类StringTokenizer(位于java.util包中)。该类可以将字符串分解为独立使用的单词,并称之为语言符号。语言符号之间由定界符(delim)或者是空格、制表符、换行符等典型的空白字符来分隔。其他的字符也同样可以设定为定界符。StringTokenizer类的构造方法及描述见表15-6所示。

表15-6                                          StringTokenizer类的构造方法及描述

构 造 方 法

描    述

StringTokenizer(String str)

为字符串str构造一个字符串分析器。使用默认的定界符,即空格符(如果有多个连续的空格符,则看作是一个)、换行符、回车符、Tab符号等

StringTokenizer(String str, String delim)

为字符串str构造一个字符串分析器,并使用字符串delim作为定界符

StringTokenizer类的主要方法及功能见表15-7所示。

表15-7                                          StringTokenizer类的主要方法及功能

方    法

功    能

String nextToken()

用于逐个获取字符串中的语言符号(单词)

boolean hasMoreTokens()

用于判断所要分析的字符串中,是否还有语言符号,如果有则返回true,反之返回false

int countTokens()

用于得到所要分析的字符串中,一共含有多少个语言符号

下面是一个例子。

String s1 = "|ln|ln/sy|ln/dl|ln/as|ln/bx|";
StringTokenizer stringtokenizer1 = new StringTokenizer(s1, "|");

while(stringtokenizer1 .hasMoreTokens()) {

String s3 = stringtokenizer.nextToken();
 System.out.println(s3);
}

输出:
ln
ln/sy
ln/dl
ln/as
ln/bx

-------------------------------------------Java 静态内部类 内部类-----------------------------------------------

请参考文章:http://blog.csdn.net/yakihappy/article/details/3979858

-------------------------------------------Java的反射机制--------------------------------------------------------

请参考文章:http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html

请参考文章:http://lavasoft.blog.51cto.com/62575/15433/

请参考文章: http://lavasoft.blog.51cto.com/62575/43218/

----------------------------------------WordCount MapReduce代码分析-------------------------------------

代码分为三部分,一个主函数,一个嵌套类WordCountMapper继承Mapper,一个嵌套类WordCountReducer继承Reducer。

主函数通过反射设置Job属性,设置输入输出路径.。

WordCountMapper:

一个常量IntWritable做valueout,一个Text做keyout.

重写map方法,用StringTokener解析字符串,写入context

WordCountReducer:

一个Intwritable变量,记录输出个数。

reduce函数解析values计算数量,设置context的keyout,valueout。

ok,就是这么easy。。。

注意map和reduce都是回调函数,是由MapReduce框架控制的,还未深入研究。

Hadoop--mapreduce编程实例1的更多相关文章

  1. hadoop2.2编程:使用MapReduce编程实例(转)

    原文链接:http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.html 从网上搜到的一篇hadoop的编程实例,对于初学者真是帮助太大 ...

  2. MapReduce编程实例6

    前提准备: 1.hadoop安装运行正常.Hadoop安装配置请参考:Ubuntu下 Hadoop 1.2.1 配置安装 2.集成开发环境正常.集成开发环境配置请参考 :Ubuntu 搭建Hadoop ...

  3. MapReduce编程实例5

    前提准备: 1.hadoop安装运行正常.Hadoop安装配置请参考:Ubuntu下 Hadoop 1.2.1 配置安装 2.集成开发环境正常.集成开发环境配置请参考 :Ubuntu 搭建Hadoop ...

  4. MapReduce编程实例4

    MapReduce编程实例: MapReduce编程实例(一),详细介绍在集成环境中运行第一个MapReduce程序 WordCount及代码分析 MapReduce编程实例(二),计算学生平均成绩 ...

  5. MapReduce编程实例3

    MapReduce编程实例: MapReduce编程实例(一),详细介绍在集成环境中运行第一个MapReduce程序 WordCount及代码分析 MapReduce编程实例(二),计算学生平均成绩 ...

  6. MapReduce编程实例2

    MapReduce编程实例: MapReduce编程实例(一),详细介绍在集成环境中运行第一个MapReduce程序 WordCount及代码分析 MapReduce编程实例(二),计算学生平均成绩 ...

  7. Hadoop MapReduce编程 API入门系列之挖掘气象数据版本2(十)

    下面,是版本1. Hadoop MapReduce编程 API入门系列之挖掘气象数据版本1(一) 这篇博文,包括了,实际生产开发非常重要的,单元测试和调试代码.这里不多赘述,直接送上代码. MRUni ...

  8. 三、MapReduce编程实例

    前文 一.CentOS7 hadoop3.3.1安装(单机分布式.伪分布式.分布式 二.JAVA API实现HDFS MapReduce编程实例 @ 目录 前文 MapReduce编程实例 前言 注意 ...

  9. Hadoop MapReduce编程 API入门系列之压缩和计数器(三十)

    不多说,直接上代码. Hadoop MapReduce编程 API入门系列之小文件合并(二十九) 生成的结果,作为输入源. 代码 package zhouls.bigdata.myMapReduce. ...

  10. Hadoop MapReduce编程 API入门系列之挖掘气象数据版本3(九)

    不多说,直接上干货! 下面,是版本1. Hadoop MapReduce编程 API入门系列之挖掘气象数据版本1(一) 下面是版本2. Hadoop MapReduce编程 API入门系列之挖掘气象数 ...

随机推荐

  1. java中int取值范围是怎么计算的?

    首先jdk中定义int占4个字节 ===> 32位(后面全部的计算都是以此为根据的) 32位就是jvm仅仅给分配32个格子的空间,用以存放数据. 总所周知计算机中用0和1存放数据. 那么,32个 ...

  2. 为TextView设置两种状态,程序中可以动态切换

    经常会需要用文字的两种状态来表示当前系统的某两种状态.比如:         这里的第一个TextView和后两个TextView就表示了两种状态.我们可以在程序的动态的切换状态(而不是直接修改颜色) ...

  3. 在 Android Studio 2.2 中愉快地使用 C/C++

    转载请注明出处:http://blog.csdn.net/wl9739/article/details/52607010 注:官网上面的技术文章也在不断地汉化中,只是进度有点慢.在我翻译本篇文章的时候 ...

  4. C#动态调用webservice方法

    摘 自: http://www.hao5191.cn/a/chengxukaifa/c_/20130109/115819.html using System; using System.Collect ...

  5. 分享一个基于ligerui的系统应用案例ligerRM V2(权限管理系统)(提供下载)

    阅读目录 简介 系统特色 系统介绍 - 首页 系统介绍 - 列表页 系统介绍 - 明细页(表单) 系统介绍 - 菜单/按钮 系统介绍 - 权限中心 系统介绍 - 数据权限 系统介绍 - 字段权限 系统 ...

  6. IOS APP 上传到AppStore

    由于第一次接触要把 app 上传到 AppStore 比较棘手,很多地方不懂,研究了 大半天 终于给上传成功了,现在坐等审核吧,首先把上传到AppStore的流程 整理下 : 第一 :准备证书 (要确 ...

  7. weblogic8.1 登陆5 ip 限制

    weblogic8.1  5 ip 限制 报错信息如图所示: 解决办法:此weblogic 未破解,去网上下载破解包,然后放到 copy weblogic_sp.jar to $WL_HOME/ser ...

  8. java中Token验证

    什么是Token:它是一个令牌,随机不可预测的. 为什么需要使用Token: 1,防止表单的重复提交 2:,防止跨站点的请求伪造 Token的使用流程是:首先在服务器端生成一个随机的token值并在服 ...

  9. zookeeper单节点安装

    1.安装jdk 2.安装解压zookeeper 先创建文件夹 解压zookeeper压缩包 3.  创建配置文件zoo.cfg 4.运行测试

  10. RxJava2.0教程

    尝试在新的项目中,引用一些流行的优秀的开源框架,在简书上偶然发现一篇很棒的写RxJava 2.0的帖子,个人认为非常适合Android开发者,你可以先知道怎么使用,然后再弄清楚里面做了哪些事情,例如可 ...