Hadoop里面MapReduce的序列化与Java序列化比较

什么是序列化?

jvm中的一个对象,不是类,假如你想把一个对象,保存到磁盘上,必须序列化,你把文件中的对象进行恢复,是不是的反序列化。

假如你想把对象发送给另一个服务器,需要通过网络传输,也必须序列化,到另一侧要反序列化。

说到序列化,我们想到了Java的序列化。一个类实现了Serializable 接口即可。

Java对象什么时候需要序列化?

1)需要保存到本地的时候

2)需要在网络之间传输的时候

复制代码
package com.bigdata;

import java.io.Serializable;
/**
 * @Author laoyan
 * @Description TODO
 * @Date 2022/8/1 11:43
 * @Version 1.0
 */
public class User implements Serializable {

    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

大数据技术Hadoop并没有采用java的序列化机制,而是自己又整了一套自己的序列化机制。为什么?

Java的序列化携带的信息太多了,文件太大了,不便于在网络之间传输。

User 使用Java --> 100KB

User 使用大数据的序列化 --> 5KB

大数据采用的序列化机制是 Writable 接口。

为什么非得序列化呢?因为需要在网路之间传输。

|--------------|--------------------|--------|
| Java数据类型 | Hadoop序列化的数据类型 | 释义 |
| byte | ByteWritable | 字节类型 |
| short | ShortWritable | 短整型 |
| int | IntWritable | 整型 |
| long | LongWritable | 长整型 |
| float | FloatWritable | 单精度浮点型 |
| double | DoubleWritable | 双精度浮点型 |
| boolean | BooleanWritable | 布尔型 |
| String | Text | 字符串 |
| array | ArrayWritable | 数组 |
| Map | MapWritable | Map |
| null | NullWritable | 空 |

java的八大基本数据类型: byte short int long float double char boolean

**只需要记住:String --> Text即可。null -->**NullWritable,仅仅是为了在某个地方占位,符合语法而已。

2、测试java序列化 VS Hadoop序列化大小比较

java序列化

java 复制代码
package com.bigdata;

import java.io.Serializable;


public class User implements Serializable {

    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Hadoop的序列化

java 复制代码
package com.bigdata;

import org.apache.hadoop.io.Writable;

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


public class UserWritable implements Writable {

    private String name;
    private int age;

    public UserWritable(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 序列化
    @Override
    public void write(DataOutput out) throws IOException {
        out.writeUTF(name);
        out.writeInt(age);
    }

    // 反序列化
    @Override
    public void readFields(DataInput in) throws IOException {

        // 进行反序列化的时候,读取的顺序一定要跟序列化的时候的顺序一致,否则报错
        name = in.readUTF();
        age = in.readInt();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

使用对象流对比

java 复制代码
package com.bigdata;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;


public class TestXLH {

    public static void main(String[] args) throws Exception {
        User user = new User("zhangsan",20);
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("D:/user1.txt"));
        objectOutputStream.writeObject(user);
        objectOutputStream.close();

        UserWritable user2 = new UserWritable("zhangsan",20);
        ObjectOutputStream objectOutputStream2 = new ObjectOutputStream(new FileOutputStream("D:/user2.txt"));
        // 此时是序列化对象去write 对象流,此处需要注意
        user2.write(objectOutputStream2);
        objectOutputStream2.close();

    }
}

java序列化的结果:

hadoop序列化的结果:

相关推荐
程序猿大波14 分钟前
基于Java,SpringBoot,Vue,HTML宠物相亲配对婚恋系统设计
java·vue.js·spring boot
Leaf吧28 分钟前
分布式定时任务(xxl-job)
java·分布式
纪元A梦40 分钟前
华为OD机试真题——绘图机器(2025A卷:100分)Java/python/JavaScript/C++/C/GO最佳实现
java·javascript·c++·python·华为od·go·华为od机试题
24k小善1 小时前
FlinkSql入门与实践
java·大数据·flink·云计算
Leo.yuan1 小时前
产销协同的作用是什么?又如何对各部门发挥作用?
大数据·信息可视化·数据分析·需求分析·企业数字化
帅帅的Python1 小时前
2015-2023 各省 GDP 数据,用QuickBI 进行数据可视化——堆叠图!
大数据·人工智能
CodeCraft Studio1 小时前
Excel处理控件Spire.XLS系列教程:Java设置Excel活动工作表或活动单元格
java·python·excel
数据与人工智能律师1 小时前
正确应对监管部门的数据安全审查
大数据·网络·数据库·人工智能·区块链
瓯雅爱分享2 小时前
任务管理系统,Java+Vue,含源码与文档,科学规划任务节点,全程督办保障项目落地提效
java·mysql·vue·软件工程·源代码管理
chxii2 小时前
2.3java运算符
java