0496-使用Parquet矢量化为Hive加速

本文介绍了Apache Hive利用Parquet矢量化技术提升查询性能的方法,通过处理一批行而非一行数据,利用CPU的SIMD指令集,减少虚函数调用,提高查询效率。测试结果显示,在CDH6.0上启用Parquet矢量化,可以将查询性能提升约26.5%,尤其在处理TPC-DS查询时效果显著。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 背景

Apache Hive是Hadoop之上最流行的数据仓库引擎。提升Hive性能的功能可以显著提高集群资源的整体利用率。Hive使用一连串的运算符来执行查询。这些运算符包括MapTask,ReduceTask或SparkTask,它们在查询执行计划中进行调度。以前这些运算符被设计为每次处理一行数据。一次处理一行导致运算符效率不高,因为需要许多虚函数调用来处理扫描的每一行。另外,如果运算符一次只处理一行,不能利用CPU的SIMD指令集(例如SSE或AVX)进行加速。本文主要介绍如何在Hive中利用基于SIMD的优化,使Apache Parquet表的查询运行效率提升26%以上。

2 CPU矢量化

矢量化是将算法从一次操作一个值转换为一次操作一组值的过程。现在的CPU一般都直接支持矢量操作,即使用单个指令处理多个数据点(SIMD)。

上图显示了使用scalar和vector指令添加两组值的简单示例

例如,支持AVX-512指令集的CPU提供512位寄存器,与16个标量指令中的相同计算相比,它可以保存多达16个32位的值并执行简单操作如在一条指令中执行加法运算。在此示例中,矢量化(vectorized)执行将比标量(scalar )执行快16倍。

3 Hive中的矢量化

为了利用这些优化,Hive在HIVE-4160中引入了矢量化查询执行,参考:

https://issues.apache.org/jira/browse/HIVE-4160

矢量化查

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值