【MapReduce】分析WordCount数据处理过程并进行自主开发WordCount程序


手动反爬虫,禁止转载: 原博地址 https://blog.csdn.net/lys_828/article/details/118958601(CSDN博主:Be_melting)

 知识梳理不易,请尊重劳动成果,文章仅发布在CSDN网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息

1 演示WordCount运行

安装好Hadoop之后,会自带的有WordCount的计算jar包,如下
在这里插入图片描述
首先开启hadoop服务:start-all.sh ,接着找到要进行计数的文件内容
在这里插入图片描述
然后就是执行计数的程序(这条指令在前面都已经介绍很多次了)
在这里插入图片描述
核实一下输出的结果(最终核实无误)
在这里插入图片描述
上述就是使用自带的WordCountt计算程序步骤,首先把Hadoop服务开启,接着就是找到文件所在的位置和计算的程序jar包的位置,然后就是执行计算的程序,最后就是在指定的文件路径下就能看到最终的结果

2 分析WordCount数据处理过程

流程分解如下:

  • (1)数据来源是在HDFS中的input文件夹下的data.txt文件中

  • (2)过程分为Map阶段和Reduce阶段,且两个阶段的数据处理都是以key-value的形式

    • a)Map阶段的输入:k1和v1,其中的k1表示的是读入数据的偏移量,v1就是读取到的数据。因为文本数据是按照行进行读取,偏移量的意思就是这一行在文本当中的位置,而这个位置是按照字节为单位进行计算的。比如说第一句话的偏移量就是0,而第二句话就是15,因为前面一句话的字节长度为14(空格也算),剩下的每行就是依次类推,但是需要注意这里仅仅是了解一下就行,我们并不关心数据是采用哪种规则进行提取,而是最终数据本身,也就是在Map输入阶段我们的重点应该放在v1上面,而不是k1上
    • b)Map的输出阶段:k2和v2,其中k2就是每一个单词,v2就是每一个单词计一次数,如果是全分布的环境,那么进行计算的过程可能不在同一台机器上,比如前两句话在一台机器上处理,最后一句话是在另一台机器上进行处理。这里需要特别注意一下:相同的k2,它的v2会被同一个Reduce进行处理(实际上是实现了SQL的distinct、groupby分组和多表查询的功能)
    • c)Reduce的输入阶段:k3和v3,之前已经介绍过Map和Reduce之间的关系,其中Map的输出就是Reduce的输入,这里的k3也就是之前的k2,但是v3就是之前数据值的集合
    • d)Reduce的输出阶段:k4和v4,k4和之前的k3一致,v4就是对v3集合进行求和
  • (3)最后处理完毕之后将数据输出到HDFS,需要注意注意一下这里面key-value都必须是Hadoop自己的数据类型

KeyValueKeyValue
k1:LongWritable(永远都是这个类型)v1:Text(文本数据)k3:Text(文本数据)v3 :IntWritable(数值数据)
k2:Text(文本数据)v2:IntWritable(数值数据)k4:Text(文本数据)v4:IntWritable(数值数据)

最终整个流程的分解图可以参考一下如下的解析,至此整个WordCount程序的计算流程就梳理完毕了

在这里插入图片描述

3 自主开发WordCount程序

3.1 下载jar包

