为什么我们选择parquet

说明:此方案已经我们已经运行1年。

1、场景描述:

我们对客户登录日志做了数据仓库,但实际业务使用中有一些个共同点,

A  需要关联维度表

B  最终仅取某个产品一段时间内的数据

C 只关注其中极少的字段

基于以上业务,我们决定每天定时统一关联维度表,对关联后的数据进行另外存储。各个业务直接使用关联后的数据进行离线计算。

2、择parquet的外部因素

在各种列存储中,我们最终选择parquet的原因有许多。除了parquet自身的优点,还有以下因素

A、公司当时已经上线spark 集群,而spark天然支持parquet,并为其推荐的存储格式(默认存储为parquet)。

B、hive 支持parquet格式存储,如果以后使用hiveql 进行查询,也完全兼容。

3、选择parquet的内在原因

下面通过对比parquet和csv,说说parquet自身都有哪些优势

csv在hdfs上存储的大小与实际文件大小一样。若考虑副本,则为实际文件大小*副本数目。(若没有压缩)

3.1 parquet采用不同压缩方式的压缩比

说明:原始日志大小为214G左右,120+字段

采用csv(非压缩模式)几乎没有压缩。

采用parquet 非压缩模式、gzip、snappy格式压缩后分别为17.4G、8.0G、11G,达到的压缩比分别是:12、27、19。

若我们在hdfs上存储3份,压缩比仍达到4、9、6倍

3.2 分区过滤与列修剪

3.2.1分区过滤

parquet结合spark,可以完美的实现支持分区过滤。如,需要某个产品某段时间的数据,则hdfs只取这个文件夹。

spark sql、rdd 等的filter、where关键字均能达到分区过滤的效果。

使用spark的partitionBy 可以实现分区,若传入多个参数,则创建多级分区。第一个字段作为一级分区,第二个字段作为2级分区。。。。。

3.2.2 列修剪

列修剪:其实说简单点就是我们要取回的那些列的数据。

当取得列越少,速度越快。当取所有列的数据时,比如我们的120列数据,这时效率将极低。同时,也就失去了使用parquet的意义。

3.2.3 分区过滤与列修剪测试如下:

说明:

A、task数、input值、耗时均为spark web ui上的真实数据。

B、之所以没有验证csv进行对比,是因为当200多G,每条记录为120字段时,csv读取一个字段算个count就直接lost excuter了。

C、注意:为避免自动优化,我们直接打印了每条记录每个字段的值。(以上耗时估计有多部分是耗在这里了)

D、通过上图对比可以发现:

  • 当我们取出所有记录时,三种压缩方式耗时差别不大。耗时大概7分钟。
  • 当我们仅取出某一天时,parquet的分区过滤优势便显示出来。仅为6分之一左右。貌似当时全量为七八天左右吧。
  • 当我们仅取某一天的一个字段时,时间将再次缩短。这时,硬盘将只扫描该列所在rowgroup的柱面。大大节省IO。如有兴趣,可以参考深入分析Parquet列式存储格式

E、测试时请开启filterpushdown功能

4、结论

  • parquet的gzip的压缩比率最高,若不考虑备份可以达到27倍。可能这也是spar parquet默认采用gzip压缩的原因吧。
  • 分区过滤和列修剪可以帮助我们大幅节省磁盘IO。以减轻对服务器的压力。
  • 如果你的数据字段非常多,但实际应用中,每个业务仅读取其中少量字段,parquet将是一个非常好的选择。
时间: 2024-08-02 10:57:37

为什么我们选择parquet的相关文章

Parquet性能测试调优及其优化建议

 Parquet性能测试调优及其优化建议 一.我们为什么选择parquet 1.选择parquet的外部因素 (1) 我们已经在使用spark集群,spark原本就支持parquet,并推荐其存储格式(默认存储为parquet): (2) hive支持parquet格式存储,使用HiveSql查询也是完全兼容的. 2.选择parquet的本身原因 (1) parquet由于每一列的成员都是同构的,可以针对不同的数据类型使用更高效的数据压缩算法,进一步减小I/O.CSV格式一般不进行压缩,通过pa

大数据平台架构组件选择与运用场景

一.大数据平台 大数据在工作中的应用有三种: 与决策相关,数据科学的领域,了解统计学.算法,这是数据科学家的范畴: 与工程相关,如何实施.如何实现.解决什么业务问题,这是数据工程师的工作. 数据工程师在业务和数据科学家之间搭建起实践的桥梁.本文要分享的大数据平台架构技术选型及场景运用偏向于工程方面. 如图所示,大数据平台第一个要素就是数据源,我们要处理的数据源往往是在业务系统上,数据分析的时候可能不会直接对业务的数据源进行处理,而是先经过数据采集.数据存储,之后才是数据分析和数据处理. 从整个大

