MapReduce案例:运行商流量统计

本文通过一个具体的MapReduce案例,介绍如何利用Hadoop进行手机号的上行、下行流量统计。首先分析需求,然后详细阐述Map阶段和Reduce阶段的逻辑,包括数据输入格式、Bean对象的序列化实现,最后指导如何将程序打包并提交到Hadoop集群运行。
摘要由CSDN通过智能技术生成

Hadoop 序列化案例

需求与分析

统计每一个手机号耗费的总上行流量、下行流量、总流量

(1)输入数据

1	13736230513	192.196.100.1	www.dev1.com	2481	24681	200
2	13846544121	192.196.100.2	264	0	200
3 	13956435636	192.196.100.3	132	1512	200
4 	13966251146	192.168.100.1	240	0	404
5 	18271575951	192.168.100.2	www.dev1.com	1527	2106	200
6 	84188413	192.168.100.3	www.dev1.com	4116	1432	200

(2)输入数据格式:

7     13560436666    120.196.100.99        1116         954            200
id    手机号码        网络ip            上行流量  下行流量     网络状态码

(3)期望输出数据格式

13560436666         1116              954             2070
手机号码            上行流量        下行流量        总流量

(4)Map阶段

4.1 读一行数据,切分字段

7     13560436666    120.196.100.99        1116         954            200

4.2 抽取手机号,上行流量,下行流量

13560436666    1116 954

4.3 以手机号为key,bean对象为value输出,即context.write(手机号,bean对象)
4.4 bean对象能传输必须实现序列化接口
(5)Reduce阶段
5.1 累加上行流量和下行流量的总和

13560436666    1116  +   954  =2070
手机号,   上行流量,下行流量 

序列化案例实操

(1)编写流量统计的Bean对象

package com.dev1.FlowSum;

import org.apache.hadoop.io.Writable;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;

//1.实现Writable接口
public class FlowBean implements Writable {
   
    private Long upFlow;
    private Long downFlow;
    private Long sumFlow;

    public Long getUpFlow() {
   
        return upFlow;
    }

    public void setUpFlow(Long upFlow) {
   
        this.upFlow = upFlow;
    }

    public Long getDownFlow() {
   
        return downFlow;
    }

    public void setDownFlow(Long downFlow) {
   
        this.downFlow = downFlow;
    }

    public Long getSumFlow() {
   
        return sumFlow;
    }

    public void setSumFlow(Long sumFlow) {
   
        this.sumFlow = sumFlow;
    }

    //2.反序列化时,需要反射调用空参构造函数,所以必须要有
    public FlowBean() {
   

    }

    public FlowBean(Long upFlow, Long downFlow, Long sumFlow) {
   
        this.upFlow = upFlow;
        this.downFlow = downFlow;
        this.sumFlow = sumFlow;
    }

    //3.写序列化方法
    @Override
    public void write(DataOutput dataOutput) throws IOException {
   
        dataOutput.writeLong(upFlow);
        dataOutput.writeLong(downFlow);
        dataOutput.writeLong(sumFlow);
    }

    //4.反序列化方法
    //5.反序列化方法的读顺序必须与序列化方法的
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是小小白!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值