Zookeeper 序列化机制
- 一、到底在哪些地方需要使用序列化技术呢?
- 二、Zookeeper(分布式协调服务组件+存储系统)
- Java 序列化机制
- Hadoop序列化机制
- Zookeeper序列化机制
一、到底在哪些地方需要使用序列化技术呢?
1、当在网络中需要进行消息、数据、等的传输,那么这些数据就需要进行序列化和反序列化。
2、当数据需要从内存被持久化到磁盘的时候。
二、Zookeeper(分布式协调服务组件+存储系统)
任何一个分布式系统的底层,都必然会有网络通信,这就必然要提供一个分布式通信框架和序列化机制。
Zookeeper网络通信和序列化。你知道有哪些序列化方式呢?
1、Java提供的序列化机制
2、Hadoop的序列化技术
3、Zookeeper的序列化
4、Spark提供的序列化等等
1、Java序列化机制
- class xxxx implements Serializable
- 序列化过程中:类型信息 + 对象实例的属性值
- 特点就是比较笨重:(除了实例的属性信息以外,还会序列化这个实例的类型信息)
- Spark默认使用的序列化机制就是Java原生序列化机制,也提供其他的序列化方式。
- 使用ObjectInputStream 和 ObjectOutputStream 来进行具体的序列化和反序列化。
2、Hadoop序列化机制
有两种方式:avro(implements Writable) protobuf
Hdfs中使用的序列化就是avro,Yarn使用的是Protobuf
Hadoop的序列化和反序列化中的字段的顺序和多少,一定要严格一样,否则序列化和反序列化就对不上了。
class Student implements Writable{
// 反序列化
void readFields(DataIn input);
// 序列化
void write(DataOut output);
}
3、Zookeeper序列化机制
zk中的序列化和反序列化,没有严格的顺序要求,因为使用tag标记,下面会有简单的demo示例:
class Student implements Record{
// 反序列化
void deserialize(InputArchive archive, String tag) {
archive.readBytes();
archive.readInt();
}
// 序列化
void serialize(OutputArchive archive, String tag)
}
ZK中序列化就是Record,如果在源码中看到了一个类实现了Record接口,那么这个类必然将有数据从磁盘读取到内存和从内存序列化到磁盘的方法。
序列化的API主要在zookeeper-jute子项目中。

重点API:
org.apache.jute.InputArchive:反序列化需要实现的接口,其中各种read开头的方法,都是反序列化方法
实现类:在3.4.x之前有三种实现,见图:

3.5之后的版本 就只有Binary这一种了,主要原因是CSV和XML这两种实现类没有人使用,如果需需呀使用这两种实现,直接从老版本中复制。
org.apache.jute.OutputArchive:所有进行序列化操作的都是实现这个接口,其中各种write开头的方法都是序列化方法。
org.apache.jute.Index:用于迭代数据进行反序列化的迭代器。见图:

