网站首页 > 技术文章 正文
今天我们继续HiveSQL执行计划的学习。在学习之前我们先复习之前的知识:
回顾完,开始我们今天的学习-查看SQL的向量化描述信息。
查看SQL的向量化描述信息,我们可以使用explain vectorization这个命令。该命令是在Hive 2.3版本之后新增的功能,用于查看Map阶段或者Reduce阶段在运行过程中是否使用向量化模式。那什么是向量化模式?
向量化模式是Hive的一个特性,在没有引入向量化的执行模式之前,一般的查询操作一次只处理一行,在向量化查询执行时通过一次处理1024行的块来简化系统底层操作,提高了数据的处理性能。向量化模式的开启方式:
set hive.vectorized.execution.enabled = true;
explain vectorization支持的语法:explain vectorization [only | summary | operator | expression | detail]。接下来我们就来说明每个语法的使用。
explain vectorization only命令,表示整个执行计划将只显示向量化模式相关的描述信息,其它非向量化模式的描述都将被隐藏。看下面两个例子。
案例6.9 关闭向量模式的情况下,使用explain vectorization only
--关闭向量模式
set hive.vectorized.execution.enabled=false;
explain vectorization only
select count(1) from test;
输出结果:
PLAN VECTORIZATION:
enabled: false //表示向量模式没有开启
enabledConditionsNotMet: [hive.vectorized.execution.enabled IS false] //开启向量模式的条件不满足,因为hive.vectorized.execution.enabled IS false
上面案例,如果关闭向量化模式,在输出结果中可以看到PLAN VECTORIZATION一节,描述了该模式没有被开启,原因是由于没有满足enabledConditionsNotMet指代的条件。
案例6.10 开启向量模式的情况下,使用explain vectorization only
--开启向量模式
set hive.vectorized.execution.enabled=true;
explain vectorization only
select count(1) from test;
输出如下信息:
PLAN VECTORIZATION:
enabled: true
enabledConditionsMet: [hive.vectorized.execution.enabled IS true]
STAGE DEPENDENCIES:
Stage-1 is a root stage
Stage-0 depends on stages: Stage-1
STAGE PLANS:
Stage: Stage-1
Map Reduce
Execution mode: vectorized
Map Vectorization:
enabled: true
enabledConditionsMet: hive.vectorized.use.vector.serde.deserialize IS true
groupByVectorOutput: true
inputFileFormats: org.apache.hadoop.mapred.TextInputFormat
allNative: false
usesVectorUDFAdaptor: false
vectorized: true
Reduce Vectorization:
enabled: false
enableConditionsMet: hive.vectorized.execution.reduce.enabled IS true
enableConditionsNotMet: hive.execution.engine mr IN [tez, spark] IS false
上面案例中,如果开启了向量化模式,除了有PLAN VECTORIZATION,还包含了STAGE DEPENDENCY和STAGE PLANS两部分的信息。我们在使用explain查看执行计划也看到了有这两部分信息,但是在本案例中不同的是,STAGE PLANS打印的不是Map和Reduce阶段的运行信息,而是两个阶段使用向量化模式的信息。接下来我们就对案例6.10出现的关键字进行解读:我们将Map和Reduce阶段的向量化模式描述信息简化成如下的结构进行解读:
- l Execution Mode:表示当前的执行模式,vectorized当前模式是向量化的模式。
- l Map Vectorization:表示接下来缩进描述段落描述的是Map阶段向量化模式信息。
- l enabled: 表示该关键词所描述阶段是否已经开启向量化模式,true表示开启,false表示关闭。在案例6.10中我们可以显示看到Map Vectorization阶段是ture,Reduce Vectorizaition阶段是false。
- l enabledConditionsMet:表示该关键词所描述阶段,开启向量化模式已经满足的条件。
- l enableConditionsNotMet:表示该关键词所描述阶段,开启向量化模式未满足的条件。
- l groupByVectorOutput:表示该关键词所描述的阶段,分组聚合操作是否开启向量化模式,true表示开启。
- l inputFileFormats:表示该关键所描述的阶段,输入的文件格式。
- l allNative:是否都是本地操作,false表示不是。
了解完主要的关键词,再看下案例6.10的输出结果,整个输出结果可以解读为在Map阶段开启了向量化的执行模式,但是在Reduce阶段没有开启(MapReduce计算引擎不支持)。在Map阶段开启向量化执行模式是因为满足hive.vectorized.use.vector. serde.deserialize IS true这个条件,Reduce阶段没有开启向量化执行模式,是因为除了需要满足hive.vectorized.execution.reduce.enabled IS true,还需要满足hive.execution.engine mr IN [tez, spark]这个条件。
使用explain vectorization summary命令会显示向量化的描述信息和Map/Reduce的执行过程的信息,即打印的信息等同于explain vectorization only和explain共同输出的结果。explain和explain vectorization only的打印信息都已介绍,这里就不在举例说明。
使用explain vectorization operator 命令会显示SQL所有操作的向量化描述信息。这是对explain vectorization only/summary的细化。
案例6.11 使用explain vectorization operator
--开启向量模式
set hive.vectorized.execution.enabled=true;
explain vectorization operator
select count(1) from test;
执行结果:
PLAN VECTORIZATION:
enabled: true
enabledConditionsMet: [hive.vectorized.execution.enabled IS true]
STAGE DEPENDENCIES:
Stage-1 is a root stage
Stage-0 depends on stages: Stage-1
STAGE PLANS:
Stage: Stage-1
Map Reduce
Map Operator Tree:
TableScan
alias: test
Statistics:…//统计信息
TableScan Vectorization://表扫描的向量化描述信息
native: true //读表操作采用本地的向量化表扫描操作
Select Operator
Select Vectorization: //列筛选的向量化描述信息
className: VectorSelectOperator
native: true //在列进行列筛选的时候也用到本地向量化操作
Statistics: …//省略统计信息
Group By Operator
aggregations: count(1)
Group By Vectorization: //分组聚合的向量化描述信息
className: VectorGroupByOperator
vectorOutput: true //在输出的时候用到分组聚合向量化操作
native: false
mode: hash
outputColumnNames: _col0
Statistics: …//省略统计信息
Reduce Output Operator
sort order:
Reduce Sink Vectorization: //reduce output向量化描述信息
className: VectorReduceSinkOperator
native: false
//已满足Reduce Sink使用向量化模式的条件
nativeConditionsMet: hive.vectorized.execution.reducesink.new.enabled IS true, No TopN IS true, No DISTINCT columns IS true, BinarySortableSerDe for keys IS true, LazyBinarySerDe for values IS true
nativeConditionsNotMet: hive.execution.engine mr IN [tez, spark] IS false //使用mapredcue计算引擎不满足使用reduce sink向量化模式的条件,
value expressions: _col0 (type: bigint)
Execution mode: vectorized
Map Vectorization:
…//同explain vectorization only 打印的map阶段向量化描述信息相同
Reduce Vectorization:
... //同explain vectorization only 打印的reduce阶段向量化描述信息相同
Reduce Operator Tree:
Group By Operator
aggregations: count(VALUE._col0)
Group By Vectorization: //分组聚合的向量化描述信息
vectorOutput: false
native: false
mode: mergepartial
outputColumnNames: _col0
Statistics: …//省略统计信息
File Output Operator
…//省略文件输出的信息
从上面的信息,可以看到使用explain vectorization operator能显示每一个操作步骤是否能用上向量化执行模式,能用上向量化模式,已满足的条件条件具体有哪些,不能用上向量化模式,还需要满足的条件有哪些。
使用explain vectorization expression命令能够显示SQL表达式的向量化信息,包括explain vectorization summary和operator的信息,具体表现见案例6.12。
案例6.12 explain vectorization expression命令的使用
set hive.vectorized.execution.enabled=true;
explain vectorization expression
select count(1) from test;
输出结果:
PLAN VECTORIZATION: //同operator打印的PLAN VECTORIZATION一致
STAGE DEPENDENCIES: //同operator打印的STAGE DEPENDENCIES一致
STAGE PLANS:
Stage: Stage-1
Map Reduce
Map Operator Tree:
TableScan
alias: test
Statistics: ...//统计信息
TableScan Vectorization:
native: true
projectedOutputColumns: [0, 1] //表示表扫描后输出有两列
Select Operator
Select Vectorization:
className: VectorSelectOperator
native: true
projectedOutputColumns: [] //表示进行列的筛选,因为整个SQL,也没有表中的任何一个列
Statistics: ...//统计信息
Group By Operator
aggregations: count(1)
Group By Vectorization:
//表示使用VectorUDAFCount的方法进行count计数操作,
//操作完后以bigint的类型输出
aggregators: VectorUDAFCount(ConstantVectorExpression(val 1) -> 2:long) -> bigint
className: VectorGroupByOperator
vectorOutput: true
native: false
projectedOutputColumns: [0] //最终只输出一列
mode: hash
outputColumnNames: _col0
Statistics: ...//省略统计信息的打印
Reduce Output Operator
.... // 同operator打印的Reduce Output Operator信息一致
Execution mode: vectorized
Map Vectorization:
...//同operator打印的Map Vectorization信息一致
Reduce Vectorization:
...//同operator打印的Reduce Vectorization信息一致
Reduce Operator Tree:
Group By Operator
aggregations: count(VALUE._col0)
Group By Vectorization:
vectorOutput: false
native: false
projectedOutputColumns: null //没有进行列的筛选,因为reduce阶段没有打开向量化的执行模式,所以这边向量化描述信息显示为null
mode: mergepartial
outputColumnNames: _col0
Statistics: ...//省略统计信息
File Output Operator
...//省略打印的输出信息
从上面的信息,可以看到在每个Vectorization的描述信息,会新增表示式相关的向量化描述信息,例如map阶段Group By Vectorization中的aggregators。
explain vectorization detail命令能够显示更加详细的向量化信息,这些信息包括explain vectorization summary/operator/expression等上面我们介绍的所有信息。
猜你喜欢
- 2024-10-12 大数据分析工具——hive入门 hive数据分析的一般流程是什么
- 2024-10-12 019Hive基本使用03 019Hive基本使用03 #liaoit
- 2024-10-12 手把手教你搭建Hive环境 搭建hive集群
- 2024-10-12 0474-如何使用SQL Developer访问Hive
- 2024-10-12 大数据之-HIVE入门(十四) php hive大数据处理
- 2024-10-12 Hive 迁移参考方案及测试(下) hive表迁移
- 2024-10-12 0263-Hive2.2.0如何与CDH集群中的Spark1.6集成
- 2024-10-12 如何在HUE上通过oozie调用Hive SQL工作流
- 2024-10-12 百度二面:你做过哪些Hive调优啊? hive调优与参数设置
- 2024-10-12 HiveSQL:如何从给定的日期中减去指定数量的天数?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)