《大数据平台部署与运维》课件-MapReduce编程模型_第1页
《大数据平台部署与运维》课件-MapReduce编程模型_第2页
《大数据平台部署与运维》课件-MapReduce编程模型_第3页
《大数据平台部署与运维》课件-MapReduce编程模型_第4页
《大数据平台部署与运维》课件-MapReduce编程模型_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

大数据平台部署与运维《大数据平台部署与运维》课程组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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论