HQL执行流程及映射MR流程

一、在Hive以explain执行语句
创建测试表

create table dual(key string,value string);

执行explain extended select a.key*(4+5), b.value from dual a join dual b on a.key=b.key and a.key>10;

hive> explain extended select  a.key*(4+5), b.value  from dual a join dual b on a.key=b.key and a.key>10;
OK
Explain
ABSTRACT SYNTAX TREE:
  
TOK_QUERY
   TOK_FROM
      TOK_JOIN
         TOK_TABREF
            TOK_TABNAME
               dual
            a
         TOK_TABREF
            TOK_TABNAME
               dual
            b
         and
            =
               .
                  TOK_TABLE_OR_COL
                     a
                  key
               .
                  TOK_TABLE_OR_COL
                     b
                  key
            >
               .
                  TOK_TABLE_OR_COL
                     a
                  key
               10
   TOK_INSERT
      TOK_DESTINATION
         TOK_DIR
            TOK_TMP_FILE
      TOK_SELECT
         TOK_SELEXPR
            *
               .
                  TOK_TABLE_OR_COL
                     a
                  key
               +
                  4
                  5
         TOK_SELEXPR
            .
               TOK_TABLE_OR_COL
                  b
               value


STAGE DEPENDENCIES:
  Stage-4 is a root stage
  Stage-3 depends on stages: Stage-4
  Stage-0 depends on stages: Stage-3

STAGE PLANS:
  Stage: Stage-4
    Map Reduce Local Work
      Alias -> Map Local Tables:
        a 
          Fetch Operator
            limit: -1
      Alias -> Map Local Operator Tree:
        a 
          TableScan
            alias: a
            Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE
            GatherStats: false
            Filter Operator
              isSamplingPred: false
              predicate: (key > 10) (type: boolean)
              Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE
              HashTable Sink Operator
                keys:
                  0 key (type: string)
                  1 key (type: string)
                Position of Big Table: 1

  Stage: Stage-3
    Map Reduce
      Map Operator Tree:
          TableScan
            alias: b
            Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE
            GatherStats: false
            Filter Operator
              isSamplingPred: false
              predicate: (key > 10) (type: boolean)
              Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE
              Map Join Operator
                condition map:
                     Inner Join 0 to 1
                keys:
                  0 key (type: string)
                  1 key (type: string)
                outputColumnNames: _col0, _col6
                Position of Big Table: 1
                Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE
                Select Operator
                  expressions: (_col0 * 9) (type: double), _col6 (type: string)
                  outputColumnNames: _col0, _col1
                  Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE
                  File Output Operator
                    compressed: false
                    GlobalTableId: 0
                    directory: hdfs://hadoop000:8020/tmp/hive/hadoop/71908556-ae01-4cd2-a13c-171c04687fe4/hive_2019-04-20_18-26-31_164_1873867714665609652-1/-mr-10000/.hive-staging_hive_2019-04-20_18-26-31_164_1873867714665609652-1/-ext-10001
                    NumFilesPerFileSink: 1
                    Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE
                    Stats Publishing Key Prefix: hdfs://hadoop000:8020/tmp/hive/hadoop/71908556-ae01-4cd2-a13c-171c04687fe4/hive_2019-04-20_18-26-31_164_1873867714665609652-1/-mr-10000/.hive-staging_hive_2019-04-20_18-26-31_164_1873867714665609652-1/-ext-10001/
                    table:
                        input format: org.apache.hadoop.mapred.TextInputFormat
                        output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
                        properties:
                          columns _col0,_col1
                          columns.types double:string
                          escape.delim \
                          hive.serialization.extend.additional.nesting.levels true
                          serialization.format 1
                          serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
                        serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
                    TotalFiles: 1
                    GatherStats: false
                    MultiFileSpray: false
      Local Work:
        Map Reduce Local Work
      Path -> Alias:
        hdfs://hadoop000:8020/user/hive/warehouse/g6_hadoop.db/dual [b]
      Path -> Partition:
        hdfs://hadoop000:8020/user/hive/warehouse/g6_hadoop.db/dual 
          Partition
            base file name: dual
            input format: org.apache.hadoop.mapred.TextInputFormat
            output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
            properties:
              bucket_count -1
              columns key,value
              columns.comments 
              columns.types string:string
              file.inputformat org.apache.hadoop.mapred.TextInputFormat
              file.outputformat org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
              location hdfs://hadoop000:8020/user/hive/warehouse/g6_hadoop.db/dual
              name g6_hadoop.dual
              serialization.ddl struct dual { string key, string value}
              serialization.format 1
              serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
              transient_lastDdlTime 1555755989
            serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
          
              input format: org.apache.hadoop.mapred.TextInputFormat
              output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
              properties:
                bucket_count -1
                columns key,value
                columns.comments 
                columns.types string:string
                file.inputformat org.apache.hadoop.mapred.TextInputFormat
                file.outputformat org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
                location hdfs://hadoop000:8020/user/hive/warehouse/g6_hadoop.db/dual
                name g6_hadoop.dual
                serialization.ddl struct dual { string key, string value}
                serialization.format 1
                serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
                transient_lastDdlTime 1555755989
              serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
              name: g6_hadoop.dual
            name: g6_hadoop.dual
      Truncated Path -> Alias:
        /g6_hadoop.db/dual [b]

  Stage: Stage-0
    Fetch Operator
      limit: -1
      Processor Tree:
        ListSink

