hadoop4--深入mapreduce

运行结果附图

本节课程主要内容为深入学习MapReduce原理,并编写java程序对日志文件进行流量统计。

  1. 首先编写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值
    

    2015-04-09 09:16:59 的屏幕截图

  2. 打jar包,通过Hue上传到HDFS,再下载到本地的docker中的master上

  3. 在Hadoop集群上运行jar包

    2015-04-08 12:49:59 的屏幕截图

    2015-04-08 12:50:27 的屏幕截图

  4. 查看运行结果

    2015-04-08 12:51:33 的屏幕截图

    2015-04-08 13:02:05 的屏幕截图

问题记录

在编写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);的设置
posted @ 2015-06-15 22:14  ivywenyuan  阅读(218)  评论(0编辑  收藏  举报