2、数据模型
Parquet 是一种支持嵌套的数据模型,和 Protocol Buffers 的数据模型类似,它的 schema 就是一个嵌套 message。
每个 schema 包含多个字段,每一个字段又可以包含多个字段,每一个字段有三个属性:repetition、type 和 name,其中 repetiton 可以是以下三种:required(出现1次),repeated(出现0次或多次),optional(出现0次或1次)。每一个字段的数据类型可以分成两种:group(复杂类型)和 primitive(基本类型)。一个如下的 Parquet Schema 示意图
如果用代码表示就是:
message AddressBook {
required string owner;
repeated string ownerPhoneNumbers;
repeated group contacts {
required string name;
optional string phoneNumber;
}
}
3、文件格式
下面是 Parquet 官网给出的文件格式图解:
从如上文件结构可以看出,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;
– 设置parquet为snappy压缩
> set parquet.compression=SNAPPY;
> create table catalog_sales_par_snappy stored as parquet as select * from catalog_sales;
– 设置parquet块大小
> set parquet.block.size=268435456;
> create table catalog_sales_par_snappy2 stored as parquet as select * from catalog_sales;
2、查看 Parquet 文件 Schema
假如现在我们手上有一份 Parquet 文件,但是并没有人告知我们它对应的 schema 信息,这个时候怎么才能快速知道它的 schema 等信息呢?
其实 Parquet 原生提供了一个工具模块,这个工具可以很方便的查看本地或 HDFS 上的 Parquet 文件信息。不仅仅是 schema,还包括其他信息,按照下面使用方法中的帮助提示即可。
下载地址:
https://www.mvnjar.com/org.apache.parquet/parquet-tools/jar.html
使用方法:
#Run from Hadoop
hadoop jar ./parquet-tools-<VERSION>.jar --help
hadoop jar ./parquet-tools-<VERSION>.jar <command> my_parquet_file.par
#Run locally
java jar ./parquet-tools-<VERSION>.jar --help
java jar./parquet-tools-<VERSION>.jar <command> my_parquet_file.par
实际测试:下载 parquet-tools-1.8.0.jar 工具包,上传到集群节点并读取 HDFS 上的一个 Parquet 文件:
TPC-DS 基准测试介绍
TPC-DS 是标准的大数据基准测试,采用星型、雪花型等多维数据模式,提供与真实数据一致的数仓数据以及符合实际的工作负载。提供的数据集包含 24 张表,其中 7 张事实表,17 张维度表,平均每张表含有18列。事实表的表名分别是 catalog_returns、catalog_sales、inventory、promotion、store_returns、store_sales、web_returns、web_sales。工作负载包含 99 个 SQL 查询,覆盖SQL99 和 2003 的核心部分以及 OLAP。
这里提前编译好了一版 TPC-DS 包,并使用它在本地生成 10 GB 的样本数据,命令如下:
$cd ~/training/tpcds/v2.3.0/tools
$nohup ./dsdgen -scale 10 -dir ~/data_10g &
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
总结
总体来说,如果你想转行从事程序员的工作,Java开发一定可以作为你的第一选择。但是不管你选择什么编程语言,提升自己的硬件实力才是拿高薪的唯一手段。
如果你以这份学习路线来学习,你会有一个比较系统化的知识网络,也不至于把知识学习得很零散。我个人是完全不建议刚开始就看《Java编程思想》、《Java核心技术》这些书籍,看完你肯定会放弃学习。建议可以看一些视频来学习,当自己能上手再买这些书看又是非常有收获的事了。
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
完全不建议刚开始就看《Java编程思想》、《Java核心技术》这些书籍,看完你肯定会放弃学习。建议可以看一些视频来学习,当自己能上手再买这些书看又是非常有收获的事了。
[外链图片转存中…(img-UOQL3ogF-1712781434120)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-2KcM5CRX-1712781434121)]