首页 > 其他分享 >为什么我们选择parquet

为什么我们选择parquet

时间:2023-06-06 19:37:04浏览次数:27  
标签:为什么 存储 分区 选择 过滤 parquet spark 压缩


为什么我们选择parquet

前用的hadoop,一直有个疑惑。当时没有细究,昨天突然想到,就又顺着看了下,经过调整,原来在presto中要用1分钟的,现在基本可以秒级别出结果,和presto无关,和文件存储格式有关,hdfs默认存的是文本格式,所以hive,presto,都是在文本格式上做计算,hadoop本身是全表扫,只是分布式而以,所以我们之前用的就是分布式的全表扫而以,没有发挥出数据仓库该有的功能,列式存储,天然擅长分析,千万级别的表,count,sum,group by ,秒出结果!!

说明:此方案已经我们已经运行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采用不同压缩方式的压缩比

为什么我们选择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 分区过滤与列修剪测试如下:

为什么我们选择parquet_spark_02

说明:

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将是一个非常好的选择。

 

标签:为什么,存储,分区,选择,过滤,parquet,spark,压缩
From: https://blog.51cto.com/u_16152230/6427011

相关文章

  • uniapp使用uview组件的indexList写选择城市
    <template><viewclass=""><viewclass="top"><viewclass="search-boxmt10flexalcenter"><viewclass="search-input"><u-search:showAction=&q......
  • 如何选择一家靠谱的广州APP开发公司?广州APP开发公司推荐!
    在这个移动应用市场竞争激烈的时代,选择一家靠谱的广州APP开发公司是实现成功的关键一步。但是广州APP开发公司那么多,如何选择一家靠谱的广州APP开发公司?广州名锐讯动总结了一些建议,帮助您一家能够满足您需求的广州APP开发公司!文章最后还有小编的强烈推荐的广州APP开发公司!1. 评估......
  • 外汇天眼:为什么在外汇市场,你拼命努力却赚不到钱?
    在外汇市场中,许多人投入了大量时间和精力,希望能够通过努力获得可观的收益。然而,他们却不断面对着亏损和挫折,似乎无论如何努力,都无法赚到钱。这引发了一个重要的问题:为什么有些人在外汇市场上努力而失败,而另一些人却能够取得成功呢?首先,成功的外汇交易并非仅仅依赖于努力和投入时间。......
  • 为什么说财务共享中心是财务转型的支撑
    随着数字化在企业中变得越来越重要,以及市场经济环境下行期对降本增效的要求日益增强,财务数字化转型已成为企业提高财务管理规范化和效率的必经之路。在这个过程中,财务转型是不可或缺的一部分,而财务共享中心则是财务转型的重要支撑。设立财务共享中心可以降低企业成本、提高效率和改......
  • 为什么光纤端面要研磨成8度角?
    首先我们先了解一下光纤是如何传导光信号的。光纤裸纤的结构图一般分为三层:纤芯、包层和涂覆层。光纤纤芯和包层是由不同折射率的玻璃组成,中心为高折射率玻璃纤芯(掺锗二氧化硅),中间为低折射率硅玻璃包层(纯二氧化硅)。光以一特定的入射角度射入光纤,在光纤和包层间发生全发射(由于包......
  • 音乐制作宿主软件有哪些,音乐制作宿主如何选择
    音乐是我们抒发感情的一种方式,不同的音乐表达不同的情感。而正因为如此,很多人想创作表达自己情感的音乐。但创作音乐的难点在于普通人并不知道一些专业知识,也不知道专业的音乐编曲软件。那么今天我们就来说一说音乐制作宿主软件有哪些以及音乐制作宿主如何选择。一、音乐宿主制作软......
  • element Cascader级联选择器 选择任意一级选项及点文字即可选中(去掉radio按钮)
    首先放出官网效果:项目需求:将示例的点击radio和点击文字功能结合在一起。可以选择任意一级的内容,直接点击文字即可选中,同时如果有下一级就展示,去掉radio标签。实现思路:通过css将radio标签做成文字框一样大小并且透明覆盖在整个文字上方,点击文字的时候其实是在点击radio标签css......
  • 什么是Socks5代理IP,如何选择Socks5代理IP
      Socks5代理IP是一种常用的网络工具,可以为用户提供更安全和匿名的网络连接。本文将介绍什么是Socks5代理IP以及它的工作原理。同时,我们还将提供一些选择Socks5代理IP的关键因素和指南,以帮助用户在众多选项中做出明智的选择。  在当今互联网时代,网络安全和个人隐私保护变得......
  • Java开发手册中为什么禁止使用isSuccess作为布尔类型变量名以及POJO中基本类型与包装
    场景Java开发手册中关于POJO的布尔类型的变量名的要求是:【强制】POJO类中的任何布尔类型的变量,都不要加is前缀,否则部分框架解析会引起序列化错误。说明:在本文MySQL规约中的建表约定第一条,表达是与否的变量采用is_xxx的命名方式,所以,需要在<resultMap>设置从is_xxx到......
  • 2023-06-05:Redis官方为什么不提供 Windows版本?
    2023-06-05:Redis官方为什么不提供Windows版本?答案2023-06-05:Redis官方没有提供Windows版本有几个原因。1.Redis的开发团队规模较小,由三四名核心开发者组成。他们更加熟悉和习惯Unix-like系统,在这些系统上进行开发和测试可以更高效地进行。然而,提供Windows版本会消耗较多资源,可......