《Spark大数据分析:核心概念、技术及实践》一1.2 数据序列化

简介:
  本节书摘来自华章出版社《Spark大数据分析:核心概念、技术及实践》一书中的第1章,第1.2节,作者[美] 穆罕默德·古勒(Mohammed Guller),更多章节内容可以访问云栖社区“华章计算机”公众号查看。


1.2 数据序列化

数据有自己的生命周期,独立于创建或使用它的程序。大多数情况下,数据比创建它的应用存活得更久。一般来说,数据保存在硬盘上。有时,也会通过网络把数据从一个应用发送给另一个应用。

在硬盘上存储或通过网络发送的数据格式与数据在内存中的格式是不一样的。把内存中的数据转换为可在硬盘上存储或通过网络发送的过程叫作序列化,而把硬盘或网络中的数据读取到内存的过程叫作反序列化。

数据可以用多种不同的格式进行序列化,比如CSV、XML、JSON和各种二进制格式。每种格式各有优缺点。比如,像CSV、XML和JSON这样的文本格式对人类友好,但在存储空间或解析时间方面并不十分高效。另一方面,二进制格式更加紧凑,在解析上比文本格式更快,但可读性较差。

在数据集较小时,文本和二进制格式之间的序列化/反序列化时间和存储空间差异不是什么大问题。因此,人们通常首选文本格式来处理小数据集,因为它更容易管理。然而,对于大数据集,文本和二进制格式之间的序列化/反序列化时间和存储空间差异将是极大的。因此,首选二进制格式来存储大数据集。

本节讲述一些常用的用来序列化大数据的二进制格式。

1.2.1 Avro

Avro提供了一个简洁的且独立于语言的二进制格式,用来数据序列化。它可用来存储数据到文件或通过网络发送数据。它支持多种数据结构,包括嵌套数据。

Avro使用一种自描述的二进制格式。使用Avro序列化数据时,模式与数据同时存储。这样一来,稍后Avro文件可以被任何应用读取。另外,因为模式与数据同时存储,所以写数据时没有关于值的间接开销,使得序列化快速、紧实。使用Avro通过网络交换数据时,发送端和接收端在初始化连接握手时交换模式。Avro模式使用JSON描述。

Avro自动处理字段的添加和删除、前向和后向兼容性,这些都不需应用来负责。

1.2.2 Thrift

Thrift是一个独立于语言的数据序列化框架,主要提供工具来完成不同编程语言所写的应用之间通过网络进行的数据交换序列化。它支持多种语言,包括:C++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、JavaScript、Node.js、Smalltalk、OCaml、Delphi和其他语言。

Thrift提供一个代码生成工具和一组用于序列化数据并通过网络传输的库。它抽象了序列化数据和通过网络传输数据的机制。因此,它使得应用开发者可以集中精力于核心的应用逻辑,而不用担心如何序列化数据和可靠、有效地传输数据。

通过Thrift,应用开发者在一个语言中立的接口定义文件中定义数据类型和服务接口。在接口定义文件中定义的服务由服务器端应用提供,并由客户端应用使用。Thrift编译器编译这个文件,并生成开发者用来快速构建客户端和服务器端应用的代码。

基于Thrift的服务器和客户端可以在相同计算机或网络上的不同计算机上运行。同样地,服务器端和客户端应用可以使用同一种编程语言来开发,也可以用不同编程语言来开发。

1.2.3 Protocol Buffers

Protocol Buffers是Google开发的开源数据序列化框架。类似于Thrift和Avro,它也是语言中立的。Google内部用Protocol Buffers作为主要的文件格式,也将其用来进行应用间的数据交换。

Protocol Buffers与Thrift类似,前者提供一个编译器和一组库来帮助开发者序列化数据。开发者在一个文件中定义数据集的结构或模式,然后用Protocol Buffers编译器进行编译,由此生成可用来轻松读写数据的代码。

相对Thrift而言,Protocol Buffers支持较少的编程语言。目前,它支持C++、Java和Python。另外,不像Thrift那样同时提供数据序列化和构建远程服务的工具,Protocol Buffers主要是一种数据序列化格式,可以用来定义远程服务,但并未限定到任何RPC(远程过程调用)协议。

1.2.4 SequenceFile

SequenceFile是一种用于存储键值对的二进制文件格式。它通常作为Hadoop的输入和输出文件格式。MapReduce也用SequenceFile来存储map函数返回的临时输出。

SequenceFile有三种不同的格式:未压缩格式、记录压缩格式和块压缩格式。在记录压缩格式的SequenceFile中,只有记录中的值才压缩;而在块压缩格式的SequenceFile中,键和值都压缩。

相关文章
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
117 79
从数据小白到大数据达人:一步步成为数据分析专家
从数据小白到大数据达人:一步步成为数据分析专家
266 92
从湖仓分离到湖仓一体,四川航空基于 SelectDB 的多源数据联邦分析实践
川航选择引入 SelectDB 建设湖仓一体大数据分析引擎,取得了数据导入效率提升 3-6 倍,查询分析性能提升 10-18 倍、实时性提升至 5 秒内等收益。
从湖仓分离到湖仓一体,四川航空基于 SelectDB 的多源数据联邦分析实践
大数据 优化数据读取
【11月更文挑战第4天】
144 2
数据让农业更聪明——用大数据激活田间地头
数据让农业更聪明——用大数据激活田间地头
19 2
数据的“潘多拉魔盒”:大数据伦理的深度思考
数据的“潘多拉魔盒”:大数据伦理的深度思考
66 25
数据无界、湖仓无界, Apache Doris 湖仓一体解决方案全面解读(上篇)
湖仓一体架构融合了数据湖的低成本、高扩展性,以及数据仓库的高性能、强数据治理能力,高效应对大数据时代的挑战。为助力企业实现湖仓一体的建设,Apache Doris 提出了数据无界和湖仓无界核心理念,并结合自身特性,助力企业加速从 0 到 1 构建湖仓体系,降低转型过程中的风险和成本。本文将对湖仓一体演进及 Apache Doris 湖仓一体方案进行介绍。
数据无界、湖仓无界, Apache Doris 湖仓一体解决方案全面解读(上篇)
大数据与云计算:无缝结合,开启数据新纪元
大数据与云计算:无缝结合,开启数据新纪元
171 11

热门文章

最新文章