实现 MapReduce 框架的序列化

简介: 实现 MapReduce 框架的序列化

Hadoop 自身的序列化存储格式就是实现了 **Writable 接口**的类,Writable 接口定义了两个方法:


 (1)使用 `write(DataOutput out)` 方法将数据写入到二进制数据流中


 (2)使用 `readFields(DataInput in)` 方法从二进制数据流中读取数据


 以流量统计项目案例为例:


 (1)数据样例

13726238888248124681135604366661116954137262305032481246811382654410126401392643565613215121392625110624001821157596115272106



 (2)字段释义

|字段中文释义|字段英文释义|数据类型||------------|------------|--------||手机号|phone|String||上行流量|upflow|Long||下行流量|downflow|Long|



 (3)项目需求一


 统计每一个用户(手机号)所耗费的总上行流量、总下行流量、总流量。


 期望输出数据格式:


13480253104249480024948004989600


下面是进行了序列化和反序列化的 FlowBean 类:


packagecom.xiaowang.sum;
importjava.io.DataInput;
importjava.io.DataOutput;
importjava.io.IOException;
importorg.apache.hadoop.io.Writable;
publicclassFlowBeanimplementsWritable {
privatelongupFlow;
privatelongdownFlow;
privatelongsumFlow;
// 序列化框架在反序列化操作创建对象实例时会调用无参构造器publicFlowBean() {
super();
    }
// 为了对象数据的初始化方便,加入一个带参的构造函数publicFlowBean(longupFlow, longdownFlow) {
super();
this.upFlow=upFlow;
this.downFlow=downFlow;
this.sumFlow=upFlow+downFlow;
    }
publiclonggetUpFlow() {
returnupFlow;
    }
publicvoidsetUpFlow(longupFlow) {
this.upFlow=upFlow;
    }
publiclonggetDownFlow() {
returndownFlow;
    }
publicvoidsetDownFlow(longdownFlow) {
this.downFlow=downFlow;
    }
publiclonggetSumFlow() {
returnsumFlow;
    }
publicvoidsetSumFlow(longsumFlow) {
this.sumFlow=sumFlow;
    }
// 序列化方法@Overridepublicvoidwrite(DataOutputout) throwsIOException {
out.writeLong(upFlow);
out.writeLong(downFlow);
out.writeLong(sumFlow);
    }
// 反序列化方法// 注意:字段的反序列化顺序与序列化时的顺序保持一致,并且参数类型和个数也一致@OverridepublicvoidreadFields(DataInputin) throwsIOException {
this.upFlow=in.readLong();
this.downFlow=in.readLong();
this.sumFlow=in.readLong();
    }
@OverridepublicStringtoString() {
returnupFlow+"\t"+downFlow+"\t"+sumFlow;
    }
}
相关文章
|
1月前
|
存储 分布式计算 监控
Hadoop【基础知识 01+02】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
【4月更文挑战第3天】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
182 2
|
5天前
|
存储 分布式计算 Hadoop
MapReduce编程模型——自定义序列化类实现多指标统计
MapReduce编程模型——自定义序列化类实现多指标统计
7 0
|
1月前
|
分布式计算 并行计算 搜索推荐
Hadoop MapReduce计算框架
【5月更文挑战第10天】HadoopMapReduce计算框架
25 3
|
1月前
|
分布式计算 并行计算 Java
【分布式计算框架】 MapReduce编程初级实践
【分布式计算框架】 MapReduce编程初级实践
34 2
|
1月前
|
分布式计算 监控 Hadoop
Hadoop【基础知识 02】【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
【4月更文挑战第3天】Hadoop【基础知识 02】【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
172 0
|
1月前
|
存储 分布式计算 Hadoop
MapReduce序列化【用户流量使用统计】
MapReduce序列化【用户流量使用统计】
|
7月前
|
分布式计算 Java Hadoop
26 MAPREDUCE中的序列化
26 MAPREDUCE中的序列化
40 1
|
7月前
|
存储 缓存 分布式计算
20 MAPREDUCE框架结构及核心运行机制
20 MAPREDUCE框架结构及核心运行机制
37 0
|
10月前
|
存储 分布式计算 Hadoop
Hadoop基础学习---6、MapReduce框架原理(一)
Hadoop基础学习---6、MapReduce框架原理(一)
|
11月前
|
缓存 自然语言处理 Rust
比JDK最高快170倍,蚂蚁集团开源高性能多语言序列化框架Fury
Fury是一个基于JIT动态编译和零拷贝的多语言序列化框架,支持Java/Python/Golang/JavaScript/C++等语言,提供全自动的对象多语言/跨语言序列化能力,和相比JDK最高170倍的性能。经过多年蚂蚁核心场景的锤炼打磨,现已正式在Github对外开源:https://github.com/alipay/fury
2431 5