hive 底层模块实现-distinct

转载 2017年01月18日 11:29:05

准备数据

语句

SELECT COUNT, COUNT(DISTINCT uid) FROM logs GROUP BY COUNT;
hive> SELECT * FROM logs;
OK
a   苹果  3
a   橙子  3
a   烧鸡  1
b   烧鸡  3

hive> SELECT COUNT, COUNT(DISTINCT uid) FROM logs GROUP BY COUNT;

根据count分组,计算独立用户数。

计算过程

hive distinct cal

默认设置了hive.map.aggr=true,所以会在mapper端先group by一次,最后再把结果merge起来,为了减少reducer处理的数据量。注意看explain的mode是不一样的。mapper是hash,reducer是mergepartial。如果把hive.map.aggr=false,那将groupby放到reducer才做,他的mode是complete.

Operator

hive distinct op

Explain

hive> explain SELECT uid, sum(count) FROM logs group by uid;
OK
ABSTRACT SYNTAX TREE:
  (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME logs))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_TABLE_OR_COL uid)) (TOK_SELEXPR (TOK_FUNCTION sum (TOK_TABLE_OR_COL count)))) (TOK_GROUPBY (TOK_TABLE_OR_COL uid))))

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:
        logs 
          TableScan // 扫描表
            alias: logs
            Select Operator //选择字段
              expressions:
                    expr: uid
                    type: string
                    expr: count
                    type: int
              outputColumnNames: uid, count
              Group By Operator //这里是因为默认设置了hive.map.aggr=true,会在mapper先做一次聚合,减少reduce需要处理的数据
                aggregations:
                      expr: sum(count) //聚集函数
                bucketGroup: false
                keys: //键
                      expr: uid
                      type: string
                mode: hash //hash方式,processHashAggr()
                outputColumnNames: _col0, _col1
                Reduce Output Operator //输出key,value给reducer
                  key expressions:
                        expr: _col0
                        type: string
                  sort order: +
                  Map-reduce partition columns:
                        expr: _col0
                        type: string
                  tag: -1
                  value expressions:
                        expr: _col1
                        type: bigint
      Reduce Operator Tree:
        Group By Operator

          aggregations:
                expr: sum(VALUE._col0)
//聚合
          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
            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
      limit: -1

转载:http://ju.outofmemory.cn/entry/784

Hive原理及查询优化

Hive是构建在Hadoop上的数据仓库软件框架,支持使用SQL来读,写和管理大规模数据集合。Hive入门非常简单,功能非常强大,所以非常流行。 通常来说,Hive只支持数据查询和加载,但后面的...
  • LW_GHY
  • LW_GHY
  • 2016年05月21日 12:24
  • 5693

Hive体系结构(二)Hive的执行原理、与关系型数据库的比较

接上篇:Hive体系结构(一)架构与基本组成1. Hive执行原理Hive构建在Hadoop之上, 1. HQL中对查询语句的解释、优化、生成查询计划是由Hive完成的 2. 所有的数据都是存储在...
  • Lnho2015
  • Lnho2015
  • 2016年05月15日 17:11
  • 7489

整理一下HIVE概念

首先要明白,HIVE是HADOOP生态系统中充当数据仓库的角色。它本质上是是一个SQL解释器,就是使得我们能用SQL查询语言去查询HDFS上的数据。而这个功能,容易让我们误认为它就是传统的数据库。但事...
  • wy250229163
  • wy250229163
  • 2016年10月18日 14:08
  • 448

Hive原理

Point 1: 结构化数据:有具体的列和行,并且代表什么具体的含义,相当于一张表—mysql 非结构化数据:没有具体的行和列,完全没有规律——–nosqlPoint 2:什么是Hive? Hi...
  • ymf827311945
  • ymf827311945
  • 2017年05月19日 18:43
  • 279

大数据时代--Hive技术原理解析

本文旨在讲解Hive的运行原理,帮助使用者更好的了解在使用的过程中它做了些什么工作,深入的理解他的工作机制,提高开发人员理论层面的知识。后面会逐渐推出Hive使用、Hbase原理与使用等大数据专题类文...
  • wangyang1354
  • wangyang1354
  • 2016年01月23日 21:34
  • 11150

hive group by distinct区别以及性能比较

Hive去重统计 相信使用Hive的人平时会经常用到去重统计之类的吧,但是好像平时很少关注这个去重的性能问题,但是当一个表的数据量非常大的时候,会发现一个简单的count(distinct order...
  • xiaoshunzi111
  • xiaoshunzi111
  • 2017年03月30日 10:57
  • 4957

hive核心基本概念

基于 Hadoop 的一个数据仓库工具: hive本身不提供数据存储功能,使用HDFS做数据存储, hive也不分布式计算框架,hive的核心工作就是把sql语句翻译成MR程序 hive也不提供...
  • freefish_yzx
  • freefish_yzx
  • 2017年08月13日 21:20
  • 308

我最近研究了hive的相关技术,有点心得,这里和大家分享下。

我最近研究了hive的相关技术,有点心得,这里和大家分享下。   首先我们要知道hive到底是做什么的。下面这几段文字很好的描述了hive的特性:   1.hive是基于Hadoop的一个...
  • gaoqiao1988
  • gaoqiao1988
  • 2016年11月02日 17:55
  • 499

Hive体系结构(二)Hive的执行原理、与关系型数据库的比较

接上篇:Hive体系结构(一)架构与基本组成1. Hive执行原理Hive构建在Hadoop之上, 1. HQL中对查询语句的解释、优化、生成查询计划是由Hive完成的 2. 所有的数据都是存储在...
  • Lnho2015
  • Lnho2015
  • 2016年05月15日 17:11
  • 7489

Hive进阶-深入解析Hive底层实现 - Distinct 的底层实现

转自Hive – Distinct 的实现 并稍作更改 http://ju.outofmemory.cn/entry/784 Hive版本为1.1.0。有空的话其实可以分析它在hive on...
  • zuolovefu
  • zuolovefu
  • 2018年01月10日 16:40
  • 1203
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hive 底层模块实现-distinct
举报原因:
原因补充:

(最多只允许输入30个字)