什么是向量模式
hive.vectorized.execution.enabled表示是否开启向量模式,默认为false,熟悉MapReduce编程的都知道Mapper类,在run()方法中map()方法逐行处理数据,这样操作容易产生更多的Cpu指令和Cpu上下文切换,这样会导致系统性能处理不高。那么有没有方式优化这个操作呢?答案当然有,采用批量的操作方式避免单行处理数据。Hive提供了向量的模式,将一次处理一条数据变为一次处理一万条数据来提高性能。
在hive提供的向量模式,并不是重写了Mapper函数,而是通过实现Inputformat接口,创建VertorizedOrcInputFormat类,来构建一个批量输入的数组。
计算引擎对向量模式支持
目前MapReduce计算引擎支支持Map端的向量化,Tez和Spark计算引擎可以支持Map和Reduce端的向量执行计划。
应用测试
开启向量命令:set hive.vectorized.execution.enabled=true;
测试1默认不开启:
select count(*) from dwd_level_info where dt>='2021-05-01' and dt<='2021-05-31' ;
测试2开启:
set hive.vectorized.execution.enabled=true;
结论
开启向量模式要比不开启向量模式时间减少10%左右。