大数据中的文件格式:简短的教育计划

大数据中的文件格式:简短的教育计划
Remarin 的天气神

团队 Mail.ru 云解决方案 报价 文章翻译 来自 Clairvoyant 的工程师 Rahul Bhatia 介绍了大数据中有哪些文件格式、Hadoop 格式最常见的特征是什么以及哪种格式更好用。

为什么需要不同的文件格式?

支持 HDFS 的应用程序(例如 MapReduce 和 Spark)的主要性能瓶颈是搜索、读取和写入数据所需的时间。 如果我们有一个不断发展的模式而不是固定的模式,或者存在一些存储限制,那么管理大型数据集的难度就会使这些问题变得更加复杂。

处理大数据会增加存储子系统的负载 - Hadoop 冗余存储数据以实现容错。 除了磁盘之外,还加载处理器、网络、输入/输出系统等。 随着数据量的增长,处理和存储数据的成本也随之增加。

各种文件格式在 Hadoop的 正是为了解决这些问题而发明的。 选择适当的文件格式可以带来一些显着的好处:

  1. 更快的阅读时间。
  2. 更快的录音时间。
  3. 共享文件。
  4. 支持模式演化。
  5. 扩展的压缩支持。

一些文件格式用于一般用途,另一些文件格式用于更特定的用途,还有一些文件格式旨在满足特定的数据特征。 所以选择范围真的是相当大。

Avro 文件格式

数据序列化 Avro 被广泛使用 - 它 基于字符串,即Hadoop中的一种字符串数据存储格式。 它以 JSON 格式存储架构,使其易于任何程序读取和解释。 数据本身是二进制格式,紧凑且高效。

Avro 的序列化系统是语言中立的。 文件可以用多种语言处理,目前有 C、C++、C#、Java、Python 和 Ruby。

Avro 的一个关键特性是它对随时间变化(即演化)的数据模式的强大支持。 Avro 理解架构更改 - 删除、添加或更改字段。

Avro 支持多种数据结构。 例如,您可以创建包含数组、枚举类型和子记录的记录。

大数据中的文件格式:简短的教育计划
此格式非常适合写入数据湖的着陆(过渡)区域(数据湖,或数据湖 - 除了直接数据源之外还用于存储各种类型数据的实例集合)。

因此,这种格式最适合写入数据湖的着陆区,原因如下:

  1. 来自该区域的数据通常会被完整读取,以便下游系统进一步处理 - 在这种情况下,基于行的格式更加高效。
  2. 下游系统可以轻松地从文件中检索模式表,无需将模式单独存储在外部元存储中。
  3. 对原始模式的任何更改都很容易处理(模式演变)。

镶木地板文件格式

Parquet 是 Hadoop 的开源文件格式,用于存储 平面柱状格式的嵌套数据结构.

与传统的行方式相比,Parquet 在存储和性能方面更加高效。

这对于从宽(多列)表中读取特定列的查询特别有用。 由于采用了文件格式,因此仅读取必要的列,因此 I/O 保持在最低限度。

一个小题外话和解释:为了更好地理解 Hadoop 中的 Parquet 文件格式,让我们看看什么是基于列(即柱状)格式。 这种格式将每列的相似值存储在一起。

例如,该记录包括 ID、姓名和部门字段。 在这种情况下,所有 ID 列值将存储在一起,Name 列值也将存储在一起,依此类推。 该表将如下所示:

ID
名字
问题类型

1
emp1
d1

2
emp2
d2

3
emp3
d3

以字符串格式保存数据如下:

1
emp1
d1
2
emp2
d2
3
emp3
d3

在柱状文件格式中,相同的数据将像这样保存:

1
2
3
emp1
emp2
emp3
d1
d2
d3

当您需要从表中查询多个列时,列式格式会更有效。 它只会读取所需的列,因为它们是相邻的。 通过这种方式,I/O 操作保持在最低限度。

例如,您只需要 NAME 列。 在 字符串格式 数据集中的每条记录都需要加载,按字段解析,然后提取NAME数据。 列格式允许您直接深入到名称列,因为该列的所有值都存储在一起。 您不必扫描整个录音。

