一. 概论
Presto对ORC和Parquet格式存储的Hive表的处理很为友好,Presto访问这两种格式表时进行了大量的优化,以致得到很为优越的性能。 Presto在读取文件上和Spark等其他数据处理引擎组件最为与众不同是Presto读取ORC/Parquet格式表并没有采用传统的MR方式,而是采用了自己读取和切分和转换文件的方式。这样很容易实现自己控制多worker多并发读取,多pipeline同时加工,也能很容易进行列裁剪分区裁剪等读取优化,可以有效避免读取数据成为数据处理的性能瓶颈。
本文主要介绍了在Presto读取Parquet文件的流程以及介绍在Presto中是如何一步步将Parquet文件组装成自己数据加工处理的数据结构Page的。
二. Presto读取Parquet文件的总体流程

三. Presto处理Parquet文件的代码走读
ParquetPageSource
getNextPage
blocks[fieldId] = new LazyBlock(batchSize, new ParquetBlockLoader(field.get()));
ParquetBlockLoader::load
parquetReader.readBlock(field)
&nb

本文深入探讨了Presto处理ORC和Parquet格式的Hive表的优化机制,特别是其在读取Parquet文件时的独特方式。不同于传统的MapReduce,Presto采用自定义的读取和转换机制,支持多worker并发读取和列裁剪等优化,避免了数据读取成为性能瓶颈。文章详细阐述了Presto读取Parquet文件的流程,从ParquetPageSource到Page的构建,通过ParquetBlockLoader和各种ColumnReader将Parquet原始数据转换为Presto的数据结构Page,实现了高效的数据处理。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



