整套大数据学习资料(视频+笔记)百度网盘无门槛下载:http://www.edu360.cn/news/content?id=3377

4.3. 序列化

hadoop 花牛 9℃ 0评论

序列化(serialization)是指将结构化对象转化为字节流以便在网络传输或写到磁盘进行永久存储的过程。反序列化(deserialization)是指将字节流转回结构化对象的逆过程。

序列化在分布式数据处理的两大领域经常出现:进程间通信和永久存储。

Hadoop中,系统中多个节点上进程间的通信是通过“远程过程调用” (remote procedure callRPC)实现的。RPC协议将消息序列化成二进制流后发送到远程节点,远程节点接着将二进制流反序列化为原始消息。通常情况下,RPC序列化格式如下。

· 紧凑

紧凑格式能充分利用网络带宽(数据中心中最稀缺的资源)。

· 快速

进程间通信形成了分布式系统的骨架,所以需要尽量减少序列化和反序列化的性能开销,这是最基本的。

· 可扩展

为了满足新的需求,协议不断变化。所以在控制客户端和服务器的过程中,需要直接引进相应的协议。例如,需要能够在方法调用的过程中增添新的参数,并且新的服务器需要能够接受来自老客户端的老格式的消息(无新增的参数)。

· 支持互操作

对于某些系统来说,希望能支持以不同语言写的客户端与服务器交互,所以需要设计需要一种特定的格式来满足这一需求。

表面看来,序列化框架对选择用于数据持久存储的数据格式应该会有不同的要求。毕竟,RPC的存活时间不到1秒钟,永久存储的数据却可能在写到磁盘若干年后才会被读取。这么看来,对数据永久存储而言,RPC序列化格式的4大理想属性非常重要。我们希望存储格式比较紧凑(进而高效使用存储空间)、快速(以读/写数据的额外开销比较小)、可扩展(以可以透明地读取老格式的数据)且可以互操作(以可以使用不同的语言读/写永久存储的数据)。

Hadoop使用的是自己的序列化格式Writable,它绝对紧凑、速度快,但不太容易用Java以外的语言进行扩展或使用。因为WritableHadoop的核心(大多数MapReduce程序都会为键和值使用它),所以在接下来的三个小节中,我们要进行深入探讨,然后再从总体上看看序列化框架和Avro,后者是一个克服了Writable部分不足的序列化系统。

转载请注明:全栈大数据 » 4.3. 序列化

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址