zoukankan      html  css  js  c++  java
  • 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);的设置
  • 相关阅读:
    鉴权系统的梳理及并发问题的考虑
    分布式事物解决选择
    电商平台客服和商铺的数据表设计( 初稿记录)43
    问题整理
    关于
    问题整理
    问题整理(常问3连)
    问题整理
    强引用、软引用、弱引用、幻象引用的区别
    通过aop获取切面方法请求入参名称和值的json打印
  • 原文地址:https://www.cnblogs.com/ivywenyuan/p/4579369.html
Copyright © 2011-2022 走看看