Hadoop-序列化
Posted 嘣嘣嚓
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop-序列化相关的知识,希望对你有一定的参考价值。
序列化
序列化(serialization)是指将结构化对象转化为字节流以便在网络上传输或写到磁盘进行永久存储的过程。反序列化(deserialization)是指将字节流转回结构化对象的逆过程。
序列化在分布式数据处理的两大领域经常出现:进程间通信和永久存储
在Hadoop中,系统中多个节点上进程间的通信是通过远程过程调用(remote procedure call,RPC)实现的。RPC协议将消息序列化成二进制流后发送到远程节点,远程节点接着将二进制流反序列化为原始消息。通常情况下,RPC序列化格式如下
1.紧凑
紧凑格式能充分利用网络带宽(数据中心中最稀缺的资源)
2.快速
进程间通信形成了分布式系统的骨架,所以需要尽量减少序列化和反序列化的性能开销,这是最基本的。
3.可扩展
为了满足新的需求,协议不断变化,所以在控制客户端和服务器的过程中,需要直接引进相应的协议。例如,需要能够在方法调用的过程中增添新的参数,并且新的服务器需要能够接受来自老客户端的老格式的消息(无新增的参数)
4.支持互操作
对于某些系统来说,希望能支持以不同语言写的客户端与服务器交互,所以需要设计一种特定的格式来满足这一需求。
表面看来,序列化框架对选择用于数据持久存储的数据格式应该会有不同的要求。毕竟,RPC的存活时间不到1秒钟,永久存储的数据却可能在写到磁盘若干年后才会被读取。这么看来,对数据永久存储而言,RPC序列化格式的4大理想属性非常重要。我们希望存储格式比较紧凑(进而高效使用存储空间)、快速(以读写数据的额外开销比较小)、可扩展(以可以透明地读取老格式的数据)且可以互操作(以可以使用不同的语言读写永久存储的数据)。
Hadoop使用的是自己的序列化格式Writable,它绝对紧凑、速度快,但不太容易用Java以外的语言进行扩展和应用。因为Writable是Hadoop的核心(大多数MapReduce程序都会为键和值使用它)。
以上是关于Hadoop-序列化的主要内容,如果未能解决你的问题,请参考以下文章