运行结果附图
本节课程主要内容为深入学习MapReduce原理,并编写java程序对日志文件进行流量统计。
-
首先编写MapReduce代码,并在Eclipse中调试成功
代码主要思路:
map阶段:
以user:spname组成的Text作为key;以uploadTraffic,downloadTraffic组成的Text作为value,进行map映射
reduce阶段:
仍以user:spname组成的Text作为key; 对于value的操作:先从Text中拆分出uopladTraffic和downloadTraffic,转换成long型分别作累加,得到uploadTrafficSum和downloadTrafficSum,同时为此key进行计数得到count. 最后以count,uploadTrafficSum,downloadTrafficSum组成的Text作为value值
-
打jar包,通过Hue上传到HDFS,再下载到本地的docker中的master上
-
在Hadoop集群上运行jar包
-
查看运行结果
问题记录
在编写MapReduce的代码的时,输入输出的key,value的类型对应很重要,需要将以下几个地方设置好:
1.建立map类,reduce类的泛型
2.map函数和reduce函数的参数(其参数的前两个:key,value均代表输入类型)
3.main函数中的配置,
当map和reduce的输出类型相同时,可以直接使用
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
两个方法进行设置,并可以使用job.setCombinerClass(Reduce.class);将map的结果进行合并输出给reduce
但是当map和reduce的输出类型相不同时,需要分别设置map和reduce的输出类型,使用函数:
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
并且不能进行job.setCombinerClass(Reduce.class);的设置