文档章节

Hive的执行过程

j
 jecslee
发布于 2014/05/28 11:49
字数 580
阅读 110
收藏 0

3、Hive的执行过程

3.1 Hive的执行过程

通过CLI,GUI或者thrift Server接口进来,

1)生成执行计划

2)请求执行给Driver(driver进行词法解析),之后有antlr生成词法树

3)Driver获取执行计划,compiler完成

4)Driver从metaStore获取metaData

5)metaStore返回metaData给compiler

6)通过对metaStore分析返回对应的计划给Driver

7)Driver将执行计划交给执行引擎(Execution Engine)

8)执行器DDL中的元数据从METASTORE中获取

9)执行器请求Hadoop中的job tracker来执行job来完成对应的查询服务,在整个过程中依赖hadoop中的MapReduce

10)执行完毕后将结果返回给执行引擎

11)执行请求返回结果给Driver

12)Driver将查询结果返回给用户

  3.2 hive执行过程的示意图如下

 

3.3 hive 执行过程中的语法数,获取语法树是需要使用explan命令:

EXPLAIN SELECT ln,count(distinct split(tma,'[.]')[0],'.',split(tma,'[.]')[1],'.',split(tma,'[.]')[2])
FROM raw_kafka_event_pageview_dt0
WHERE  l_date='2013-11-13'
AND customer='Cjinrongjie'
AND parse_url(ep,'HOST') like '%jrj.com.cn%'
GROUP BY ln limit 10;

该条查询语句生成的语法树如下:

