mapreduce实例教程

首先准备好你的文件比如111.txt

在Eclipse上创建一个Map/Reduce项目

将为了方便将hadoop中所有的jar包都复制到一个你自己创建的文件夹里,然后把这个文件夹设置为本项目依赖的jar包集lib;

Mapreduce代码的实现

hadoop的API提供了Mapper和Reducer的抽象类,只要继承这两个类就可以实现这两种函数;

在工程下创建一个WordMapper类,该类继承于Mapper<Object,Text,Text,IntWritable>抽象类,并实现map方法public void map(Object key,Text value,Context context) throws IOexception;

map方法中有三个参数

Object key:每行文件的偏移量;

Text vlaue:每行文件的内容;

Context context: map端的上下文(上下文,则是一种联系,对应,引用集合的关系)

Reducer

在工程中创建WordReducer类继承于Reducer<Text,IntWritable,Text,IntWritable>抽象类,并实现ruduce方法public void reduce(Text key,Iterable<IntWritable> values,Context context) throws IOException;

reduce方法有三个参数

Text key: Map端输出的key值;

Iterable<IntWritable> values: Map端输出的Value集合(相同的key集合)

Context context :Reduce端的上下文,和OutputCollector和Reporter的功能类似;

然后编写WordMain类

创建Configuration对象,Job对象,configuration对象是用来读取hadoop配置,比如文件系统,备份块数量等等;job是用来构造任务细节,具体mapreudce的函数实现的指定类的指定,连接各种应用;job构造函数有两个参数,一个是Configruation,另一个是job的名称;

然后将这个项目打包成jar包,不包括classpath和project,;

选择第一个复选框,还有指定打包到的位置,then finish;注意所生成的jar包要放在$HADOOP_HOME下,否则打开会报错

然后输入命令行hadop jar WordCount.jar  项目名.主类名  <输入文件的HDFS路径>   <输出的HDFS路径>

hadoop fs -text <路径> 查看结果

hadoop fs -put  /home/hadoop/文档/data/111.txt  /user/hadoop/input/   将/home/hadoop/文档/data/111.txt(本地文件系统)的文件传到(hdfs文件系统)/user/hadoop/input/ ;

//WordCount mapreduce implementation
package one;
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.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
public class WordMain {

	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		Configuration conf =new Configuration();
		String [] otherArgs=new GenericOptionsParser(conf,args).getRemainingArgs();
		if(otherArgs.length!=2)
		{
			System.err.println("Usage:wordcount ");
			System.exit(2);
		}
		Job job=new Job(conf,"word count");
		job.setJarByClass(WordMain.class);
		job.setMapperClass(WordMapper.class);
		job.setReducerClass(WordReducer.class);
		job.setCombinerClass(WordReducer.class);
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(IntWritable.class);
		FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
		FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
		System.exit(job.waitForCompletion(true)? 0 : 1);//等待完成
	}

}
package one;
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
public class WordMapper extends Mapper;

Mapper类中的map函数时针对数据的每一行来运行一遍,key为数据的偏移量,vlalue时每行的数据;(输入)

reduce也是针对每一个key,list来每个key运行一遍,并且该类的接口中输入的value类型为xxx,则reduce函数的输入value则为Iteralbe<xxx>;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值