博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hadoop-No.3之序列化存储格式
阅读量:6234 次
发布时间:2019-06-22

本文共 1529 字,大约阅读时间需要 5 分钟。

序列化存储指的是将数据结构转化为字节流的过程,一般用于数据存储或者网络传输.与之相反, 反序列化是将字节流转化为数据结果的过程.序列化是分布处理系统(比如Hadoop)的核心,原因在于他能对数据进行转化,形成一种格式.使用了这样的格式之后,数据可以有效的存储,也能通过网络连接进行传输.序列化通常与分布式系统中数据处理的两个方面紧密连接:进程间的通信(比如他远程过程调用,即Remote Prucedure Call RPC),以及数据存储.

Hadoop主要采用的序列化格式为Writables.Writables的特点是紧密,快速.但是脱离Java语言不便于扩展和使用.不过Hadoop生态系统中也有越发普及的其他序列化的框架,包括Thrift,Protocol Buffers 与Avro. 其中Avro的适用性最好,因为它创建的初中就是解除Hadoop Writables的限制.

1 Thrift

Thrift 是Facebook公司开发的框架,用于实现跨语言提供服务接口.Thrift使用接口定义语言(Interface Definition Language, IDL)定义服务接口,而且依据IDL文件自动生成桩代码(stub code),使用这些代码的RPC客户端与服务器,能够跨平台通信.

2 Protocol Buffers

Protocol Buffers(prorobuf)格式由Google公司开发,用于在不同语言编写的服务之间完成数据交换 ,与Thrift类似,Protobuf的结构由一个IDL文件定义,IDL用于为不同的语言创建桩代码.与Thrift类似的是,Protocol Buffers 不支持记录的内部压缩,不可分片,而且缺少MapReduce的原生支持.但是,同样与Thrift类似,Elephant Bird项目可以用于编码protobuf记录,支持MapReduce,压缩以及分片.

3 Avro

Avro是一种和语言无关的数据序列化系统,其设计初衷是解决Hadoop Writables的主要缺点,即缺少跨语言的可移植性支持.与Thrift和Protocol Buffers相同的是,Avr的数据描述也无关语言.与Thrift和Protocol Buffers不同的是,Avro可以选择生成代码,也可以选择不生成代码.因为Avro将模式存储于每个文件的头部,所以每个文件都是自描述的(self-documenting).Avro文件都很容易读取,即使是用一种语言写入数据,而另外一种语言类读取,也没有影响.Avro为MapReduce提供了更好的原生支持.因为Avro的数据可压缩可分片.Avro的另一个重要特点是支持模式演进(schema evolution),这一特点使得Avro比SequenceFile更适合Hadoop应用.也就是说,读取文件的模式不需要与邪恶如文件的模式严格匹配.于是,当需求发生变更的时候,模式中可以添加新的字段

Avro通常都是以JSON格式定义,但是也可以用Avro IDL定义,如前所述,模式存储于文件的头部,是文件元数据的一部分.除了元数据,文件头部还八廓一个唯一的同步标志.与SequenceFile类似,这个同步标志用于隔开文件中的数据块.从而使Avro文件支持分片.每个Avro文件的头部后面都有一系列的数据块,包含序列化后的Avro对象.这些数据块可以压缩.而且,各种数据以原格式存储在这些数据块中,这也为压缩提供了额外的帮助.

Avro定义了少量的基本类型.包括 Boolean int float和string .它也支持array map和enum等复杂类型

转载地址:http://lqhna.baihongyu.com/

你可能感兴趣的文章
image Modify for kvm , openstack
查看>>
【iOS-cocos2d-X 游戏开发之七】整合Cocos2dX的Android项目到Xcode项目中,Android导入打包运行即可!...
查看>>
要毕业了,为什么这么久我的工作还没有找到?
查看>>
压力测试
查看>>
矩阵对角线计算
查看>>
搜索命令find
查看>>
2015.09.29信息系统项目管理师作业
查看>>
我的友情链接
查看>>
局域网内制作yum源
查看>>
C#中一些易混淆概念总结(二)--------构造函数,this关键字,部分类,枚举
查看>>
IOS UIWebView使用开发
查看>>
redis 常用命令
查看>>
微软将Office语音办公啦
查看>>
设计模式(一)
查看>>
3分钟理解响应式布局
查看>>
LeCun再度回应卸任:我没有被取代,Jérôme 的朋友爆料趣事
查看>>
【零基础】PostgreSQL从入门到精通
查看>>
JavaScript的childNodes、nodeType、nodeValue属性
查看>>
sublime 常用python 插件
查看>>
美丽播直播直播系统解决方案:1000在线服务器方案
查看>>