预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

MapReduce是包含两个过程:Map过程和Reduce过程。每一个过程都包含键值对作为输入,程序员可以选择键和值的类型。 Map和Reduce的数据流是这样的: Input==>Map==>MapperOutput==>Sortandshuffle==>Reduce==>FinalOutput 使用Java编写HadoopMapReduce代码 MapReduce程序需要三个元素:Map,Reduce和运行任务的代码(在这里,我们把它叫做Invoker)。 1)创建Map(可以是任何名字)类和map函数 map函数是在org.apache.hadoop.mapreduce.Mapper.class类中,以抽象方法定义的。 01importorg.apache.hadoop.io.IntWritable;02importorg.apache.hadoop.io.LongWritable; 03importorg.apache.hadoop.io.Text;04importorg.apache.hadoop.mapreduce.Mapper; 0506importjava.io.IOException; 0708publicclassMapextendsMapper<LongWritable,Text,Text,IntWritable>{ 09privatefinalstaticIntWritableone=newIntWritable(1);10privateTextword=newText(); 11publicvoidmap(LongWritablekey,Textvalue,Contextcontext)throwsIOException,InterruptedException{12word.set(value.toString()); 13context.write(word,one);14} 15}解释: Mapper类是一个泛型类,带有4个参数(输入的键,输入的值,输出的键,输出的值)。在这里输入的键为LongWritable(hadoop中的Long类型),输入的值为Text(hadoop中的String类型),输出的键为Text(关键字)和输出的值为Intwritable(hadoop中的int类型)。以上所有hadoop数据类型和java的数据类型都很相像,除了它们是针对网络序列化而做的特殊优化。 2)创建Reducer(任何名字)类和reduce函数 reduce函数org.apache.hadoop.mapreduce.Reducer.class类中,以抽象方法定义的。 01importorg.apache.hadoop.io.IntWritable;02importorg.apache.hadoop.io.Text; 03importorg.apache.hadoop.mapreduce.Reducer;04 05importjava.io.IOException;06importjava.util.Iterator; 0708publicclassReduceextendsReducer<Text,IntWritable,Text,IntWritable>{ 09@Override10protectedvoidreduce(Textkey,Iterablevalues,Contextcontext)throwsIOException,InterruptedException{ 11intsum=0;12for(IntWritableintWritable:values){ 13sum+=intWritable.get();14} 15context.write(key,newIntWritable(sum));16} 17}解释: Reducer类是一个泛型类,带有4个参数(输入的键,输入的值,输出的键,输出的值)。在这里输入的键和输入的值必须跟Mapper的输出的类型相匹配,输出的键是Text(关键字),输出的值是Intwritable(出现的次数) 3)我们已经准备号了Map和Reduce的实现类 现在我们需要invoker来配置Hadoop任务,调用MapReduce程序。 01importorg.apache.hadoop.conf.Configuration;02importorg.apache.hadoop.fs.Path; 03importorg.apache.hadoop.io.Text;04importorg.apache.hadoop.mapreduce.Job; 05importorg.apache.hadoop.mapreduce.lib.input.FileInputF