ABSTRACT SYNTAX TREE:
  (
  TOK_QUERY (
      TOK_FROM (
          TOK_TABREF (
TOK_TABNAME raw_kafka_event_pageview_dt0)))
  (TOK_INSERT (
      TOK_DESTINATION (
             TOK_DIR TOK_TMP_FILE))
  (TOK_SELECT (
        TOK_SELEXPR (TOK_TABLE_OR_COL ln))
            (TOK_SELEXPR (
                 TOK_FUNCTIONDI count ([(TOK_FUNCTION split (TOK_TABLE_OR_COL tma) '[.]') 0) '.'
     ([ (TOK_FUNCTION split (TOK_TABLE_OR_COL tma) '[.]') 1) '.'
       ([ (TOK_FUNCTION split (TOK_TABLE_OR_COL tma) '[.]') 2))))
  (TOK_WHERE (
         AND (
              AND (= (TOK_TABLE_OR_COL l_date) '2013-11-13')
                 (= (TOK_TABLE_OR_COL customer) 'Cjinrongjie'))
                      (like (TOK_FUNCTION parse_url (TOK_TABLE_OR_COL ep) 'HOST') '%jrj.com.cn%')))
  (TOK_GROUPBY (TOK_TABLE_OR_COL ln))
  (TOK_LIMIT 10)))

STAGE DEPENDENCIES:
  Stage-1 is a root stage
  Stage-0 is a root stage

STAGE PLANS:
  Stage: Stage-1
    Map Reduce
      Alias -> Map Operator Tree:
        raw_kafka_event_pageview_dt0
          TableScan
            alias: raw_kafka_event_pageview_dt0
            Filter Operator
              predicate:
                  expr: ((customer = 'Cjinrongjie') and (parse_url(ep, 'HOST') like '%jrj.com.cn%'))
                  type: boolean
              Select Operator
                expressions:
                      expr: ln
                      type: string
                      expr: tma
                      type: string
                outputColumnNames: ln, tma
                Group By Operator
                  aggregations:
                        expr: count(DISTINCT split(tma, '[.]')[0], '.', split(tma, '[.]')[1], '.', split(tma, '[.]')[2])
                  bucketGroup: false
                  keys:
                        expr: ln
                        type: string
                        expr: split(tma, '[.]')[0]
                        type: string
                        expr: '.'
                        type: string
                        expr: split(tma, '[.]')[1]
                        type: string
                        expr: split(tma, '[.]')[2]
                        type: string
                  mode: hash
                  outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5
                  Reduce Output Operator
                    key expressions:
                          expr: _col0
                          type: string
                          expr: _col1
                          type: string
                          expr: _col2
                          type: string
                          expr: _col3
                          type: string
                          expr: _col4
                          type: string
                    sort order: +++++
                    Map-reduce partition columns:
                          expr: _col0
                          type: string
                    tag: -1
                    value expressions:
                          expr: _col5
                          type: bigint
      Reduce Operator Tree:
        Group By Operator
          aggregations:
                expr: count(DISTINCT KEY._col1:0._col0, KEY._col1:0._col1, KEY._col1:0._col2, KEY._col1:0._col3, KEY._col1:0._col4)
          bucketGroup: false
          keys:
                expr: KEY._col0
                type: string
          mode: mergepartial
          outputColumnNames: _col0, _col1
          Select Operator
            expressions:
                  expr: _col0
                  type: string
                  expr: _col1
                  type: bigint
            outputColumnNames: _col0, _col1
            Limit
              File Output Operator
                compressed: false
                GlobalTableId: 0
                table:
                    input format: org.apache.hadoop.mapred.TextInputFormat
                    output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat

  Stage: Stage-0
    Fetch Operator


© 著作权归作者所有

上一篇: hive集成hbase
下一篇: hive集成hbase
j
粉丝 2
博文 2
码字总数 856
作品 0
昌平
程序员
私信 提问
【十八掌●武功篇】第十掌:Hive之原理与优化

这一篇博文是【大数据技术●降龙十八掌】系列文章的其中一篇,点击查看目录:大数据技术●降龙十八掌 小系列列表 【十八掌●武功篇】第十掌:Hive之基本语法 【十八掌●武功篇】第十掌:Hiv...

chybin500
2017/11/17
0
0
Hive的sort by, order by, distribute by, cluster by区别?

Hive的order by语句和其他的SQL语言的定义是一样的,其会对查询结果集执行一个全局排序。这也就是说会有一个所有的数据都通过一个reducer进行处理的过程。对于大数据集,这个过程可能会消耗太...

无精疯
2018/04/22
75
0
Hadoop(5)--hive

在Hadoop的存储处理方面提供了两种不同的机制,一种是之前介绍过的Hbase,另外一种就是Hive,有关于Hbase,它是一种nosql数据库的一种,是一种数据库,基于分布式的列式存储,适合海量数据的...

spark009
2018/08/14
0
0
【apache-hive-1.2.1】local mr

在hive中运行sql有很多是比较小的SQL,数据量小,计算量小。这些比较小的SQL 如果也采用分布式的方式来执行,那么就得不偿失,因为SQL真正执行的时间可能只有10s,但是分布式任务生成的其他过...

HarryWu
2016/01/25
125
0
Hive配置日志文件并测试

配置日志并测试 进入到hive目录修改日志文件名称 在hive目录下创建logs目录 修改hive-log4j.properties配置文件hive.log.dir 把hive.log.dir=${java.io.tmpdir}/${user.name} 修改为 /opt/m...

人人都能学编程
2018/03/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java发送html模板的高逼格邮件

最近做了一个监测k8s服务pod水平伸缩发送邮件的功能(当pod的cpu/内存达到指定阈值后会水平扩展出多个pod、或者指定时间内pod数应扩展到指定数量),一开始写了个格式很low的邮件,像下面这样...

码农实战
19分钟前
6
0
php-fpm配置文件详解/MariaDB密码重置、慢查询日志

来源:https://blog.csdn.net/Powerful_Fy php-fpm主配置文件路径:/usr/local/php-fpm/etc/php-fpm.conf #位于安装php安装目录下的etc/目录中,该文件中最后一行将配置文件指向:include=/...

asnfuy
24分钟前
6
0
川普给埃尔多安和内堪尼亚胡的信

任性 https://twitter.com/netanyahu/status/1186647558401253377 https://edition.cnn.com/2019/10/16/politics/trump-erdogan-letter/index.htm...

Iridium
45分钟前
12
0
golang-mysql-原生

db.go package mainimport ("database/sql""time"_ "github.com/go-sql-driver/mysql")var (db *sql.DBdsn = "root:123456@tcp(127.0.0.1:3306)/test?charset=u......

李琼涛
今天
5
0
编程作业20191021092341

1编写一个程序,把用分钟表示的时间转换成用小时和分钟表示的时 间。使用#define或const创建一个表示60的符号常量或const变量。通过while 循环让用户重复输入值,直到用户输入小于或等于0的值...

1李嘉焘1
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部