本例子统计 用空格分开的单词出现数量(  这个Main.mian 启动方式是hadoop 2.0 的写法。1.0 不一样 )

目录结构:

使用的 maven : 下面是maven 依赖。

  1. <dependency>
  2. <groupId>org.apache.hadoop</groupId>
  3. <artifactId>hadoop-client</artifactId>
  4. <version>2.8.5</version>
  5. </dependency>

Main.java:

  1. package com.zyk.test;
  2.  
  3. import java.io.IOException;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6.  
  7. import org.apache.hadoop.conf.Configuration;
  8. import org.apache.hadoop.fs.Path;
  9. import org.apache.hadoop.io.LongWritable;
  10. import org.apache.hadoop.io.Text;
  11. import org.apache.hadoop.mapreduce.Job;
  12. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  13. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  14. import org.apache.hadoop.util.GenericOptionsParser;
  15.  
  16. public class Main {
  17.  
  18. public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
  19. Configuration conf = new Configuration();
  20. GenericOptionsParser optionParser = new GenericOptionsParser(conf, args);
  21. String[] remainingArgs = optionParser.getRemainingArgs();
  22. if ((remainingArgs.length != 2) && (remainingArgs.length != 4)) {
  23. System.err.println("Usage: wordcount <in> <out> [-skip skipPatternFile]");
  24. System.exit(2);
  25. }
  26.  
  27. Job job = Job.getInstance(conf, "word count");
  28. job.setJarByClass(Main.class);
  29. job.setMapperClass(WordMap.class);
  30. // job.setCombinerClass(IntSumReducer.class);
  31. job.setReducerClass(WordReduce.class);
  32.  
  33. job.setOutputKeyClass(Text.class);
  34. job.setOutputValueClass(LongWritable.class);
  35. //FileInputFormat.addInputPath(job, new Path("/wd/in"));
  36. //FileOutputFormat.setOutputPath(job, new Path("/wd/out"));
  37.  
  38. List<String> otherArgs = new ArrayList<String>();
  39. for (int i = 0; i < remainingArgs.length; ++i) {
  40. if ("-skip".equals(remainingArgs[i])) {
  41. job.addCacheFile(new Path(remainingArgs[++i]).toUri());
  42. job.getConfiguration().setBoolean("wordcount.skip.patterns", true);
  43. } else {
  44. otherArgs.add(remainingArgs[i]);
  45. }
  46. }
  47.  
  48. FileInputFormat.addInputPath(job, new Path(otherArgs.get(0)));
  49. FileOutputFormat.setOutputPath(job, new Path(otherArgs.get(1)));
  50.  
  51. System.exit(job.waitForCompletion(true) ? 0 : 1);
  52.  
  53. }
  54.  
  55. }

  

WordMap.java

  1. package com.zyk.test;
  2.  
  3. import java.io.IOException;
  4.  
  5. import org.apache.hadoop.io.LongWritable;
  6. import org.apache.hadoop.io.Text;
  7. import org.apache.hadoop.mapreduce.Mapper;
  8.  
  9. public class WordMap extends Mapper<LongWritable, Text, Text, LongWritable> {
  10.  
  11. @Override
  12. protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, LongWritable>.Context context)throws IOException, InterruptedException {
  13. String[] words = value.toString().split(" ");
  14. for(String word : words) {
  15. context.write (new Text( word ), new LongWritable( 1 ) );
  16. }
  17. }
  18.  
  19. }

  

WordReduce.java

  1. package com.zyk.test;
  2.  
  3. import java.io.IOException;
  4. import java.util.Iterator;
  5.  
  6. import org.apache.hadoop.io.LongWritable;
  7. import org.apache.hadoop.io.Text;
  8. import org.apache.hadoop.mapreduce.Reducer;
  9.  
  10. public class WordReduce extends Reducer<Text, LongWritable, Text, LongWritable > {
  11.  
  12. @Override
  13. protected void reduce(Text key, Iterable<LongWritable> arg1,Reducer<Text, LongWritable, Text, LongWritable>.Context context) throws IOException, InterruptedException {
  14.  
  15. Iterator<LongWritable> its = arg1.iterator();
  16.  
  17. long sum = 0L;
  18. while( its.hasNext() ) {
  19. LongWritable it = its.next();
  20.  
  21. sum += it.get();
  22. }
  23.  
  24. context.write( key , new LongWritable( sum ) );
  25. }
  26.  
  27. }

  

content.txt  是 要上传到hdfs 上作为输入参数目录的 ,内容我就不提提供了。随便找个页面复制一些文本就可以。

然后打成 jar 包。 发布到hadoop 上运行。(  后面 两个参数是 指定的 输入 和输出路径  )运行前应该吧  要统计的文件复制到 hdfs 的 /wd/in 目录里面。

  1. ./hadoop jar /tools/wd.jar com.zyk.test.Main /wd/in /wd/out4

  

