Apache Parquet 干货分享

《MySql面试专题》

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

《MySql性能优化的21个最佳实践》

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

《MySQL高级知识笔记》

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

关注我,点赞本文给更多有需要的人

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

Parquet 是一种面向分析的、通用的列式存储格式,兼容各种数据处理框架比如 Spark、Hive、Impala 等,同时支持 Avro、Thrift、Protocol Buffers 等数据模型。

Parquet 作为 HDFS 存储格式的事实标准,经常用在离线数仓、OLAP 等场景。本文整理于最近的一次公司内训,主要分四个部分:

1、Parquet 简介

2、架构解析

3、基本操作

4、TPC-DS 基准测试介绍

Parquet 简介

第一部分内容介绍了此次 Parquet 分享的技术背景,行存与列存的区别,以及 Parquet 的特点。

为什么要进行这次 Parquet 讲解?

主要因为 Parquet 在一个项目中重度使用,开发人员对其原理、操作不是很清楚,项目上是使用 Parquet 做离线数仓,计算层使用 Spark SQL 进行离线分析构建企业的标签系统,结果数据落地到 Elasticsearch。

Parquet可以说是一个列式存储系统。关于行存与列存的区别可以简单用下图描述,列存在 IO 方面比行存有很大优势,能够减少扫描数据量。

640?wx_fmt=png

Parquet 的特点概况的说主要体现在:

  • 列裁剪与谓词下推:列裁剪,意思是只读取需要的列,实现高效的列扫描,减少 IO 操作;谓词下推,可以过滤掉不符合条件的数据,只读取需要的数据,进一步减少 IO 操作。

  • 更高效的压缩与编码:因为同一列的数据类型相同,所以可以针对不同列使用更合适的压缩与编码方式,降低磁盘存储空间。

另外,Parquet也是Spark SQL 的默认数据源,可通过参数spark.sql.sources.default 进行配置。

架构解析

1、技术架构

Parquet 是 Apache 的顶级项目,整体技术架构如下图

640?wx_fmt=png

Parquet 主要包含以下 5 个主要模块:

  • parquet-format:定义了所有格式规范,以及由 Thrift 序列化的元数据信息等。

  • parquet-mr:包括多个实现了读写 Parquet 文件的功能模块,并且提供一些和其它组件适配的工具,例如Hadoop Input/Output Formats、Pig loaders、Hive Serde等。

  • parquet-cpp:用于读写 Parquet 文件的 C++ 库。

  • parquet-rs:用于读写 Parquet 文件的 Rust 库。

  • parquet-compatibility:包含验证不同语言之间读写 Parquet 文件的兼容性测试等。

2、数据模型

Parquet 是一种支持嵌套的数据模型,和 Protocol Buffers 的数据模型类似,它的 schema 就是一个嵌套 message。

每个 schema 包含多个字段,每一个字段又可以包含多个字段,每一个字段有三个属性:repetition、type 和 name,其中 repetiton 可以是以下三种:required(出现1次),repeated(出现0次或多次),optional(出现0次或1次)。每一个字段的数据类型可以分成两种:group(复杂类型)和 primitive(基本类型)。一个如下的 Parquet Schema 示意图

640?wx_fmt=png

如果用代码表示就是:

message AddressBook  {

required string owner;

repeated string ownerPhoneNumbers;

repeated group contacts {

required string name;

optional string phoneNumber;

}

}

3、文件格式

下面是 Parquet 官网给出的文件格式图解:

640?wx_fmt=gif

从如上文件结构可以看出,Parquet 格式可以从以下几个部分理解:

  • 文件(File):一个 Parquet 文件,包括数据和元数据,如果在 HDFS 之上,数据就是分散存储在多个 HDFS Block 中。

  • 行组(Row Group):数据在水平方向上按行拆分为多个单元,每个单元就是所谓的 Row Group,即行组。这是一般列式存储都会有的结构设计。每一个行组包含一定的行数,Parquet 读写的时候会将整个行组缓存在内存中,因此更大尺寸的行组将会占用更多的缓存,并且记录占用空间比较小的 Schema 可以在每一个行组中存储更多的行。

  • 列块(Column Chunk):一个行组中的每一列对应的保存在一个列块中。行组中的所有列连续的存储在这个行组文件中,每一个列块中的值都是相同类型的,不同列块可能使用不同的算法进行压缩。

  • 数据页(Data Page):每一个列块划分为多个数据页或者说页,一个页是最小的编码的单位,在同一个列块的不同页可能使用不同的编码方式。

Parquet 文件有三种类型的元数据,分别是file metadata、column(chunk) metadata、page header metadata,每部分元数据包含的信息从上面图解中大概可以得知。

此外,值得说明的是文件 header 部分中的 Magic Number,它的作用主要是为了做文件校验,验证文件是否是一个Parquet文件。

基本操作

1、通过 Hive 创建 Parquet 表

· 标准建表语句。举一个最简单的建表示例,如下:

create table t1 (id int) stored as parquet;

· 通过 TextFile 表创建 Parquet 表。这是离线数仓中的常规操作,假设已经准备好了一张 TextFile 表 catalog_sales,在 hive shell 命令行中演示如下操作:

– 创建parquet表(不压缩)

> drop table if exists catalog_sales_par;

> create table catalog_sales_par stored as parquet as select * from catalog_sales;

最后

分享一些资料给大家,我觉得这些都是很有用的东西,大家也可以跟着来学习,查漏补缺。

《Java高级面试》

《Java高级架构知识》

《算法知识》

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

《Java高级面试》*

[外链图片转存中…(img-Gn5iaIGs-1715810476890)]

《Java高级架构知识》

[外链图片转存中…(img-IYxSiJJv-1715810476891)]

《算法知识》

[外链图片转存中…(img-WCF3Cf3Q-1715810476891)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 16
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值