当前位置: 首页 > news >正文

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序列化

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的序列化

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;}// 序列化@Overridepublic void write(DataOutput out) throws IOException {out.writeUTF(name);out.writeInt(age);}// 反序列化@Overridepublic 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;}
}

使用对象流对比

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序列化的结果:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java知识点小结3:内存回收
  • 关于c#中异步async和await的理解
  • PyTorch 图像分割模型教程
  • csdn漏洞测试
  • 大数据处理技术:HBase的安装与基本操作
  • 二级C语言2023-9易错题
  • 数据结构与算法-Trie树添加与搜索
  • IDEA甚至前进后退跳转键
  • 【第十三章:Sentosa_DSML社区版-机器学习聚类】
  • 携手阿里云CEN:共创SD-WAN融合广域网
  • 吃透这本大语言模型入门指南,LLM就拿下了
  • python脚本编译为.so速度对比
  • 使用LangGPT提示词让大模型比较浮点数
  • 如何查看Android设备的dpi
  • Springboot+Shiro+Mybatis+mysql实现权限安全认证
  • Apache Zeppelin在Apache Trafodion上的可视化
  • express.js的介绍及使用
  • JS函数式编程 数组部分风格 ES6版
  • Odoo domain写法及运用
  • PHP 7 修改了什么呢 -- 2
  • PHP面试之三:MySQL数据库
  • text-decoration与color属性
  • Unix命令
  • vue.js框架原理浅析
  • Webpack入门之遇到的那些坑,系列示例Demo
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 创建一个Struts2项目maven 方式
  • 对JS继承的一点思考
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 浮动相关
  • 后端_MYSQL
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 缓存与缓冲
  • 回顾 Swift 多平台移植进度 #2
  • 力扣(LeetCode)357
  • 前端面试之闭包
  • 时间复杂度与空间复杂度分析
  • 微信开放平台全网发布【失败】的几点排查方法
  • 学习HTTP相关知识笔记
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • mysql面试题分组并合并列
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # linux 中使用 visudo 命令,怎么保存退出?
  • #单片机(TB6600驱动42步进电机)
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (arch)linux 转换文件编码格式
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (十一)c52学习之旅-动态数码管
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (四)图像的%2线性拉伸
  • (转)【Hibernate总结系列】使用举例