前期准备:将需要的jar包都放置在工程文件汇总(也可以使用maven进行,设置后dependency后,系统会自动下载依赖的jar包)

  • (1)$HADOOP_HOME/share/hadoop/common/*.jar
  • (2)$HADOOP_HOME/share/hadoop/common/lib/*.jar
  • (3)$HADOOP_HOME/share/hadoop/mapreduce/*.jar
  • (4)$HADOOP_HOME/share/hadoop/mapreduce/lib/*.jar

操作的过程和之前利用Java API进行数据的上传和下载类似,还是使用WinSCP软件将所需要的jar包全部下载到桌面的一个新建文件夹中(核实一下,共81个jar包)
在这里插入图片描述
然后打开Eclipse,创建一个工程项目名为MapReduceDemo,再创建一个lib文件夹把jar包添加到环境路径
在这里插入图片描述

3.2 创建程序框架

在src文件夹下新建一个wc的package后,按照之前的梳理过程搭建一个框架,首先创建Java Class名为WordCountMapper的程序用于实现第一阶段的功能,创建好的程序文件如下
在这里插入图片描述
然后再开发一个程序实现第二阶段的功能和最终的执行程序,创建好的程序文件如下
在这里插入图片描述
至此就把框架搭建起来了,接下来就是对每一个程序进行具体的开发

3.3 WordCountMapper程序开发

该程序的开发不需要全部进行底层代码的开发,只需要继承一下父类,在此基础上进行部分修改就可以完成,继承如下
在这里插入图片描述
可以看出继承之后就会显示对应的对应参数数据类型,参数和Map第一阶段的内容是一致,有输入和输出的数据类型的指定需求(注意Text导入的包)
在这里插入图片描述
参数类型指定后,就要完成我们自己的需求,重写里面的map方法,操作如下:在函数内部右键选择Source选项后点击Override/Implement Methods…
在这里插入图片描述
然后再勾选要重写的具体方法,也就是map方法
在这里插入图片描述
最后自动生成部分代码,如下
在这里插入图片描述
接着就是丰富一下重写方法中的内容,其中Context的作用已在下面进行解释,完整的代码如下,结合这输入的数据结构,然后进行分词后计数,至此整个WordCountMapper程序代码就已经开发完毕
在这里插入图片描述

3.4 WordCountReducer程序开发

和Mapper的开发一样,也是进行继承父类,然后直接就是指定对应的数据类型,接着就是对里面的reduce方法进行重写,操作如下
在这里插入图片描述
然后对重写的方法进行代码设计,为了方便理解和简化代码,可以重命名和删除部分代码,一下就是进行修改的部分
在这里插入图片描述
然后设置一个计数器,对v3进行遍历后求和,最后的结果输出的k4和v4,最终修改结果如下,至此整个WordCountReducer程序发完就完成了
在这里插入图片描述

3.5 WordCount执行程序开发

两个框架的程序开发都已经完成了,就差最后一个运行的主程序了,接着就完成这一步的设计,主程序的设计也比较固定,可以归纳出来一个模板,如下

  • (1)创建任务Job,并且制定任务的入口
  • (2)指定任务的Map,Map的输出类型
  • (3)指定任务的Reduce,Reduce的输出类型
  • (4)指定任务的输入和输出路径
  • (5)执行任务

代码编写结果如下
在这里插入图片描述

3.6 代码打包

将整个框架打包成为jar文件,然后再上传到hadoop中运行,也可以下载eclipse的hadoop的插件运行,这里就是为了验证可以实现和内置的jar包的计数功能,所以还是选择将程序进行打包,操作如下

右键wc文件,选择export,打开Java文件夹后点击JAR file,进行下一步
在这里插入图片描述
然后执行导出文件的保存位置,为了方便生成的jar文件的管理,建议单独新建一个文件夹放置,比如在桌面创建一个jar文件夹,生成的文件名为p1
在这里插入图片描述
然后再进行Next(注意不要直接点击Finish,因为配置还没有结束),到第二个界面添加一下主程序
在这里插入图片描述
这时候才是配置完成可以点击Finish按钮了,这时候在桌面的jar文件夹下就能看到生成的jar包了
在这里插入图片描述

4 程序测试

将生成的jar包上传到hadoop中,然后测试一下是不是能够正常运行,上传如下
在这里插入图片描述
在hdfs中操作看一下,已经存在上传的这个jar包,然后在执行一下计数程序,输出结果如下
在这里插入图片描述
最终核实一下目标文件中是否已经存在相关的信息(很完美,最后输出的结果和最初通过内置的jar包处理过的结果完全一致)
在这里插入图片描述
至此MapReduce分析WordCount数据处理过程并进行自主开发WordCount程序就全部梳理完毕了,完结撒花✿✿ヽ(°▽°)ノ✿

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lys_828

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值