org.apache.jute.Record:在Zookeeper要进行网络通信的对象,都需要实现这个接口。里面有序列化和反序列化两个重要的方法。
Zookeeper 序列化机制的更多相关文章
- 【分布式】Zookeeper序列化及通信协议
一.前言 前面介绍了Zookeeper的系统模型,下面进一步学习Zookeeper的底层序列化机制,Zookeeper的客户端与服务端之间会进行一系列的网络通信来实现数据传输,Zookeeper使用J ...
- 深入挖掘.NET序列化机制——实现更易用的序列化方案
.NET框架为程序员提供了“序列化和反序列化”这一有力的工具,使用它,我们能很容易的将内存中的对象图转化为字节流,并在需要的时候再将其恢复.这一技术的典型应用场景包括[1] : 应用程序运行状态的持久 ...
- zookeeper心跳机制流程梳理
zookeeper心跳机制流程梳理 Processor链Chain protected void setupRequestProcessors() { RequestProcessor finalPr ...
- Hadoop阅读笔记(六)——洞悉Hadoop序列化机制Writable
酒,是个好东西,前提要适量.今天参加了公司的年会,主题就是吃.喝.吹,除了那些天生话唠外,大部分人需要加点酒来作催化剂,让一个平时沉默寡言的码农也能成为一个喷子!在大家推杯换盏之际,难免一些画面浮现脑 ...
- Java序列化机制
java的序列化机制支持将对象序列化为本地文件或者通过网络传输至别处, 而反序列化则可以读取流中的数据, 并将其转换为java对象. 被序列化的类需要实现Serializable接口, 使用Objec ...
- Thrift 个人实战--Thrift 的序列化机制
前言: Thrift作为Facebook开源的RPC框架, 通过IDL中间语言, 并借助代码生成引擎生成各种主流语言的rpc框架服务端/客户端代码. 不过Thrift的实现, 简单使用离实际生产环境还 ...
- 由浅入深了解Thrift之服务模型和序列化机制
一.Thrift介绍 Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎.其允许你定义一个简单的定义文件中的数据类型和服务接口.以作为输入文件,编 ...
- 1 weekend110的复习 + hadoop中的序列化机制 + 流量求和mr程序开发
以上是,weekend110的yarn的job提交流程源码分析的复习总结 下面呢,来讲weekend110的hadoop中的序列化机制 1363157985066 13726230503 ...
- hadoop序列化机制与java序列化机制对比
1.采用的方法: java序列化机制采用的ObjectOutputStream 对象上调用writeObject() 方法: Hadoop 序列化机制调用对象的write() 方法,带一个DataOu ...
随机推荐
- Spring总结之SpringMvc下
五.拦截器 SpringMVC中的拦截器是通过HandlerInterceptor来实现的,定义一个Interceptor有两种方式 1.实现HandlerInterceptor接口或者继承实现了Ha ...
- P4180 [BJWC2010]严格次小生成树
P4180 [BJWC2010]严格次小生成树 P4180 题意 求出一个无向联通图的严格次小生成树.严格次小生成树的定义为边权和大于最小生成树的边权和但不存在另一棵生成树的边权和在最小生成树和严格次 ...
- Html模板引擎Handlerbars使用demo
1.自定义demo <html> <head> <script src="./handlebars-v4.0.12.js"></scrip ...
- shell脚本(12)-特殊变量介绍
一.特殊变量介绍: 1.$* :代表所有参数,其间隔为IFS内参数的第一个字元 2.$@ :与*星号类同,不同之处在于不参照IFS 3.$# :代表参数数量 4.$: 代表上一个指令的返回值 5.$- ...
- tp3常量
__MODULE__ __CONTROLLER__
- 【Logback日志级别】动态调整Logback的日志级别
一.导入 Logback作为目前一个比较流行的日志框架,我们在实际项目经常使用到该框架来帮助我们打印日志,以便我们可以更快速地获取业务逻辑执行情况.定位系统问题. 常用的日志打印一共有5种级别控制,优 ...
- 使用vue实现用户管理 添加及删除功能
简单的管理系统-增删改查 添加及删除功能 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&qu ...
- Windows系统安装Mariadb数据库(zip包方式安装)--九五小庞
1.去Mariadb官网下载zip安装包 下载地址:https://downloads.mariadb.org/mariadb/10.3.31/ 2.解压压缩包到指定的安装位置 3.在安装包的data ...
- jdk的下载与安装教程
最近在学逆向,就是要反编译人家的java代码,在这之前要先安装环境,下面是下载和安装JDK的教程: 1.JDK下载地址: http://www.oracle.com/technetwork/java/ ...
- js引用类型深拷贝、浅拷贝方法封装
引用类型的深拷贝.浅拷贝在前端领域一直是个很重要的知识点,不仅在业务中频繁使用,也是面试官们喜欢考的的知识点之一.本篇将封装引用类型的深拷贝.浅拷贝方法,并解决在封装过程中出现的问题. 一.浅拷贝 浅 ...