实训任务05 MapReduce获取成绩表的最高分记录
实训1:统计用户纺问次数
任务描述:
统计用户在2016年度每个自然日的总访问次数。原始数据文件中提供了用户名称与访问日期。这个任务就是要获取以每个自然日为单位的所有用户访问次数的累加值。如果通过MapReduce编程实现这个任务,首先要考虑的是,Mapper与Reducer各自的处理逻辑是怎样的;然后根据处理逻辑编写出核心代码;最后在Eclipse中编写完整代码,编译打包后提交给集群运行。
分析思路和逻辑
(1) 输入/输出格式。
这里社交网站用户的访问日期在格式上都属于文本格式,访问次数为整型数据格式。其组成的键值对为<访问日期,访问次数>,因此Mapper的输出与Reducer的输出都选用Text类与IntWritble类。
(2) Mapper要实现的计算逻辑
Map函数的主要任务是读取用户访问文件中的数据,输出所有访问日期与初始次数的键值对。<访问日期,1 >
(3) Reducer要实现的计算逻辑
读取Mapper输出的键值对<访问日期,1>,进行累加。
例:user_login.txt访问日期格式如下:
程序代码如下:
操作步骤:
1.编写以下代码:dailyAccessCount.java,完整内容如下所示。
2.编译生成dailyAccessCount.jar。
3.上传dailyAccessCount.jar到Hadoop集群服务器节点。
Hdfs dfs -put /root/hadooptmp/user_login.txt /user/test
4.在Hadoop集群服务器的终端,以hadoop jar命令提交任务。代码如下
Hadoop jar dailyAccessCount.jar \
/user/root/user_login.txt \
/user/root/AccessCount
实训要求:
分析以上代码,按给出的dailyAccessCount.txt程序代码进行编译运行。将运行结果截图在下面
实训2获取成绩表的最高分记录
1.训练要点
(1)掌握MapReduce的执行流程。
(2)掌握基础的MapReduce程序编写。
(3)掌握MapReduce程序的输人输出格式。
2.需求说明
有一个样例文件subject_score即成绩表A。文件中的每一行数据包含两个字段,科 目和分数。要求获取成绩列表中每个科目成绩最高的记录,并将结果输出到最高成绩表B.
成绩表A的部分内容:
语文 |
73 |
数学 |
97 |
英语 |
21 |
物理 |
72 |
化学 |
49 |
生物 |
69 |
语文 |
106 |
数学 |
112 |
英语 |
38 |
最高成绩表B.内容部分内容:
语文 |
99 |
数学 |
149 |
英语 |
122 |
物理 |
143 |
化学 |
120 |
3.实现思路及步骤
(1)在Mapper类中,mapi 两数资取成绩表人中的数据,在技将读取的数据以空格(参 和服中的格式)分部,级健值对科良源即设发物出健值对类强为 <Text,IntWitable>
(2)在 Reducer中, 由于mp所数输出健值对为想是Tat hwnhe.所以Reise fnw 针对相同的健(即科目1,遍历比较它的值 terable AntWiuble 接收的键值对是-Tet. henbie 最后输出健值对科目,最高成绩>。 (即成绩),找出最高值(即最高成绩)。
4.实训要求:
参考实训1程序代码,完成获取成绩表的最高分记录编程,将代码复制如下,结果截图到下面。参考文章:https://blog.csdn.net/meiLin_Ya/article/details/80811698