实验内容与要求:
- MapReduce基本知识总结
- MapReduce的操作实践
2.1 基于MapReduce的WordCount实践:统计每个单词出现的次数
2.2 自定义Hadoop数据类型实践:自定义hadoop数据类型,在统计每个单词出现次数的过程中,同时计算每个单词的长度
2.3 多mapReduce任务的串联实践:基于MapReduce统计共有多少个单词,而不是每个单词出现的次数
1. MapReduce基本知识的总结
MapReduce是一个运行在Hadoop上的分布式计算框架,用于处理大规模的数据,计算的思想是“分治法”,将大量数据分为不互相依赖的数据块,存储在不同的datanode上,由map函数处理形成部分数据的处理结果,再由reduce函数整合形成最终的结果。
一个map函数处理一个<key1,value1>数据,map端的shuffle阶段将<key1,value1>转化为<key1,value-list>形式,减少数据传输的工作量,reduce端的shuffle阶段将map端对应分区数据取回reduce端,对数据按键值排序,reduce函数将<key1,value-list>的数据合并,转为<key2,value2>。
Hadoop的数据类型是对java数据类型的封装,便于进行序列化处理,使不同的数据以统一的格式在集群中存储传输,参考Hadoop的text类型源码,可以自定义wordcountandlen数据类型,输出每个单词的总数和长度。
有时一个MapReduce过程无法得到想要的结果,可以通过多mapre任务的串联完成,如要统计总共有多少个单词,可以使用两个MapReduce任务串联完成。
2. MapReduce的操作实践
2.1基于MapReduce的WordCount实践
代码:


运行结果:

问题:mapreduce相关jar包导入失败
解决办法:检查setting.xml文件中localRepository和mirror标签配置是否正确,且和IDEA中配置的路径相同;右键单击WordCount项目,选择maven,选择Download Sources and Documentation,下载完毕后选择reimport重新导入即可
注意:设置程序的输入输出目录,且输出目录在HDFS上不能存在
2.2 自定义Hadoop数据类型实践
代码:
新建WordCount.java文件:

在WordCount.java文件中的MyReducer类中修改代码如下图:

运行结果:

2.3 多mapReduce任务的串联实践
代码:
在第一个实验代码的基础上,添加如下代码:

在main函数中定义两个job对象:

问题:运行WordCount.java文件只出现如下结果,没有单词总数

解决办法:如下设置两个输出目录:

设置完,删除之前运行产生的ouput文件夹,重新运行WordCount.java文件,即可出现正确结果,其中/output1存放第一次mapreduce的结果,/output2存放第二次mapreduce的结果:

本文总结了MapReduce的基本知识,并通过三个实践环节深入探讨MapReduce操作:1) 实现WordCount统计单词频率;2) 自定义Hadoop数据类型,同时计算单词长度;3) 通过多MapReduce任务串联,统计总单词数。在实践中,遇到如jar包导入失败、输出目录设置等问题,文章也给出了相应的解决方案。
400

被折叠的 条评论
为什么被折叠?