因此,列式格式提高了查询性能,因为它需要更少的查找时间来获取所需的列,并且减少了 I/O 操作的数量,因为只读取所需的列。

独特的功能之一 实木复合地板 在这种格式下它可以 使用嵌套结构存储数据。 这意味着在 Parquet 文件中,甚至可以单独读取嵌套字段,而无需读取嵌套结构中的所有字段。 Parquet 使用分解和组装算法来存储嵌套结构。

大数据中的文件格式:简短的教育计划
要了解 Hadoop 中的 Parquet 文件格式,您需要了解以下术语:

  1. 行组 (行组):将数据逻辑水平划分为行。 行组由数据集中每列的片段组成。
  2. 柱碎片 (列块):特定列的片段。 这些列片段位于特定的行组中,并保证在文件中是连续的。
  3. (page):列片段被分成一页接一页地写入的页面。 这些页面有一个共同的标题,因此您在阅读时可以跳过不必要的页面。

大数据中的文件格式:简短的教育计划
这里的标题只包含神奇的数字 PAR1 (4 个字节),将文件标识为 Parquet 文件。

页脚内容如下:

  1. 包含每列元数据的起始坐标的文件元数据。 读取时,必须首先读取文件的元数据以找到所有感兴趣的列片段。 然后应按顺序读取列部分。 其他元数据包括格式版本、架构和任何其他键值对。
  2. 元数据长度(4 字节)。
  3. 幻数 PAR1 (4字节)。

ORC 文件格式

优化行列文件格式 (优化行列, ORC)提供了一种非常有效的数据存储方式,旨在克服其他格式的限制。 以完美紧凑的形式存储数据,允许您跳过不必要的细节 - 无需构建大型、复杂或手动维护的索引。

ORC格式的优点:

  1. 每个任务的输出都是一个文件,减少了NameNode(名称节点)的负载。
  2. 支持 Hive 数据类型,包括 DateTime、decimal 和复杂数据类型(struct、list、map 和 union)。
  3. 不同RecordReader进程同时读取同一个文件。
  4. 能够在不扫描标记的情况下分割文件。
  5. 根据文件页脚中的信息估计读/写进程的最大可能堆内存分配。
  6. 元数据以 Protocol Buffers 二进制序列化格式存储,允许添加和删除字段。

大数据中的文件格式:简短的教育计划
ORC 将字符串集合存储在单个文件中,并且在集合中,字符串数据以列式格式存储。

ORC 文件在文件的页脚中存储称为条带的行组和支持信息。 文件末尾的 Postscript 包含压缩参数和压缩页脚的大小。

默认条带大小为 250 MB。 由于条带如此之大,从 HDFS 读取数据的效率更高:在大的连续块中。

文件页脚记录了文件中的泳道列表、每泳道的行数以及每列的数据类型。 每列的计数、最小值、最大值和总和的结果值也写在那里。

片段的页脚包含流位置的目录。

扫描表时使用行数据。

索引数据包括每列的最小值和最大值以及每列中行的位置。 ORC 索引仅用于选择条带和行组,而不用于回答查询。

不同文件格式的比较

Avro 与 Parquet 相比

  1. Avro 是一种行存储格式,而 Parquet 将数据存储在列中。
  2. Parquet 更适合分析查询,这意味着读取操作和查询数据比写入更高效。
  3. Avro 中的写入操作比 Parquet 中的执行效率更高。
  4. Avro 更成熟地处理电路演进。 Parquet仅支持模式添加,而Avro支持多功能演化,即添加或更改列。
  5. Parquet 非常适合查询多列表中的列子集。 Avro 适用于我们查询所有列的 ETL 操作。

ORC 与 Parquet

  1. Parquet 可以更好地存储嵌套数据。
  2. ORC 更适合谓词下推。
  3. ORC 支持 ACID 属性。
  4. ORC 可以更好地压缩数据。

关于该主题还可以阅读什么:

  1. 云端大数据分析:公司如何成为数据导向型企业.
  2. 数据库模式简明指南.
  3. 我们关于数字化转型的电报频道.

来源: habr.com

添加评论