运行结果:

part-r-00000 打开结果:

hadoop mapreduce 简单例子的更多相关文章

  1. Hadoop RPC简单例子

    jdk中已经提供了一个RPC框架-RMI,但是该PRC框架过于重量级并且可控之处比较少,所以Hadoop RPC实现了自定义的PRC框架. 同其他RPC框架一样,Hadoop RPC分为四个部分: ( ...

  2. hadoop学习第四天-Writable和WritableComparable序列化接口的使用&&MapReduce中传递javaBean的简单例子

    一. 为什么javaBean要继承Writable和WritableComparable接口? 1. 如果一个javaBean想要作为MapReduce的key或者value,就一定要实现序列化,因为 ...

  3. Hadoop MapReduce执行过程详解(带hadoop例子)

    https://my.oschina.net/itblog/blog/275294 摘要: 本文通过一个例子,详细介绍Hadoop 的 MapReduce过程. 分析MapReduce执行过程 Map ...

  4. Hadoop MapReduce例子-新版API多表连接Join之模仿订单配货

    文章为作者原创,未经许可,禁止转载.    -Sun Yat-sen University 冯兴伟 一.    项目简介: 电子商务的发展以及电商平台的多样化,类似于京东和天猫这种拥有过亿用户的在线购 ...

  5. 简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行

    [TOC] 简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行 程序源码 import java.io.IOException; import java.util. ...

  6. 三.hadoop mapreduce之WordCount例子

    目录: 目录见文章1 这个案列完成对单词的计数,重写map,与reduce方法,完成对mapreduce的理解. Mapreduce初析 Mapreduce是一个计算框架,既然是做计算的框架,那么表现 ...

  7. hadoop —— MapReduce例子 (数据去重)

    参考:http://eric-gcm.iteye.com/blog/1807468 例子1: 概要:数据去重 描述:将file1.txt.file2.txt中的数据合并到一个文件中的同时去掉重复的内容 ...

  8. hadoop自带例子SecondarySort源码分析MapReduce原理

    这里分析MapReduce原理并没用WordCount,目前没用过hadoop也没接触过大数据,感觉,只是感觉,在项目中,如果真的用到了MapReduce那待排序的肯定会更加实用. 先贴上源码 pac ...

  9. hadoop —— MapReduce例子 (求平均值)

    参考:http://eric-gcm.iteye.com/blog/1807468 math.txt: 张三 88 李四 99 王五 66 赵六 77 china.txt: 张三 78 李四 89 王 ...

随机推荐

  1. TransactionScop事务机制的使用

    如果在C#中使用TransactionScope类(分布式事务),则须注意如下事项:1.在项目中引用using System.Transactions命名空间(先要在添加net组件的引用); 2.具体 ...

  2. shell脚本实例-脚本批量创建用户

    #!/usr/bin/bash read -p "Please input number: " num if [[ ! "$num" =~ ^[0-9]+$ | ...

  3. ios初识UITableView及简单用法二(模型数据)

    // // ViewController.m // ZQRTableViewTest // // Created by zzqqrr on 17/8/24. // Copyright (c) 2017 ...

  4. 推荐内置android控件的开源项目alcinoe

    开源地址:https://github.com/Zeus64/alcinoe 该控件包,含以下几个控件: 1.基于OpenGL实现的视频播放器 ALVideoPlayer. ALVideoPlayer ...

  5. Python 依赖关系

    class Person: def play(self, tools): # 通过参数的传递把另外一个类的对象传递进来 tools.run() print("很开心, 我能玩儿游戏了&quo ...

  6. 运行和管理Rabbit

    节点描述的是一个Erlang节点运行着一个Erlang应用程序.Erlang虚拟机的每个实例我们称之为节点.多个Erlang应用程序可以运行在同一个节点之上.节点之间可以进行本地通信.在RabbitM ...

  7. Spring Relational Database

    为了避免持久化的逻辑分散到应用的各个组件中,将数据访问功能放到一个或多个专注于此项任务的组件中,这样的组件通常称为数据访问对象(DAO)或Repository. 为了避免应用与特定的数据访问策略耦合在 ...

  8. 【转】C++类内存分布

    C++类内存分布  https://www.cnblogs.com/jerry19880126/p/3616999.html 书上类继承相关章节到这里就结束了,这里不妨说下C++内存分布结构,我们来看 ...

  9. html 调用ocx控件

    !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/x ...

  10. linux 如何使用密钥登录 (CentOs)

    说明:一般的密码方式登录容易被密码暴力破解.所以一般我们会将 SSH 的端口设置为默认22以外的端口,或者禁用root账户登录.其实可以通过密钥登录这种方式来更好地保证安全. 密钥形式登录的原理是:利 ...