《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中,键和值都压缩。

时间: 2024-10-25 22:37:43

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

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

本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第1节,作者穆罕默德·古勒(Mohammed Guller)更多章节内容可以访问"华章计算机"公众号查看. 大数据技术一览 我们正处在大数据时代.数据不仅是任何组织的命脉,而且在指数级增长.今天所产生的数据比过去几年所产生的数据大好几个数量级.挑战在于如何从数据中获取商业价值.这就是大数据相关技术想要解决的问题.因此,大数据已成为过去几年最热门的技术趋势之一.一些非常活跃的开源项目都与大数据

《Spark大数据分析:核心概念、技术及实践》Scala编程

本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第2节,作者穆罕默德·古勒(Mohammed Guller)更多章节内容可以访问"华章计算机"公众号查看. Scala编程 Scala是当前热门的现代编程语言之一.它是编程语言界的凯迪拉克.它是一门强大且优美的语言.学会了它,对你的职业生涯大有裨益. 用不同的编程语言都可以编写大数据应用程序,比如Java.Python.C++.Scala等.Hadoop本身就是用Java编写的.尽管大多数的

《Spark大数据分析:核心概念、技术及实践》Spark Core

本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第节,作者穆罕默德·古勒(Mohammed Guller)更多章节内容可以访问"华章计算机"公众号查看. Spark Core Spark是大数据领域最活跃的开源项目,甚至比Hadoop还要热门.如第1章所述,它被认为是Hadoop的继任者.Spark的使用率大幅增长.很多组织正在用Spark取代Hadoop. 从概念上看,Spark类似于Hadoop,它们都用于处理大数据.它们都能用商用硬

《Spark大数据分析:核心概念、技术及实践》一3.9 共享变量

 本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第3章,第3.9节,作者[美] 穆罕默德·古勒(Mohammed Guller),更多章节内容可以访问"华章计算机"公众号查看. 3.9 共享变量 Spark使用的架构是无共享的.数据分布在集群的各个节点上,每个节点都有自己的CPU.内存和存储资源.没有全局的内存空间用于任务间共享.驱动程序和任务之间通过消息共享数据. 举例来说,如果一个RDD操作的函数参数是驱动程序中变量的引用,Spark会将这

《Spark大数据分析:核心概念、技术及实践》一 第2章 Scala编程

  本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第2章,第2.1节,作者[美] 穆罕默德·古勒(Mohammed Guller),更多章节内容可以访问"华章计算机"公众号查看. 第2章 Scala编程 Scala是当前热门的现代编程语言之一.它是编程语言界的凯迪拉克.它是一门强大且优美的语言.学会了它,对你的职业生涯大有裨益. 用不同的编程语言都可以编写大数据应用程序,比如Java.Python.C++.Scala等.Hadoop本身就是用J

《Spark大数据分析:核心概念、技术及实践》一 1.3 列存储

  本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第1.3节,作者[美] 穆罕默德·古勒(Mohammed Guller),更多章节内容可以访问"华章计算机"公众号查看. 1.3 列存储 数据可以面向行或面向列的格式来存储.在面向行格式中,一行的所有列或字段存储在一起.这里的一行,可以是CSV文件中的一行,或者是数据库表中的一条记录.当数据以面向行格式保存时,第一行后面是第二行,接着是第三行,以此类推.面向行存储对于主要执行数据的CRU

《Spark大数据分析:核心概念、技术及实践》一3.8 Spark作业

 本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第3章,第3.8节,作者[美] 穆罕默德·古勒(Mohammed Guller),更多章节内容可以访问"华章计算机"公众号查看. 3.8 Spark作业 RDD上的转换.操作和缓存方法构成了Spark应用的基础.从本质上说,RDD描述了Spark编程模型.既然我们介绍过了编程模型,那么接下来我们介绍在Spark应用中这些是怎么结合在一起的. 作业指的是Spark将要执行的一些计算,它们将操作的结果

《Spark大数据分析:核心概念、技术及实践》一3.6 惰性操作

 本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第3章,第3.6节,作者[美] 穆罕默德·古勒(Mohammed Guller),更多章节内容可以访问"华章计算机"公众号查看. 3.6 惰性操作 RDD的创建和转换方法都是惰性操作.当应用调用一个返回RDD的方法的时候,Spark并不会立即执行运算.比如,当你使用SparkContext的textFile方法从HDFS中读取文件时,Spark并不会马上从硬盘中读取文件.类似地,RDD转换操作(它

《Spark大数据分析:核心概念、技术及实践》一3.10 总结

 本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第3章,第3.10节,作者[美] 穆罕默德·古勒(Mohammed Guller),更多章节内容可以访问"华章计算机"公众号查看. 3.10 总结 Spark是一个快速.可扩展.可容错且基于内存的集群计算框架.一个Spark应用可以比Hadoop应用快上100倍. Spark不但快速而且它能很方便地使用mapReduce.通过不同语言(包括Java.Python.Scala和R)的易读的API,它

《Spark大数据分析:核心概念、技术及实践》一1.7 总结

  本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第1.7节,作者[美] 穆罕默德·古勒(Mohammed Guller),更多章节内容可以访问"华章计算机"公众号查看. 1.7 总结 近年来数据的指数级增长给许多大数据技术带来了机会.传统的专有产品要么无法处理大数据,要么代价太昂贵.这就为开源大数据技术打开了一扇门.仅仅在过去几年里,这个领域的快速创新已经催生出很多新产品.大数据领域如此之大,以至于可以写一本书专门来介绍各种各样的大数