目录

  • 序列化概述
    • 什么是序列化
    • 为什么要序列化
    • 为什么不使用Java的序列化
  • 自定义bean对象实现序列化接口(Writable)
    • 实现bean对象序列化步骤

序列化概述

什么是序列化

序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储到磁盘(持久化)和网络传输。

反序列化就是将收到的字节序列(或其他数据传输协议)或者是磁盘的持久化数据,转换成内存中对象。

为什么要序列化

一般来说,“活的”对象只生存在内存里,关机断电就没有了。而且“活的”对象只能由本地的进程使用,不能被发送到网络上的另外一台计算机。然而序列化可以存储“活的”对象,可以将“活的”对象发送到远程计算机。

为什么不使用Java的序列化

java的序列化是一个重量级序列化框架(Serializable),一个对象被序列化后,会s附带很多额外的信息(各种校验信息,Header,继承体系等),不便于在网络中高效传输。

而hadoop序列化具有以下优点:

紧凑:高效使用存储空间;
快速:读写数据的额外开销小;
可扩展:随着通信协议的升级可升级;
互操作性:支持多语言的交互。

自定义bean对象实现序列化接口(Writable)

在企业开发中往往常用的基本序列化类型不能满足所有需求,比如在hadoop框架内部传递一个bean对象,那么该对象就需要实现序列化接口。

实现bean对象序列化步骤

1.必须实现Writable接口;

2.反序列化时,需要反射调用空参构造函数,所以必须有空参构造:

public FlowBean(){super();
}

3.重写序列化方法

    @Overridepublic void write(DataOutput out) throws IOException {out.writeLong(upFlow);out.writeLong(downFlow);out.writeLong(sumFlow);}

4.重写反序列化方法

@Overridepublic void readFields(DataInput in) throws IOException {this.upFlow = in.readLong();this.downFlow = in.readLong();this.sumFlow = in.readLong();}

5.注意反序列化的顺序和序列化的顺序完全一致;

6.要想把结果显示在文件中,需要重写toString()(默认传输的是地址值), 可用"\t"分开,方便后续使用;

7.如果需要将自定义的bean放在key中传输,还需要实现Comparable接口,因为MapReduce框架中的Shuffle过程要求对key必须能排序;

@Override
public int comparaTo(FlowBean o){//从大到小倒序排列return this.sumFlow > o.getSumFlow() ? -1 : 1;
}

Hadoop--MapReduce_Hadoop序列化相关推荐

  1. hadoop的序列化与java的序列化区别

    java的序列化机制 java序列化时会把具体类的数据和类的继承结构信息都序列化传递. 如下图 hadoop的序列化机制 序列化类的数据,但是不序列化类的继承结构信息. 网络传递的时候就少了很多流量, ...

  2. 【MapReduce】Hadoop的序列化机制以及序列化案例求解每个部门工资总额

    Hadoop的序列化机制以及序列化案例求解每个部门工资总额 1 Hadoop的序列化 1.1 序列化定义 1.2 Java序列化编程 1.3 hadoop序列化编程 2 序列化求解每个部门工资总额 手 ...

  3. hadoop 实现序列化

    前言 序列化想必大家都很熟悉了,对象在进行网络传输过程中,需要序列化之后才能传输到客户端,或者客户端的数据序列化之后送达到服务端 序列化的标准解释如下: 序列化就是把内存中的对象,转换成字节序列(或其 ...

  4. Hadoop的序列化和反序列化

    1) 什么是序列化 序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储到磁 盘(持久化)和网络传输. 反序列化就是将收到字节序列(或其他数据传输协议)或者是磁盘的持久化数据,转换 ...

  5. 一脸懵逼学习Hadoop中的序列化机制——流量求和统计MapReduce的程序开发案例——流量求和统计排序...

    一:序列化概念 序列化(Serialization)是指把结构化对象转化为字节流. 反序列化(Deserialization)是序列化的逆过程.即把字节流转回结构化对象. Java序列化(java.i ...

  6. MapReduce快速入门系列(4) | Hadoop序列化

    Hello,大家好,本次为大家带来的是Hadoop的序列化操作. 目录 一. 序列化的简单介绍 1.1. 什么是序列化 1.2. 为什么要序列化 1.3. 为什么不用Java的序列化 二. 自定义be ...

  7. spark(kryo)、hadoop(writable)、jdk(serializable)-序列化

    一.SRC 一个类在jvm中是有结构的,但即使是在jvm中,也是一堆数据.网络只能传文本,所以需要序列化和反序列化. 通过几种方式的序列化后文本输出到本地文件,可以对比下大小. 二.jdk的序列化 将 ...

  8. Java拾遗:004 - JDK、Hadoop、Hessian序列化

    2019独角兽企业重金招聘Python工程师标准>>> JDK序列化 在分布式架构中,序列化是分布式的基础构成之一,我们需要把单台设备上的数据通过序列化(编码.压缩)后通过网络传输给 ...

  9. Hadoop详解(三)——MapReduce原理和执行过程,远程Debug,Writable序列化接口,MapReduce程序编写

    MapReduce概述 MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题. MR由两个阶段组成:Map和Reduce,用户只需要实现map()和Re ...

  10. Hadoop 3.x|第九天|序列化及案例代码编写

    目录 Hadoop序列化 定义 为什么需要序列化 为什么不用Java的序列化 源码 序列化案例实操-流量统计 需求 输入数据 输出数据 分析各个阶段的KV 自定义对象实现序列化接口的步骤 创建Flow ...

最新文章

  1. 758.6G每秒:阿里云成功防御国内最大规模Memcached DDoS反射攻击
  2. Java Thread类的静态void sleep(long time_in_ms)方法,带示例
  3. [USACO18OPEN]Talent Show
  4. Prototype(原型模式)
  5. C++创建动态链接库(*.dll)
  6. [USACO13OPEN]Luxury River Cruise【模拟】
  7. VB C# 语法对比图 (代码实例)
  8. Python音频操作工具PyAudio上手
  9. Android 配置SUPL
  10. 计算机组装与维目实训内容,计算机组装与维实训报告书(原版).doc
  11. 解决Gitbub打开或者下载很慢
  12. PTA---L2-016 愿天下有情人都是失散多年的兄妹(深度优先)
  13. Android虚拟sdcard
  14. windows10图片打开找不到内置图片查看器
  15. 【JTAG】1500协议详解
  16. Flink任务链Operator Chains
  17. mac 安装 qt5 for tsmuxer
  18. 数据中台夯实数据基础
  19. 简述3D可视化展现,更有具体案例来展现
  20. linux kernal map

热门文章

  1. 数组经典题之杨辉三角变形
  2. Linux系统编程16:进程控制之进程终止以及终止进程的三种情况
  3. 矩阵的运算及其运算规则
  4. HVV之WIFI蜜罐反制红队
  5. 基于Given变换的QR分解辨析
  6. 18.linux日志收集数据到hdfs上面
  7. 一起读经典-《Effective Java》1.1 考虑使用静态工厂方法代替构造器
  8. 再谈节奏与动力---平淡与枯燥的力量
  9. (转)十分钟搞定你自己的多图片/文件服务器
  10. Android 之数据传递小结