查找文件中每行第二个单词_mapreduce单词统计理解核心思想

单词统计的是统计一个文件中单词出现的次数,比如下面的数据源

b564b79adfd217bd1d71d48ca5769c1a.png

其中,最终出现的次数结果应该是下面的显示

6f012ae7014a053324301c6300e130a9.png

那么在MapReduce中该如何编写代码并出现最终结果?

首先我们把文件上传到HDFS中(hdfs dfs –put …)

数据名称:data.txt,大小是size是2G

红黄绿三个块表示的是数据存放的块

e662d961191a0fb03c6e86913dc1923c.png

然后数据data.txt进入map阶段,会以(KV对)的形式进入,K表示的是:每行首字母相对于文件头的字节偏移量,V表示的是每一行的文本。

f8805b22ff096bdc2786c3c5d6a0b4f1.png

那么我可以用图表示:蓝色的椭圆球表示一个map,红黄绿数据块在进入map阶段的时候,数据的形式为左边红色的(KV对)的形式

e3222a516e3ba2f1090681e4431b6d83.png

经过map处理,比如String.split(""),做一次处理,数据会在不同的红黄绿数据块中变为下面的KV形式

b63d424652189b6bd61ae42a2f6418e1.png
48cb6e2353ac5a7d9a870e20b406a4d4.png

我们在配置Hadoop的时候或设置reduce的数量,假如有两个reduce

Map执行完的数据会放到对应的reduce中,如下图

620887c7bc657412dd2d6d7b6b8ff459.png

这个地方有一个简单的原理就是

Job.setNumReduce(2)会设置reduce的数量

而HashPartioner类可以利用 key.hashcode % reduce的结果,将不同的map结果输入到不同的reduce中,比如a-e开头的放到一个地方,e-z开头的放到一个地方,那么

b63d424652189b6bd61ae42a2f6418e1.png
48cb6e2353ac5a7d9a870e20b406a4d4.png

这样的数据结果就会变成

58a8517e0beb945de8f0c35ab3384368.png
f3598a25a000d2527f1134889304d620.png
0dcc185bbbd682fc90b5a04dda04a8ec.png

好那么我们此时可以统计了,我开始编写代码

首先我们创建一个wordCount项目,我们创建的项目是maven项目

8d602524e075b2b4e1bed3d881af7619.png

其中pom的配置部分

a3626fb6f2625f7aee047ad5b3482535.png
d7aa9ff1072b7307d810c8119fd234e8.png
0fa57d473270a87094ddac411060dc0b.png

我们创建类

05c85499ca62fe2168d864208b27da2a.png

继承Mapper(注意注释)

754a2bf849b7893cfec5c93eec12dc1f.png

编写代码

c59da15d3514212cae0ba05acc7cfb8d.png

同样创建WordCountReducer,编写代码,利用前面的reduce思想理解

12eee312b3e80c572a01f6b0eb11b364.png

创建WordCountDriver类编写代码

11b56ef0b21dcca677cf39d9e05ec25b.png

导出项目jar

d368e9b41e7163322625b36390eb6cd4.png
71cc1e3f2b9ef7974db2bad41b57a347.png
1fb736191a967e08304c31ff27408b32.png
99d73be0488a24eedcc3385bc07fe369.png

我们启动Hadoop

72fa3d1a937e7ea8f546af2183509610.png

我们上传数据和jar包

f6afd72d0457fa85d6a871670c037c86.png

将数据上传到hdfs上

f8bb243cc4b6d7e4112aefd3a780907b.png

执行下面语句

bin/yarn jar /data/wordCount/wordCount.jar com.xlglvc.xx.mapredece.wordcount_client.WordCountDriver /data.txt /outputwordcount

d070021644d4a42aa4266f0399cadcc4.png

出了点问题,时间不同步

688a0dfbd0412b87866107c3a218e2ed.png

安装ntpdate工具

yum -y install ntp ntpdate

设置系统时间与网络时间同步

ntpdate cn.pool.ntp.org

e26084f4fb986ae094d1c6e0715dece5.png

然后重新执行,此时我们新选择个目录

bin/yarn jar /data/wordCount/wordCount.jar com.xlglvc.xx.mapredece.wordcount_client.WordCountDriver /data.txt /outputwordcount1

cdfbb43f95a292b77e94ac54f4f74241.png

我们去浏览器查询

d05747a1d175b17c8367458d284a6804.png

我们查看最终结果

bin/hdfs dfs -text /outputwordcount1/part-r-00000

e8be0e9e9b4d2a81125a1186410a55e1.png

出现我们想要的结果,统计完成

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值