随着越来越多的公司广泛部署 Presto,Presto 不仅用于查询,还用于数据摄取和 ETL 作业。所有很有必要提高 Presto 文件写入的性能,尤其是流行的列文件格式,如 Parquet 和 ORC。本文我们将介绍 Presto 的全新原生的 Parquet writer ,它可以直接将 Presto 的列式数据结构写到 Parquet 的列式格式,最高可提高6倍的吞吐量,并减少 CPU 和内存开销。新的 Native Parquet Writer 是从 Presto 0.237 版本开始引入的,可以参见 #14411;Trino 是在 337 版本默认打开这个功能的 #3400。

Presto 旧的 Parquet Writer 实现

如下图所示,Presto 使用 Hive 旧的 Parquet writer 来写文件:这种旧方法首先遍历 page 中的每个 columnar block 并重建每条记录。然后 Presto 将调用 Hive record writer 将每条记录写到到 Parquet 的 pages 中。写入过程中如果超过缓冲区大小时,旧的 writer 会将内存数据刷新到底层文件系统。

Presto 对内存中的列式数据进行了向量化执行,而 Parquet 是一种列式文件格式。旧的 Parquet writer 增加了不必要的开销,将 Presto 的列式内存数据转换为基于行的记录,然后再进行一次转换以将基于行的记录写入 Parquet 的列式磁盘文件格式。不必要的数据转换会显着增加性能开销,尤其是在涉及复杂数据类型(例如嵌套结构)时。

全新的内置 Parquet Writer

为了提高文件写入效率,克服旧 Parquet writer 的弊端,Presto 社区引入了全新的原生 Parquet writer,它直接将 Presto 的内存数据结构写入 Parquet 的列式文件格式,包括数据值、重复值和定义值。原生 Parquet writer 显着降低了 Presto 的 CPU 和内存开销。

如上图所示,原生 Parquet writer 根据列名和类型构造 Parquet 模式。基本类型(Primitive types)和复杂类型(Struct、Array、Map)转换为相应的 Parquet 类型。使用 schema 信息来创建 Column writers。对于每个 Presto page,内置的 writer 迭代每个 block,将 Presto block 转换为 Parquet 值。相应的 column writer 将字节流写入 Parquet 文件。

性能测试

Presto 有一个 Hive 文件格式基准测试来测试 reader 和 writer 的性能。该测试创建一个包含数百万行的 pages 列表,使用新的 native writer 或旧的 hive record writer 将它们写入到临时文件,然后比较性能。下图显示了三种压缩方案的结果:gzip、snappy 和不压缩。X 轴是各种类型的数据;Y 轴是写入吞吐量。显然,我们可以看到全新的原生 Parquet writer 优于旧的 writer。它可以持续实现 > 20% 的吞吐量改进。原生 Parquet writer 在使用 GZIP 压缩的 BIGINT_SEQUENTIAL 和 BIGINT_RANDOM 方面表现最佳,吞吐量提高高达 650%。写入 TPCH LINEITEM 的所有列时,吞吐量增益约为 50%。

Parquet Writer 我们可以在生产环境中使用 Native Parquet Writer,可以使用以下配置打开这个功能:

# in /catalog/hive.properties
hive.parquet.optimized-writer.enabled=true

本文翻译自:《Native Parquet Writer for Presto》:https://prestodb.io/blog/2021/06/29/native-parquet-writer-for-presto

