折腾了半天。终于编写成功了第一个自己的mapreduce程序,并通过打jar包的方式运行起来了。

运行环境:

windows 64bit

eclipse 64bit

jdk6.0 64bit

一、工程准备

1、新建java project

2、导入jar包

新建一个user library 把hadoop文件夹里的hadoop-core和lib包里的所有包都导入进来,以免出错。

二、编码

1、主要是计算单词的小程序,测试用

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

2、注意问题

有些jar包没导入会出现问题

三、生成jar包

1、eclipse自带功能export jar包

四、运行

1、ssh client工具导入至linux

2、hadoop运行,转到hadoop的bin目录下,执行下面指令:

  1. ./hadoop jar test.jar /README.txt /usr/dat/output

3、注意问题

output目录必须是之前不存在的路径。

mapreduce程序编写(WordCount)的更多相关文章

  1. 运行第一个MapReduce程序,WordCount

    1.安装Eclipse 安装后如果无法启动重新配置Java路径(如果之前配置了Java) 2.下载安装eclipse的hadoop插件 注意版本对应,放到/uer/lib/eclipse/plugin ...

  2. Hadoop学习之路(5)Mapreduce程序完成wordcount

    程序使用的测试文本数据: Dear River Dear River Bear Spark Car Dear Car Bear Car Dear Car River Car Spark Spark D ...

  3. MapReduce 程序:WordCount

  4. 一起学Hadoop——使用IDEA编写第一个MapReduce程序(Java和Python)

    上一篇我们学习了MapReduce的原理,今天我们使用代码来加深对MapReduce原理的理解. wordcount是Hadoop入门的经典例子,我们也不能免俗,也使用这个例子作为学习Hadoop的第 ...

  5. 大数据之路week07--day03(Hadoop深入理解,JAVA代码编写WordCount程序,以及扩展升级)

    什么是MapReduce 你想数出一摞牌中有多少张黑桃.直观方式是一张一张检查并且数出有多少张是黑桃. MapReduce方法则是: 1.给在座的所有玩家中分配这摞牌 2.让每个玩家数自己手中的牌有几 ...

  6. 编写简单的Mapreduce程序并部署在Hadoop2.2.0上运行

    今天主要来说说怎么在Hadoop2.2.0分布式上面运行写好的 Mapreduce 程序. 可以在eclipse写好程序,export或用fatjar打包成jar文件. 先给出这个程序所依赖的Mave ...

  7. 用PHP编写Hadoop的MapReduce程序

    用PHP编写Hadoop的MapReduce程序     Hadoop流 虽然Hadoop是用Java写的,但是Hadoop提供了Hadoop流,Hadoop流提供一个API, 允许用户使用任何语言编 ...

  8. 如何在maven项目里面编写mapreduce程序以及一个maven项目里面管理多个mapreduce程序

    我们平时创建普通的mapreduce项目,在遍代码当你需要导包使用一些工具类的时候, 你需要自己找到对应的架包,再导进项目里面其实这样做非常不方便,我建议我们还是用maven项目来得方便多了 话不多说 ...

  9. MapReduce程序(一)——wordCount

    写在前面:WordCount的功能是统计输入文件中每个单词出现的次数.基本解决思路就是将文本内容切分成单词,将其中相同的单词聚集在一起,统计其数量作为该单词的出现次数输出. 1.MapReduce之w ...

随机推荐

  1. 查看linux系统版本命令

    一.查看内核版本命令: 1) [root@SOR_SYS ~]# cat /proc/version Linux version 2.6.18-238.el5 (mockbuild@x86-012.b ...

  2. 分享:Perl打开与读取文件的方法

    在Perl中可以用open或者sysopen函数来打开文件进行操作,这两个函数都需要通过一个文件句柄(即文件指针)来对文件进行读写定位等操作. Perl打开与读取文件的方法,供大家学习参考.本文转自: ...

  3. java 语法糖

    package syntax.autoCase; import java.util.Arrays; import java.util.List; public class autoCase { pub ...

  4. js读取json数据(php传值给js)

    <?php $array =array('fds','fdsa','fdsafasd');  // json_encode($array); ?> <html> <hea ...

  5. js IDE WebStorm 注册码

    webStorm : UserName:William ===== LICENSE BEGIN ===== 45550-12042010 00001SzFN0n1bPII7FnAxnt0DDOPJA  ...

  6. Intel格式和AT&T格式汇编区别

    一.AT&T 格式Linux 汇编语法格式 在 AT&T 汇编格式中,寄存器名要加上 '%' 作为前缀:而在 Intel 汇编格式中,寄存器名不需要加前缀.例如: AT&T 格 ...

  7. Oracle重建表索引及手工收集统计信息

    Oracle重建所有表的索引的sql: SELECT 'alter index ' || INDEX_NAME || ' rebuild online nologging;' FROM USER_IN ...

  8. verilog逻辑复制

    本文转自:http://www.cnblogs.com/linjie-swust/archive/2012/03/27/FPGA_verilog.html 在FPGA设计中经常使用到逻辑复制,逻辑复制 ...

  9. iOS 进阶 第七天(0403)

    0403 QQ列表展开收起的原理 更改 numbersOfRowsInSection 的返回的数目,为0则收起group,不为零则为展开.先修改模型数据 刷新对应的表格 代码如下: 这个地方会出现一个 ...

  10. iTween基础之Audio(音量和音调的变化)

    一.基础介绍:二.基础属性 原文地址 : http://blog.csdn.net/dingkun520wy/article/details/50826033 一.基础介绍 AudioTo:改变声音的 ...