![《大数据平台部署与运维》课件-MapReduce编程模型_第1页](http://file4.renrendoc.com/view2/M03/13/09/wKhkFmYxlLmAKN4cAANjiGQ4hx8841.jpg)
![《大数据平台部署与运维》课件-MapReduce编程模型_第2页](http://file4.renrendoc.com/view2/M03/13/09/wKhkFmYxlLmAKN4cAANjiGQ4hx88412.jpg)
![《大数据平台部署与运维》课件-MapReduce编程模型_第3页](http://file4.renrendoc.com/view2/M03/13/09/wKhkFmYxlLmAKN4cAANjiGQ4hx88413.jpg)
![《大数据平台部署与运维》课件-MapReduce编程模型_第4页](http://file4.renrendoc.com/view2/M03/13/09/wKhkFmYxlLmAKN4cAANjiGQ4hx88414.jpg)
![《大数据平台部署与运维》课件-MapReduce编程模型_第5页](http://file4.renrendoc.com/view2/M03/13/09/wKhkFmYxlLmAKN4cAANjiGQ4hx88415.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
大数据平台部署与运维《大数据平台部署与运维》课程组MapReduce编程模型-WordCount基本原理上节课知识回顾我们需要统计文本中每个单词出现的次数,我们看看怎么完成的?过程很显然,首先拿到文本不是立刻就送去MapReduce中处理,而是先通过一个叫做TextInputFormat的类,处理好原有文本的数据,用偏移量逐个表识。然后再传入map中处理。然而map只是对单词进行简单的编号(同时编上1),在再进入reduce类之前,先通过迭代器(图中黑色部分),把map的数据简单的处理,如上图的hadoop为例,迭代器的内容就是<hadoop,iterator(1,1)>,那么在reduce类中,我们只要统计好迭代器中的数值就好了。Map阶段首先这个WordCountMapper类要继承Mapper类,这个类后面的参数是什么呢?<LongWritable,Text,NullWritable,LongWritable>,为什么要这样写呢。实际上这四个参数分别对应<KEYIN,VALUEIN,KEYOUT,VALUEOUT>,也就是输入的key,输入的value,输出的key,输出的value。
Map阶段protected
voidmap(LongWritable
key,Textvalue,
Mapper<LongWritable,Text,
NullWritable,
LongWritable>.Contextcontext)
throws
IOException,
InterruptedException
{
//拿到一行文本内容,转换成String类型
String
valueString
=
value.toString();
//将这行文本切分成单词
String
wArr[]=
valueString.split("
");
//输出单词1
context.write(NullWritable.get(),
new
LongWritable(wArr.length));
}toString(),它的作用是返回1个反映这个对象的字符串NullWritable是Writable的一个特殊类,实现方法为空实现,不从数据流中读数据,也不写入数据,只充当占位符,如在MapReduce中,如果你不需要使用键或值,你就可以将键或值声明为NullWritable,NullWritable是一个不可变的单实例类型。Reduce阶段publicclass
WordCountReducer
extendsReducer<NullWritable,
LongWritable,
NullWritable,
LongWritable>{
@Override编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错。
protected
voidreduce(NullWritable
key,
Iterable<LongWritable>v2s,
Reducer<NullWritable,
LongWritable,
NullWritable,
LongWritable>.Context
context)throws
IOException,
InterruptedException
{
Iterator<LongWritable>it=v2s.iterator();
//定义一个计时器
long
sum=0;
//
通过value这个迭代器,遍历这一组kv中所有的value,进行累加
while(it.hasNext()){
sum
+=
it.next().get();}
context.write(NullWritable.get(),
new
LongWritable(sum));
}}词频统计统计每个单词出现的次数词频统计词频统计原理——Map阶段
输入对每一行数据进行标号
过程按空格进行分割
输出W作为key值词频统计词频统计原理——reduce阶段
代码部分—map阶段标记public
classWordCountMapperextendsMapper<LongWritable,Text,Text,
LongWritable>{
@Override---重写方法
protected
voidmap(LongWritablekey,Textvalue,
Mapper<LongWritable,
Text,Text,LongWritable>.Contextcontext)
throws
IOException,InterruptedException{
//得到每一行的数据
String
valueString=value.toString();
//调用方法,按空格进行分割,将数据分割成为字符串数组
String
wArr[]=valueString.split("");
//遍历
for(int
i=0;i<wArr.length;i++){
//map
outkey/value
context.write(new
Text(wArr[i]),newLongWritable(1));}}}代码部分—reduce阶段标记public
classWordCountReducerextendsReducer<Text,LongWritable,Text,
LongWritable>{输入的数据类型与Map方法输出的数据类型相同
@Override
protected
voidreduce(Textkey,Iterable<LongWritable>v2s,—迭代器
Reducer<Text,
LongWritable,Text,LongWritable>.Contextcontext)throws
IOException,InterruptedException{
Iterator<LongWritable>
it=v2s.iterator();
//定义
long
sum=0;
//
遍历vulues加入到sum中,将values集合中的每一个元素都进行相加,每一个元素的值为1,所以相加得的值就是key值出现得次数
while(it.hasNext()){
sum
+=it.next().get();
}//输出的key与输入的key相同,将sum作为value输出
context.write(key,
newLongWritable(sum));}}代码部分—主函数public
classTestMapReducer{
public
staticvoidmain(String[]args)throwsException{
Configuration
conf=newConfiguration();
job.setJarByClass(TestMapReducer.class);—设置作业的主类
job.setMapperClass(WordCountMapper.class);—设置作业的Mapper和Reducer类
job.setReducerClass(WordCountReducer.class);
job.setMapOutputKeyClass(Text.class);—设置mapper类的key和value的输出类型job.setMapOutputValueClass(LongWritable.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(LongWritable.class);
FileInputFormat.setInputPaths(job,
newPath(“file:///simple/source.txt”));//设置文件的输入和输出路径(HDFS)//输入和输出路径为HDFS中的路径
FileOutputFormat.setOutputPath
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 游戏化教学与小学语文教材的有机结合
- 教育心理学在家庭教育中的实践案例
- 提升学术研究质量技巧与策略
- 2025年龙岩道路货运从业资格证模拟考试
- 小学数学校园文化的建设与推广
- 二零二五年度经理合同分享与员工培训与发展合同
- 二零二五年度物业管理交接及社区安全保障合同
- 二零二五年度商业门面转让合同书(含品牌管理权)
- 2025年度自愿不上学协议书-家庭教育辅导与子女综合素质培养合同
- 二零二五年度教育机构职工劳动合同解除及教育资源分配协议
- 【人教版化学】必修1 知识点默写小纸条(答案背诵版)
- 江苏省无锡市2023-2024学年八年级上学期期末数学试题(原卷版)
- 全国第三届职业技能大赛(无人机驾驶(植保)项目)选拔赛理论考试题库(含答案)
- 对口升学语文模拟试卷(10)-江西省(解析版)
- 《奥特莱斯业态浅析》课件
- 2022年湖南省公务员录用考试《申论》真题(县乡卷)及答案解析
- 养殖场兽医服务合同
- HR六大板块+三支柱体系
- 慢性病患者门诊身份管理方案
- 变压器更换施工方案
- 安徽新宸新材料有限公司年产6000吨锂离子电池材料双氟磺酰亚胺锂项目环境影响报告书
评论
0/150
提交评论