mapreduce的处理过程分为2个阶段,map阶段,和reduce阶段。在要求统计指定文件里的全部单词的出现次数时。

map阶段把每一个关键词写到一行上以逗号进行分隔。并初始化数量为1(同样的单词hadoop中的map会自己主动放到一行中)

reduce阶段是把每一个单词出现的频率统计出来又一次写回去。

如代码:

package com.clq.hadoop2;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper; public class MyMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
final Text key2 = new Text();
// value2 表示单词在该行中的出现次数
final IntWritable value2 = new IntWritable(1);
// key 表示文本行的起始位置
// value 表示文本行
protected void map(LongWritable key, Text value, Context context)
throws java.io.IOException, InterruptedException {
final String[] splited = value.toString().split(",");
for (String word : splited) {
key2.set(word);
// 把key2、value2写入到context中
context.write(key2, value2);
}
}
}
package com.clq.hadoop2;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer; public class MyReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
// value3表示单词出现的总次数
final IntWritable value3 = new IntWritable(0);
/**
* key 表示单词 values 表示map方法输出的1的集合 context 上下文对象
*/
protected void reduce(Text key, java.lang.Iterable<IntWritable> values,
Context context) throws java.io.IOException, InterruptedException {
int sum = 0;
for (IntWritable count : values) {
sum += count.get();
}
// 运行到这里,sum表示该单词出现的总次数
// key3表示单词,是最后输出的key
final Text key3 = key;
// value3表示单词出现的总次数,是最后输出的value
value3.set(sum);
context.write(key3, value3);
}
}
package com.clq.hadoop2;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.lib.HashPartitioner;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat; public class MapperReducer { public static void main(String[] args) throws IOException,
InterruptedException, ClassNotFoundException {
//指定输入和输出路径
final String INPUT_PATH = "hdfs://ubuntu:9000/Input";
final String OUTPUT_PATH = "hdfs://ubuntu:9000/output";
//创建一个job对象封装执行时所须要的信息
final Job job = new Job(new Configuration(),"MapperReducer");
//打成jar执行
job.setJarByClass(MapperReducer.class);
FileInputFormat.setInputPaths(job, INPUT_PATH);
FileOutputFormat.setOutputPath(job, new Path(OUTPUT_PATH));
//指定自己自定义的mapper类
job.setMapperClass(MyMapper.class);
//指定执行mapper类型
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);
//指定自定义的reducer类
job.setReducerClass(MyReducer.class);
//指定reducer的key和value类型
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
job.waitForCompletion(true); }
}

在hadoop上进行编写mapreduce程序,统计关键词在text出现次数的更多相关文章

  1. hive--构建于hadoop之上、让你像写SQL一样编写MapReduce程序

    hive介绍 什么是hive? hive:由Facebook开源用于解决海量结构化日志的数据统计 hive是基于hadoop的一个数据仓库工具,可以将结构化的数据映射为数据库的一张表,并提供类SQL查 ...

  2. Eclipse下使用Hadoop单机模式调试MapReduce程序

    在单机模式下Hadoop不会使用HDFS,也不会开启任何Hadoop守护进程,所有程序将在一个JVM上运行并且最多只允许拥有一个reducer 在Eclipse中新创建一个hadoop-test的Ja ...

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

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

  4. 高可用Hadoop平台-运行MapReduce程序

    1.概述 最近有同学反应,如何在配置了HA的Hadoop平台运行MapReduce程序呢?对于刚步入Hadoop行业的同学,这个疑问却是会存在,其实仔细想想,如果你之前的语言功底不错的,应该会想到自动 ...

  5. 攻城狮在路上(陆)-- 配置hadoop本地windows运行MapReduce程序环境

    本文的目的是实现在windows环境下实现模拟运行Map/Reduce程序.最终实现效果:MapReduce程序不会被提交到实际集群,但是运算结果会写入到集群的HDFS系统中. 一.环境说明:     ...

  6. 编写第一个MapReduce程序—— 统计气温

    摘要:hadoop安装完成后,像学习其他语言一样,要开始写一个“hello world!” ,看了一些学习资料,模仿写了个程序.对于一个C#程序员来说,写个java程序,并调用hadoop的包,并跑在 ...

  7. Hadoop 中文编码相关问题 -- mapreduce程序处理GBK编码数据并输出GBK编码数据(转)

    hadoop的hdfs文件系统中,默认的是utf-8, 故你上传的文件是要设置成utf-8.当输入的是gbk,有该如何? 输入是GBK文件, 输出也是 GBK 文件的示例代码: Hadoop处理GBK ...

  8. 【Hadoop测试程序】编写MapReduce测试Hadoop环境

    我们使用之前搭建好的Hadoop环境,可参见: <[Hadoop环境搭建]Centos6.8搭建hadoop伪分布模式>http://www.cnblogs.com/ssslinppp/p ...

  9. Hadoop通过HCatalog编写Mapreduce任务访问hive库中schema数据

    1.dirver package com.kangaroo.hadoop.drive; import java.util.Map; import java.util.Properties; impor ...

随机推荐

  1. gdb 调试c/c++的一些小技巧

    ptype obj/class/struct 查看obj/class/struct的成员,但是会把基类指针指向的派生类识别为基类   set print object on 这个选项可以看到派生对象的 ...

  2. Android:DES加密

    private static final String KEY = "xxxxxx"; // KEY的字节长度必须超过24 public DESUtil(){ super(); } ...

  3. misc_register、 register_chrdev 的区别总结

    参考: http://longer.spaces.eepw.com.cn/articles/article/item/60415 http://imganquan.org/blog/?p=350 网上 ...

  4. C#中如何生成矢量图

    主要的功能就是使用C#画矢量图,然后导出到Word.Excel.Powerpoint中,并且能够再次被编辑.以下是解决过程: 首先应该确定在Office文档中可编辑图形使用的格式:学习了相关资料,了解 ...

  5. 【PythonChallenge】Level 5

    题目主要找发声类似于Peak Hell的Python模块,查了一下手册pickle已经是最像的了.看了一下源代码,发现panner.p.如同发现了新大陆,拷贝内容.使用pickle解答.答案为chan ...

  6. tlplayer,wzplayer支持wince,winphone,windows8 for arm

    tlplayer,wzplayer宣布支持wince,winphone,windows8 for arm,支持http,hls,rtmp,rtsp,mms等媒体流协议. 支持加密视频播放. 目前tlp ...

  7. 应付配置文件 Profile

    (N) System Administrator > Profile > System Profile Option Name Site Application Responsibilit ...

  8. Linux Kernel 整数溢出漏洞

    漏洞名称: Linux Kernel 整数溢出漏洞 CNNVD编号: CNNVD-201311-062 发布时间: 2013-11-07 更新时间: 2013-11-07 危害等级:    漏洞类型: ...

  9. Win32下 Qt与Lua交互使用(四):在Lua脚本中自由执行Qt类中的函数

    话接上篇.通过前几篇博客,我们实现在Lua脚本中执行Qt类中函数的方法,以及在Lua脚本中连接Qt对象的信号与槽. 但是,我们也能发现,如果希望在Lua脚本中执行Qt类的函数,就必须绑定一个真正实现功 ...

  10. nginx的优缺点

    1.nginx相对于apache优点: 轻量级同样起web 服务比apache占用更少内存及资源 抗并发nginx 处理请求异步非阻塞而apache 则阻塞型高并发下nginx 能保持低资源低消耗高性 ...