【3-2】mapreduce执行流程

mapper和reducer输入和输出都是以(key,value)形式的

Group,分组,按照key2来分组,然后将v2放在一个集合中,作为一个value

如果我们想实现mapreduce模型,只需要重写map方法和reduce方法即可,适合各种业务。


mapreduce执行过程:

map任务:

1.读取文件内容,一行内容解析成一个key,value【怎么做的?一会儿介绍】一个(key,value)对执行一次map函数方法

2.在map里实现自己的业务逻辑,转换成新的key,value,然后输出

3.对输入的key,value分区

4.对不同分区的数据,排序分组。

一个inputspilt对应一个mapper【每个mapper只需要计算自己的数据】


reduce任务

【此时已经完成了分区排序分组】

1.到mapper里面取数据

2.对多个map任务的输出,合并,排序,写reduce函数自己的业务逻辑,对输入的key,value进行处理,转换成新的key,value

3.reduce的输出保存到文献中。


例子:先运行一个mapreduce

【HDFS】启动起来并不能运行mapreduce,还得启动Yarn  ./start-yarn.sh 【记得hadoop2.0都保存在sbin里面】

打开centos,打开yarn之后,首先,我创建一个word文件,

1.把文件上传到hdfs里;hadoop fs -put words【这个是相对目录,我本地这个目录下正好有words,我就不同全部都写路径了】 /words.txt【这个是hdfs里的路径】

之后检查一下是否写入   hadoop fs -ls /

成功之后运行mapreduce【找个jar包运行】:hadoop jar 【接下来接jar所在的位置】hadoop-mapreduce-examples-2.2.0.jar wordcount 【然后接输入和输出】/words.txt /wcout

运行时间十分漫长,之后等出现map100% reduce100%的时候,就可以了。

打开ls看一看是否存在


发现wcout里面有一个part-r-00000【貌似是接口文件?不懂。。】,然后cat它看一眼,就能得到我们的Wordcount结果


接下来分析一下Wordcount流程:


key,value是以字符偏移的

map阶段,一边解析【一个IO流把文件读取到内存】一边运行,一行一个map过程

map过程的伪代码如上。map方法,输入输出都是key,value。我的key是数字类型,但是对计算Wordcount没啥用。


key是k1,value是字符串,然后用split函数以空格作为分割,然后强for循环,每个输出的单词w,作为k2,【也就是输出key】,然后v2设置为1,然后最后可以根据key【k2】相加计算wordcount



reduce阶段

【还记得上次说的,shuffle作用是数据的排序,传递和分组,之后按照k2把value变成一个集合】


按照k2的默认字典顺序,已经排好序了【所以第一个是hello没说的,第二个是jerry而不是tom!】

以上是解析完成状态,接下来执行reduce方法

在reduce方法里,我们这个业务,将对它进行记数【别的可能是求和等等】


此时,v2的集合变成了v2s,最后,把k2当做key,把counter当做value输出


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值