Hadoop-序列化
序列化
序列化(serialization)是指将结构化对象转化为字节流以便在网络上传输或写到磁盘进行永久存储的过程。反序列化(deserialization)是指将字节流转回结构化对象的逆过程。
序列化在分布式数据处理的两大领域经常出现:进程间通信和永久存储
在Hadoop中,系统中多个节点上进程间的通信是通过远程过程调用(remote procedure call,RPC)实现的。RPC协议将消息序列化成二进制流后发送到远程节点,远程节点接着将二进制流反序列化为原始消息。通常情况下,RPC序列化格式如下
1.紧凑
紧凑格式能充分利用网络带宽(数据中心中最稀缺的资源)
2.快速
进程间通信形成了分布式系统的骨架,所以需要尽量减少序列化和反序列化的性能开销,这是最基本的。
3.可扩展
为了满足新的需求,协议不断变化,所以在控制客户端和服务器的过程中,需要直接引进相应的协议。例如,需要能够在方法调用的过程中增添新的参数,并且新的服务器需要能够接受来自老客户端的老格式的消息(无新增的参数)
4.支持互操作
对于某些系统来说,希望能支持以不同语言写的客户端与服务器交互,所以需要设计一种特定的格式来满足这一需求。
表面看来,序列化框架对选择用于数据持久存储的数据格式应该会有不同的要求。毕竟,RPC的存活时间不到1秒钟,永久存储的数据却可能在写到磁盘若干年后才会被读取。这么看来,对数据永久存储而言,RPC序列化格式的4大理想属性非常重要。我们希望存储格式比较紧凑(进而高效使用存储空间)、快速(以读写数据的额外开销比较小)、可扩展(以可以透明地读取老格式的数据)且可以互操作(以可以使用不同的语言读写永久存储的数据)。
Hadoop使用的是自己的序列化格式Writable,它绝对紧凑、速度快,但不太容易用Java以外的语言进行扩展和应用。因为Writable是Hadoop的核心(大多数MapReduce程序都会为键和值使用它)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示