文档显示:

    手机号流量统计---Mapreduce项目分析

 每行依次是 ~手机号~上行流量~下行流量

需求分析:

 需要统计各自的手机号,及上行、下行、总流量

具体做法:

1.定义map输入输出类型

 通常情况下map输入key-value就是longwritable,text

 我们知道Map读取的过程为:读一行返回一个key-value对,每调用一行就执行一次map方法。而输出value应该是每行的上行流量和下行流量以及总流量,我们想到了对象。输出value可以为bean----mr程序中,可以使用自定义的类型作为mr的输出数据类型,但是前提是实现hadoopwritable序列化机制

2.创建bean---

   2.1定义属性(注意:long类型

  自行通过setget   /  lambok+data注解 使用属性

  2.2构造方法

  2.3重写序列化write和反序列化方法

   序列化

      手机号流量统计---Mapreduce项目分析

                    手机号流量统计---Mapreduce项目分析

  反序列化(注意:先序列化的先反序列化

      手机号流量统计---Mapreduce项目分析

3.map阶段

 应该是手机号作为key,上行流量+下行流量作为value

小技巧:

     1.如果line中间数据有丢失,可以正着+倒着配合获取字段)

     2.构造函数参数和中间设置要机灵点儿哦

         手机号流量统计---Mapreduce项目分析

 3.1map完成

       手机号流量统计---Mapreduce项目分析

  3.2.但是由于每次调用map方法都需要new,这样会增大垃圾回收量,所以优化提前new出所需对象,整个过程只需要重新set

4.reduce阶段

    Map的输出为reduce的输入,设置统计参数

    手机号流量统计---Mapreduce项目分析

5.job阶段

   Job相当于是模板方法,大量代码都是一致的。所以我们可以找到之前的mapreduce的方法进行 黏贴修改代码、重新导包 即可。

6.重写toString 避免输出文件中是对象不便于观察

手机号流量统计---Mapreduce项目分析

接下来我们可以在本地跑一下,拍桌子散伙!

            -------补作业了!

分类:

技术点:

相关文章: