实现 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;
    }
}
相关文章
|
28天前
|
分布式计算 资源调度 Hadoop
Hadoop-10-HDFS集群 Java实现MapReduce WordCount计算 Hadoop序列化 编写Mapper和Reducer和Driver 附带POM 详细代码 图文等内容
Hadoop-10-HDFS集群 Java实现MapReduce WordCount计算 Hadoop序列化 编写Mapper和Reducer和Driver 附带POM 详细代码 图文等内容
78 3
|
6月前
|
存储 分布式计算 监控
Hadoop【基础知识 01+02】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
【4月更文挑战第3天】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
298 2
|
3月前
|
Java
JDK序列化原理问题之Hessian框架不支持writeObject/readObject方法如何解决
JDK序列化原理问题之Hessian框架不支持writeObject/readObject方法如何解决
|
2月前
|
分布式计算 资源调度 Hadoop
在YARN集群上运行部署MapReduce分布式计算框架
主要介绍了如何在YARN集群上配置和运行MapReduce分布式计算框架,包括准备数据、运行MapReduce任务、查看任务日志,并启动HistoryServer服务以便于日志查看。
56 0
|
3月前
|
缓存 分布式计算 Java
详细解读MapReduce框架中的分布式缓存
【8月更文挑战第31天】
31 0
|
3月前
|
开发框架 缓存 前端开发
基于SqlSugar的开发框架循序渐进介绍(24)-- 使用Serialize.Linq对Lambda表达式进行序列化和反序列化
基于SqlSugar的开发框架循序渐进介绍(24)-- 使用Serialize.Linq对Lambda表达式进行序列化和反序列化
|
3月前
|
XML 存储 JSON
(十二)探索高性能通信与RPC框架基石:Json、ProtoBuf、Hessian序列化详解
如今这个分布式风靡的时代,网络通信技术,是每位技术人员必须掌握的技能,因为无论是哪种分布式技术,都离不开心跳、选举、节点感知、数据同步……等机制,而究其根本,这些技术的本质都是网络间的数据交互。正因如此,想要构建一个高性能的分布式组件/系统,不得不思考一个问题:怎么才能让数据传输的速度更快?
|
5月前
|
存储 分布式计算 Hadoop
MapReduce编程模型——自定义序列化类实现多指标统计
MapReduce编程模型——自定义序列化类实现多指标统计
40 0
|
6月前
|
分布式计算 并行计算 搜索推荐
Hadoop MapReduce计算框架
【5月更文挑战第10天】HadoopMapReduce计算框架
50 3
|
6月前
|
分布式计算 并行计算 Java
【分布式计算框架】 MapReduce编程初级实践
【分布式计算框架】 MapReduce编程初级实践
148 2