Chapter7-厦门大学-林子雨-大数据技术原理与应用-第七章-MapReduce(2016年3月30日版本)PPT文档格式.ppt
《Chapter7-厦门大学-林子雨-大数据技术原理与应用-第七章-MapReduce(2016年3月30日版本)PPT文档格式.ppt》由会员分享,可在线阅读,更多相关《Chapter7-厦门大学-林子雨-大数据技术原理与应用-第七章-MapReduce(2016年3月30日版本)PPT文档格式.ppt(46页珍藏版)》请在冰豆网上搜索。
/概述概述7.2MapReduce体系结构体系结构7.3MapReduce工作流程工作流程7.4实例分析:
实例分析:
WordCount7.5MapReduce的具体应用的具体应用7.6MapReduce编程实践编程实践欢迎访问大数据技术原理与应用教材官方网站:
/WordCount程序任务程序WordCount输入一个包含大量单词的文本文件输出文件中每个单词及其出现次数(频数),并按照单词字母顺序排序,每个单词和其频数占一行,单词和频数之间有间隔表7-3一个WordCount的输入和输出实例输入输出HelloWorldHelloHadoopHelloMapReduceHadoop1Hello3MapReduce1World1大数据技术原理与应用厦门大学计算机科学系林子雨7.4.2WordCount设计思路首先,需要检查WordCount程序任务是否可以采用MapReduce来实现其次,确定MapReduce程序的设计思路最后,确定MapReduce程序的执行过程大数据技术原理与应用厦门大学计算机科学系林子雨7.4.3一个WordCount执行过程的实例图7-7Map过程示意图大数据技术原理与应用厦门大学计算机科学系林子雨7.4.3一个WordCount执行过程的实例图7-8用户没有定义Combiner时的Reduce过程示意图大数据技术原理与应用厦门大学计算机科学系林子雨7.4.3一个WordCount执行过程的实例图7-9用户有定义Combiner时的Reduce过程示意图大数据技术原理与应用厦门大学计算机科学系林子雨7.5MapReduce的具体应用MapReduce可以很好地应用于各种计算问题关系代数运算(选择、投影、并、交、差、连接)分组与聚合运算矩阵-向量乘法矩阵乘法大数据技术原理与应用厦门大学计算机科学系林子雨7.5MapReduce的具体应用假设有关系R(A,B)和S(B,C),对二者进行自然连接操作使用Map过程,把来自R的每个元组转换成一个键值对b,,其中的键就是属性B的值。
把关系R包含到值中,这样做使得我们可以在Reduce阶段,只把那些来自R的元组和来自S的元组进行匹配。
类似地,使用Map过程,把来自S的每个元组,转换成一个键值对b,所有具有相同B值的元组被发送到同一个Reduce进程中,Reduce进程的任务是,把来自关系R和S的、具有相同属性B值的元组进行合并Reduce进程的输出则是连接后的元组,输出被写到一个单独的输出文件中用用MapReduce实现关系的自然连接实现关系的自然连接大数据技术原理与应用厦门大学计算机科学系林子雨7.5MapReduce的具体应用用用MapReduce实现关系的自然连接实现关系的自然连接大数据技术原理与应用厦门大学计算机科学系林子雨7.6MapReduce编程实践7.6.1任务要求7.6.2编写Map处理逻辑7.6.3编写Reduce处理逻辑7.6.4编写main方法7.6.5编译打包代码以及运行程序7.6.6Hadoop中执行MapReduce任务的几种方式详细编程实践指南请参考厦门大学数据库实验室出品教程大数据原理与应用大数据原理与应用第七章第七章MapReduce学习指南学习指南在“大数据课程学生服务站”中的第七章学习指南链接地址http:
/ismymotherlandIloveChina文件文件B的内容如下:
的内容如下:
IamfromChina期望结果期望结果如如右侧所示右侧所示:
I2is1China3my1love1am1from1motherland1大数据技术原理与应用厦门大学计算机科学系林子雨7.6.2编写Map处理逻辑Map输入类型为期望的Map输出类型为Map输入类型最终确定为Map输出类型最终确定为publicstaticclassMyMapperextendsMapperprivatefinalstaticIntWritableone=newIntWritable
(1);
privateTextword=newText();
publicvoidmap(Objectkey,Textvalue,Contextcontext)throwsIOException,InterruptedExceptionStringTokenizeritr=newStringTokenizer(value.toString();
while(itr.hasMoreTokens()word.set(itr.nextToken();
context.write(word,one);
大数据技术原理与应用厦门大学计算机科学系林子雨7.6.3编写编写Reduce处理逻辑处理逻辑在Reduce处理数据之前,Map的结果首先通过Shuffle阶段进行整理Reduce阶段的任务:
对输入数字序列进行求和Reduce的输入数据为Reduce任务的输入数据:
”I”,”China”,大数据技术原理与应用厦门大学计算机科学系林子雨publicstaticclassMyReducerextendsReducerprivateIntWritableresult=newIntWritable();
publicvoidreduce(Textkey,Iterablevalues,Contextcontext)throwsIOException,InterruptedExceptionintsum=0;
for(IntWritableval:
values)sum+=val.get();
result.set(sum);
context.write(key,result);
7.6.3编写编写Reduce处理逻辑处理逻辑大数据技术原理与应用厦门大学计算机科学系林子雨7.6.4编写main方法publicstaticvoidmain(Stringargs)throwsExceptionConfigurationconf=newConfiguration();
/程序运行时参数StringotherArgs=newGenericOptionsParser(conf,args).getRemainingArgs();
if(otherArgs.length!
=2)System.err.println(Usage:
wordcount);
System.exit
(2);
Jobjob=newJob(conf,wordcount);
/设置环境参数job.setJarByClass(WordCount.class);
/设置整个程序的类名job.setMapperClass(MyMapper.class);
/添加MyMapper类job.setReducerClass(MyReducer.class);
/添加MyReducer类job.setOutputKeyClass(Text.class);
/设置输出类型job.setOutputValueClass(IntWritable.class);
/设置输出类型FileInputFormat.addInputPath(job,newPath(otherArgs0);
/设置输入文件FileOutputFormat.setOutputPath(job,newPath(otherArgs1);
/设置输出文件System.exit(job.waitForCompletion(true)?
0:
1);
大数据技术原理与应用厦门大学计算机科学系林子雨importjava.io.IOException;
importjava.util.StringTokenizer;
importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.fs.Path;
importorg.apache.hadoop.io.IntWritable;
importorg.apache.hadoop.io.Text;
importorg.apache.hadoop.mapreduce.Job;
importorg.apache.hadoop.mapreduce.Mapper;
importorg.apache.hadoop.mapreduce.Reducer;
importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;
importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
importorg.apache.hadoop.util.GenericOptionsParser;
publicclassWordCount/WordCount类的具体代码见下一页完整代码大数据技术原理与应用厦门大学计算机科学系林子雨publicclassWordCountpublicstaticclassMyMapperextendsMapperprivatefinalstaticIntWritableone=newIntWritable
(1);
publicstaticclassMyReducerextendsReducerprivateIntWritableresult=newIntWritable();
publicstaticvoidmain(Stringargs)throwsExceptionConfigurationconf=newConfiguration();
StringotherArgs=newGenericOptionsParser(conf,args).getRemainingArgs();
job.setJarByClass(WordCount.class);
job.setMapperClass(MyMapper.class);
job.setReducerClass(MyReducer.class);
job.setOutputKeyClass(Text.class);
job