Hadoop序列化
序列化概述
自定义bean对象实现序列化接口(Writable)
在企业开发中往往常用的基本序列化类型不能满足所有需求,比如在Hadoop框架内部传递一个bean对象,那么该对象就需要实现序列化接口。
具体实现bean对象序列化步骤如下7步。
- 必须实现Writable接口
- 反序列化时,需要反射调用空参构造函数,所以必须有空参构造
1 | public FlowBean() { |
- 重写序列化方法
1 | @Override |
- 重写反序列化方法
1 | @Override |
- 注意反序列化的顺序和序列化的顺序完全一致
- 要想把结果显示在文件中,需要重写toString(),可用”\t”分开,方便后续用。
- 如果需要将自定义的bean放在key中传输,则还需要实现Comparable接口,因为MapReduce框中的Shuffle过程要求对key必须能排序。
1 | @Override |
序列化案例实操
需求
统计每一个手机号耗费的总上行流量、下行流量、总流量
- 输入数据(phone_data.txt)
1 | 1 13736230513 192.196.100.1 www.atguigu.com 2481 24681 200 |
- 输入数据格式
1 | 7 13560436666 120.196.100.99 1116 954 200 |
- 期望输出数据格式
1 | 13560436666 1116 954 2070 |
需求分析
编写MapReduce程序
- 编写流量统计的Bean对象
1 | package com.atyp.mr.flowsum; |
- 编写Mapper类
1 | package com.atyp.mr.flowsum; |
- 编写Reducer类
1 | package com.atyp.mr.flowsum; |
- 编写Driver驱动类
1 | package com.atyp.mr.flowsum; |