大数据技术架构(组件)——Hive:流程剖析1

1.1、流程剖析

大致流程:

1、客户端连接到HS2(HiveServer2,目前大多数通过beeline形式连接,Hive Cli模式相对较重,且直接略过授权访问元数据),建立会话

2、提交sql,通过Driver进行编译、解析、优化逻辑计划,生成物理计划

3、对物理计划进行优化,并提交到执行引擎进行计算

4、返回结果

细节流程:

1、客户端和HiveServer2建立连接,创建会话

2、提交查询或者DDL,转交到Driver进行处理

3、Driver内部会通过Parser对语句进行解析,校验语法是否正确

4、然后通过Compiler编译器对语句进行编译,生成AST Tree

5、SemanticAnalyzer会遍历AST Tree,进一步进行语义分析,这个时候会和Hive MetaStore进行通信获取Schema信息,抽象成QueryBlock,逻辑计划生成器会遍历QueryBlock,翻译成Operator(计算抽象出来的算子)生成OperatorTree,这个时候是未优化的逻辑计划

6、Optimizer会对逻辑计划进行优化,如进行谓词下推、常量值替换、列裁剪等操作,得到优化后的逻辑计划。

7、SemanticAnalyzer会对逻辑计划进行处理,通过TaskCompiler生成物理执行计划TaskTree。

8、TaskCompiler会对物理计划进行优化,然后根据底层不同的引擎进行提交执行。

1.1.1、Analyze Sql

语法:

EXPLAIN [EXTENDED|CBO AST|DEPENDENCYAUTHORIZATION LOCKS VECTORIZATION ANALYZE] query

版本支持:

Hive0.14.0支持AUTHORIZATION;[HIVE-5961]

Hive2.3.0支持VECTORIZATION;[HIVE-11394]

Hive3.2.0支持LOCKS;[HIVE-17683]

Explain结果总共分为三个部分:

1、对应查询的抽象语法树 AST

2、每个计划阶段Stage之间的依赖关系

3、每个计划阶段的描述(可能是map/reduce,也可能是操作元数据或者文件操作)

聚合操作分析示例:

EXPLAIN FROM SrC INSERT OVERMRITE TABLE dest g1 SELECT src.key, sum(substr(src.value,4)) GROUP BY src.key;

聚合操作分析输出信息:

STAGE DEPENDENCIES: --每个stage之间的依赖关系
    stage-1 is a root stage --Stage1是根阶段
    stage-2 depends on stages: stage-1 --当Stage1执行完成后才会执行stage2
    stage-0 depends on stages: stage-2 --当stage2执行完成后才会执行stage0
STAGE PLANS: --具体stage信息
    stage: stage-1
        Map Reduce--MapReduce阶段
            Alias ->Map Operator Tree: --map阶段从一个特定表或者上一个map/reduce阶段结果中读取
                src --表名
                    Reduce Output Operator
                        key expressions:
                            expr: key
                            type: string
                        sort order: +
                        Map-reduce partition columns:
                            expr: rand()
                            type: double
                        tag: -1
                        value expressions:
                            expr: substr(value, 4)
                            type: string
            Reduce Operator Tree: --执行部分聚合
                Group By Operator
                    aggregations:
                        expr: sum(UDFToDouble(VALUE.0))
                    keys:
                        expr: KEY.0
                        type: string
                    mode: partial1
                    File Output Operator
                        compressed: false
                        table:
                            input format: org.apache.hadoop.mapred.SequenceFileInputFormat
                            output format: org.apache.hadoop.mapred.SequenceFileOutputFormat
                            name: binary table
......

依赖分析示例:

EXPLAIN DEPENDENCY SELECT key, count(1) FROM srcpart WHERE dS IS NOT NULL GROUP BY key

依赖分析结果:

{
    "input_partitions": [
        {
            "partitionName": "default<at:var at:name=\"srcpart\"/>ds=2008-04-08/hr=11"
        },
        {
            "partitionName": "default<at:varat;name=\"srcpart\"/>ds=2008-04-08/hr=12"
        },
        {
            "partitionName": "default<at:varat;name=\"srcpart\"/>ds=2008-04-09/hr=11"
        },
        {
            "pantitionName": "default<at:var at:name= \"srcpart\"/>ds=2008-04-09/hr=12"
        }
    ],
    "input_tables": [
        {
            "tablename": "default@srcpart",
            "tabletype": "MANAGED_TABLE"
        }
    ]
}

分析实际数据量示例:

explain analyze select t1.user id,t2.visit url from wedw_tmp.tmp_url info t1 full join wedw_tmp.tmp_url info t2 on t1.user_id = t2.user_id;

分析实际数量结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mylife512

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值