Presto 全新的 Parquet Writer 介绍相关推荐

  1. Flink大数据实时计算系列-列式存储parquet文件格式介绍、Flink进行rowformat格式文件保存

    Flink大数据实时计算系列-列式存储parquet文件格式介绍 Flink进行rowformat格式文件保存 列式存储parquet文件格式介绍

  2. 还在老一套?STM32使用新KEIL5的IDE,全新开发模式RTE介绍及使用

    Keil新版本出来了,推出了一种全新开发模式RTE框架( Run-Time Environment),更好用了.然而网上的教程资料竟还都是把Keil5当成Keil4来用,直接不使用这个功能.当前正点原 ...

  3. FL Studio 20.9.2官方中文版全新发布更新功能介绍

    FL Studio 20.9.2官方中文版全新版本发布!纯正简体中文支持,全新分频器及频率直方图,音频控制更出色!Mac版新增对苹果M1家族芯片原生支持. 更新版本:20.9.2 支持语言:简体中文/ ...

  4. 淘宝入会页全新升级详细内容介绍{淘宝打单发货接口}

    大家好,我是小编v兔.为突出商家/品牌在消费者第一印象里的淘宝会员特权,强化消费者心智,提升入会效率.淘宝入会页升级了!本次升级改版内容: 1)结构化店铺会员特权表达,形成消费者统一心智 2)核心特权 ...

  5. Presto Iceberg 数据源 + Alluxio 使用以及最新进展介绍

    本文来自 Alluxio 在2021年11月27日举办的 <[Iceberg + Alluxio]助力加速数据通道>在线会议.分享者为王北南和shouwei chen.本次分享主要分两部分 ...

  6. Presto 详细介绍

    1.Presto 简单介绍 1.1 Presto基本概念 Presto是Facebook开源的MPP SQL引擎,旨在填补Hive在速度和灵活性(对接多种数据源)上的不足.相似的SQL on Hado ...

  7. Presto读取Parquet文件的流程

    一.  概论 Presto对ORC和Parquet格式存储的Hive表的处理很为友好,Presto访问这两种格式表时进行了大量的优化,以致得到很为优越的性能. Presto在读取文件上和Spark等其 ...

  8. 全面介绍数砖开发 Delta Lake 的第一篇论文

    今年八月,Delta Lake 的第一篇论文发布了,我当时写了个总体介绍:Delta Lake 第一篇论文发布了,感兴趣的朋友可以先看总体介绍,再来详细了解一下本篇论文.因为篇幅较长,全文超3万字,建 ...

  9. Presto基本概念

    Presto基本概念 Presto是Facebook开源的MPP SQL引擎,旨在填补Hive在速度和灵活性(对接多种数据源)上的不足.相似的SQL on Hadoop竞品还有Impala和Spark ...

最新文章

  1. qt5.6.3下使用firebird
  2. Manjaro 安装笔记
  3. Python 技术篇-用PIL库修改图片透明度实例演示,改变png图片色道为RGBA、RGB
  4. 研究生期间应该如何充实度过
  5. excel统计行数_百万到亿级数据,快速统计查询
  6. 无法删除文件提示找不到指定文件导致文件无法删除的解决方法
  7. 从年末生产故障解锁RocketMQ集群部署的最佳实践
  8. SIR模型的应用(2) - Influence maximization in social networks based on TOPSIS(3)
  9. 【Redis 开发与运维】开发运维的“陷阱”
  10. windows_2008_server无法安装vcredist_x64
  11. yui3:widget
  12. 简单了解机器学习(Machine Learning)
  13. Python最新官方教程中文版,火了!!
  14. 专精特新是什么,为什么要申报“专精特新”中小企业
  15. 2sum,3sum,4sum问题总结
  16. Introductory Combinatorics 5th Solutions Chapter1 summary
  17. h5 android 重力 晃动,H5案例分享:html5重力感应事件(示例代码)
  18. 让zotero支持markdown笔记
  19. 网络爬虫——四种思维导图
  20. 人人都是产品经理读书笔记

热门文章

  1. Java重写hashcode()与equals()方法
  2. 密码设置有关方法:不能相同字母,不能为连续字符
  3. jonathanlewis blogs
  4. [Error] '__comp' cannot be used as a function 求最大数max(x,y,z) 函数
  5. mysql数据迁移到ES
  6. FPGA 20个例程篇:15.VGA显示八种颜色的彩条
  7. scratch节假日课程:妇女节,为女神绘制一朵玫瑰花吧
  8. 扬帆起航,再踏征程(四)
  9. 高中生使用计算机情况调查,关于高中生手机使用情况的调查报告
  10. 微信二次开发接入php代码,适合新手学习的laravel接入微信接口,实现微信公众号二次开发...