大数据平台架构技术选型与场景运用

一.大数据平台 大数据在工作中的应用有三种: 与业务相关,比如用户画像.风险控制等: 与决策相关,数据科学的领域,了解统计学.算法,这是数据科学家的范畴: 与工程相关,如何实施.如何实现.解决什么业务问题,这是数据工程师的工作. 数据工程师在业务和数据科学家之间搭建起实践的桥梁.本文要分享的大数据平台架构技术选型及场景运用偏向于工程方面. 如图所示,大数据平台第一个要素就是数据源,我们要处理的数据源往往是在业务系统上,数据分析的时候可能不会直接对业务的数据源进行处理,而是先经过数据采集.数据存储

Parquet与ORC:高性能列式存储格式(收藏)

背景 随着大数据时代的到来,越来越多的数据流向了Hadoop生态圈,同时对于能够快速的从TB甚至PB级别的数据中获取有价值的数据对于一个产品和公司来说更加重要,在Hadoop生态圈的快速发展过程中,涌现了一批开源的数据分析引擎,例如Hive.Spark SQL.Impala.Presto等,同时也产生了多个高性能的列式存储格式,例如RCFile.ORC.Parquet等,本文主要从实现的角度上对比分析ORC和Parquet两种典型的列存格式,并对它们做了相应的对比测试. 列式存储 由于OLAP查

Parquet与ORC性能测试报告

一.环境说明 Hadoop集群:使用测试Hadoop集群,节点: hadoop230 hadoop231 hadoop232 hadoop233 这几台机器配置一样,具体参数可参考如下: CPU数量:2个 CPU线程数:32个 内存:128GB 磁盘:48TB 使用测试机群上的同一个队列,使用整个集群的资源,所有的查询都是无并发的. Hive使用官方的hive 1.2.1版本,使用hiveserver2的方式启动,使用本机的mysql存储元数据. 二.测试数据生成 测试数据为TPC-DS基准测试

parquet文件格式——本质上是将多个rows作为一个chunk,同一个chunk里每一个单独的column使用列存储格式,这样获取某一row数据时候不需要跨机器获取

Parquet是Twitter贡献给开源社区的一个列数据存储格式,采用和Dremel相同的文件存储算法,支持树形结构存储和基于列的访问.Cloudera Impala也将使用Parquet作为底层的存储格式.在很多大数据的应用场景下面,比如电信行业,具有一定规则的数据,字段很多,但是每次查询仅仅针对其中少数的几个字段,这个时候列式存储是极佳的选择.优势: 使用列式存储,一列的值都是同质的,从而带来了更高的压缩比:对于在hadoop集群上的大数据量来说,使用parquet可以节省大量空间:可以提高

Parquet and ORC

http://dongxicheng.org/mapreduce-nextgen/columnar-storage-parquet-and-orc/ 相比传统的行式存储引擎,列式存储引擎具有更高的压缩比,更少的IO操作而备受青睐(注:列式存储不是万能高效的,很多场景下行式存储仍更加高效),尤其是在数据列(column)数很多,但每次操作仅针对若干列的情景,列式存储引擎的性价比更高. 在互联网大数据应用场景下,大部分情况下,数据量很大且数据字段数目很多,但每次查询数据只针对其中的少数几行,这时候列

Parquet与ORC:高性能列式存储格式

背景 随着大数据时代的到来,越来越多的数据流向了Hadoop生态圈,同时对于能够快速的从TB甚至PB级别的数据中获取有价值的数据对于一个产品和公司来说更加重要,在Hadoop生态圈的快速发展过程中,涌现了一批开源的数据分析引擎,例如Hive.Spark SQL.Impala.Presto等,同时也产生了多个高性能的列式存储格式,例如RCFile.ORC.Parquet等,本文主要从实现的角度上对比分析ORC和Parquet两种典型的列存格式,并对它们做了相应的对比测试. 列式存储 由于OLAP查

Hive ORC和Parquet

相比传统数据库的行式存储引擎,列式存储引擎具有更高的压缩比,更少的IO操作,尤其是在数据列很多,但每次操作仅针对若干列进行查询和计算的情景,列式存储引擎的性价比更高. 目前在开源实现中,最有名的列式存储引擎莫过于Parquet和ORC,并且他们都是Apache的顶级项目,在数据存储引擎方面发挥着重要的作用. 本文将重点讲解ORC文件存储格式,Parquet暂不深入说明,后续抽时间整理. 1.Apache Parquet 源自于google Dremel系统,Parquet相当于GoogleDre