在hadoop上进行编写mapreduce程序,统计关键词在text出现次数

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);

	}
}
时间: 2024-10-14 05:37:38

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

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

hive介绍 什么是hive? hive:由Facebook开源用于解决海量结构化日志的数据统计 hive是基于hadoop的一个数据仓库工具,可以将结构化的数据映射为数据库的一张表,并提供类SQL查询功能.本质就是将HQL(hive sql)转化为MapReduce程序 我们使用MapReduce开发会很麻烦,但是程序员很熟悉sql,于是hive就出现了,可以让我们像写sql一样来编写MapReduce程序,会自动将我们写的sql进行转化.但底层使用的肯定还是MapReduce. hive处理

MapReduce实例:编写MapReduce程序,统计每个买家收藏商品数量

现有某电商网站用户对商品的收藏数据,记录了用户收藏的商品id以及收藏日期,名为buyer_favorite1. buyer_favorite1包含:买家id,商品id,收藏日期这三个字段,数据以“\t”分割,样本数据及格式如下: 买家id   商品id    收藏日期 10181   1000481   2010-04-04 16:54:31 20001   1001597   2010-04-07 15:07:52 20001   1001560   2010-04-07 15:08:27 2

Hadoop学习---第三篇Hadoop的第一个Mapreduce程序

Mapreducer程序写了好几个了,但是之前一直都没有仔细的测试过本地运行和集群上运行的区别,今天写了一个Mapreduce程序,在此记录下来. 本地运行注意事项有以下几点: 1.本地必须配置好Hadoop的开发环境 2.在src里不加入配置文件运行,或者如果本地的src里有mapred-site.xml和yarn-site.xml配置文件,那么mapreduce.framework.name=local以及yarn.resourcemanager.hostname=local 测试说明:sr

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

我们平时创建普通的mapreduce项目,在遍代码当你需要导包使用一些工具类的时候, 你需要自己找到对应的架包,再导进项目里面其实这样做非常不方便,我建议我们还是用maven项目来得方便多了 话不多说了,我们就开始吧 首先你在eclipse里把你本地安装的maven导进来 选择你本地安装的maven路径 勾选中你添加进来的maven 把本地安装的maven的setting文件添加进来 接下来创建一个maven项目 可以看到一个maven项目创建成功!! 现在我们来配置pom.xml文件,把map

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

我们使用之前搭建好的Hadoop环境,可参见: <[Hadoop环境搭建]Centos6.8搭建hadoop伪分布模式>http://www.cnblogs.com/ssslinppp/p/5923793.html 示例程序为<Hadoop权威指南3>中的获取最高温度的示例程序: 数据准备 输入数据为:sample.txt 0067011990999991950051507004+68750+023550FM-12+038299999V0203301N00671220001CN99

Hadoop 调试第一个mapreduce程序过程详细记录总结

     开发环境搭建参考    <Hadoop 在Windows7操作系统下使用Eclipse来搭建hadoop开发环境>:http://blog.itpub.net/26230597/viewspace-1370205/ 1,程序代码如下: ? package wc; import java.io.IOException;import java.util.StringTokenizer;import org.apache.hadoop.conf.Configuration;import o

编写mapreduce程序实例——数据去重

每一行为一个日期及一个人名字,分为3个文件,其中存在多行重复数据,需要进行去重. 输入文件: file1: 2006-6-9 a 2006-6-11 b 2006-6-21 c 2006-6-10 a 2006-6-11 b 2006-6-30 e 2006-6-9 a 2006-6-26 d file2: 2006-6-9 a 2006-6-11 b 2006-6-9 a 2006-6-21 c 2006-6-11 b 2006-6-9 a 2006-6-30 e file3: 2006-6-

Hadoop通过HCatalog编写Mapreduce任务

1.dirver package com.kangaroo.hadoop.drive; import java.util.Map; import java.util.Properties; import com.kangaroo.hadoop.mapper.AggregateMapper; import com.kangaroo.hadoop.reducer.AggregateReducer; import org.apache.hadoop.conf.Configured; import or

两张数据表,表一学生编号姓名;表二生编号、考试科目、考试成绩;编写mapreduce程序,汇总两张表数据为一张统一表格

1 package com.liuhuan; 2 3 import org.apache.hadoop.io.WritableComparable; 4 5 import java.io.DataInput; 6 import java.io.DataOutput; 7 import java.io.IOException; 8 9 public class Student implements WritableComparable<Student> { 10 11 private Strin