二、过程剖析
一个HQL语句发出会经历以下过程


1、HQL会被解析成一个抽象语法树,AST本质一个字符串
2、Aanalyzer后悔生形成一个QB(Query Block)
3、然后到了逻辑执行计划,生成一堆Operator Tree
4、logical optimizer对逻辑执行计划进行优化后生成一堆Operator Tree
5、最后到了物理执行计划,生成一堆TaskTree
6、phsical optimizer对物理执行计划进行优化,生成优化后的TaskTree,即最终在集群跑的Task

重点是逻辑、物理优化器的环节

三、SQL ON HADOOP常见SQL场景总结

1、单表的的分析:select a,聚合函数 from a group by b
2、多表的Join:select a.,b. from a join b on a.id=b.id

四、SQL映射MR流程
1、过滤类:如select a.id,b.city from a where a.day='20190420' and a.city ='101'.此类不会发生shuffle
2、聚合类:如select a.id,b.city from ta where a,day='20190420' and b.city ='101' group city,此类会发生shuffle。

id city_id category day
1 101 奔驰 20180101
2 101 路虎 20180101
3 102 奔驰 20180101
4 102 奔驰 20180101
5 101 奔驰 20180101
6 101 奔驰 20180101

表infos三个字段id,city_id,category和分区字段day

过滤类

select a.id,a.city_id from infos a where a.day='20180101' and a.category='奔驰'

image.png

聚合类

select a.city_id,count(1) from infos a where a.day='20180101' and a.category='奔驰' group by a.city_id

image.png

本质是WC,上图combiner是本地局部的redece,好处是减少shuffle的数据量,但不是任何场景都会发生combiner,如求平均数。

MR COUNT的流程

  1. map: split ==> (word, 1)
  2. shuffle: (word,1) partitioner ==> reduce
  3. reduce: (word, 可迭代的(1,1,1,1...))
    ==> (word, sum(可迭代的))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,319评论 0 10
  • **2014真题Directions:Read the following text. Choose the be...
    又是夜半惊坐起阅读 9,454评论 0 23
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,449评论 0 13
  • ORACLE自学教程 --create tabletestone ( id number, --序号usernam...
    落叶寂聊阅读 1,074评论 0 0
  • 学校里的世界是梦幻的,在象牙塔的顶端俯瞰现实虚假的一逼。出了学校,没了高处不胜寒才懂得成长。 回家第二天,金钱...
    留才君阅读 125评论 0 1