`
tobyqiu
  • 浏览: 40208 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Statistics in Hive (hive的统计信息搜集) 翻译

 
阅读更多

原文 https://cwiki.apache.org/confluence/display/Hive/StatsDev

 

hive的统计信息搜集

  • 动机
  • 范围
  • 执行
  • 用法
    • 变量配置
    • 全新的表
    • 现有的表
  • 例子

Motivation 动机

统计信息,例如一个表有多少行,多少个分区,列的直方图等重要的信息。统计信息的关键作用是查询优化。把统计信息作为输入,通过成本优化函数,可以方便的比较不同的查询方案,并且从中进行选择。统计数据有时可以直接满足用户的查询目的。比如他们只是查询一些基础数据,而不需要通过运行执行计划.举几个例子,得到用户的年龄分布,人们使用的top10的apps,多少个不同的session.

 

Scope 范围

支持统计的第一个里程碑是支持表和分区层面的统计数据。 对于新建表或者是已经存在的表,表和分区统计数据现在存储在Hive的元数据中对。目前支持的分区的如下统计:

1.多少行

2.多少个文件

3.大小(字节数)

对于表来说,统计信息支持新加的分区的统计。

列级别的top K值也可搜集基于分区级别统计。参见top k Statistics。 

 

Implementation 执行

 

统计信息的搜集大概分2种,新表和现有表

对于新创建的表,创建一个新表的就是一个MapReduce job。 在创建的过程中,每个mapper在文件拷贝的操作中搜集行数,然后放进数据库(可能是mysql)。在MapReduce作业结束时,把统计数据汇总并存储在MetaStore。 一个类似的过程发生在已经存在的表,当新建一个map-only的job,当每个mapper在扫描表的过程中,搜集行的统计信息,然后同样的过程。

有一点需要明确,这里需要的用来存储临时统计信息的数据。现在有2种实现方式,一个是用mysql,另一个是hbase。这里有个接口IStatsPublisher和IStatsAggregator。开发人员可以实现支持任何其他的存储。接口列表如下

package org.apache.hadoop.hive.ql.stats;
 
import org.apache.hadoop.conf.Configuration;
 
/**
 * An interface for any possible implementation for publishing statics.
 */
 
public interface IStatsPublisher {
 
  /**
 * This method does the necessary initializations according to the implementation requirements.
   */
  public boolean init(Configuration hconf);
 
  /**
 * This method publishes a given statistic into a disk storage, possibly HBase or MySQL.
   *
 * rowID : a string identification the statistics to be published then gathered, possibly the table name + the partition specs.
   *
 * key : a string noting the key to be published. Ex: "numRows".
   *
 * value : an integer noting the value of the published key.
 * */
  public boolean publishStat(String rowID, String key, String value);
 
  /**
 * This method executes the necessary termination procedures, possibly closing all database connections.
   */
  public boolean terminate();
 
}

 

package org.apache.hadoop.hive.ql.stats;
 
import org.apache.hadoop.conf.Configuration;
 
/**
 * An interface for any possible implementation for gathering statistics.
 */
 
public interface IStatsAggregator {
 
  /**
 * This method does the necessary initializations according to the implementation requirements.
   */
  public boolean init(Configuration hconf);
 
  /**
 * This method aggregates a given statistic from a disk storage.
 * After aggregation, this method does cleaning by removing all records from the disk storage that have the same given rowID.
   *
 * rowID : a string identification the statistic to be gathered, possibly the table name + the partition specs.
   *
 * key : a string noting the key to be gathered. Ex: "numRows".
   *
 * */
  public String aggregateStats(String rowID, String key);
 
  /**
 * This method executes the necessary termination procedures, possibly closing all database connections.
   */
  public boolean terminate();
 
}

Usage用法

Configuration Variables参数配置

详见统计参数配置列表,如何使用参数。

Newly Created Tables新表

 

对于新建表/分区(通过INSERT OVERWRITE ),统计信息默认情况下会自动计算。如果用户把 hive.stats.autogather设置成false,那么统计信息就不会被自动计算,然后存储进hive 元数据。

set hive.stats.autogather=false;

 用户还可以指定临时统计存储的变量 hive.stats.dbclass,例如,要设置hbase(默认是 {{jdbc:derby}}作为临时的统计信息存储)就使用,

set hive.stats.dbclass=hbase;

 如果是通过jdbc来实现临时存储(ex. Derby or MySQL),可以通过设置hive.stats.dbconnectionstring指定适当的连接字符串来实现。同时还可以通过hive.stats.jdbcdriver来指定jdbc驱动

set hive.stats.dbclass=jdbc:derby;
set hive.stats.dbconnectionstring="jdbc:derby:;databaseName=TempStatsStore;create=true";
set hive.stats.jdbcdriver="org.apache.derby.jdbc.EmbeddedDriver";

 查询可能无法正确的搜集统计信息。如果出现这种情况,这里还有一个设置。hive.stats.reliable。默认是false

Existing Tables现有表

 

对于现有的表和/或分区,用户可以发出ANALYZE命令来收集统计信息,并将其写入到元数据存储。语法该命令的描述如下:

ANALYZE TABLE tablename [PARTITION(partcol1[=val1], partcol2[=val2], ...)] COMPUTE STATISTICS [noscan];

 当用户发出的命令,他可能会或可能不会指定分区。如果用户没有指定任何分区,就会收集统计所有分区的统计信息(如果有的话)。如果指定某个分区,只会收集那些分区的统计信息。 当搜集所有分区时,分区字段会被罗列。

当指定可选参数NOSCAN,该命令将不会扫描文件,以便它更快。它得到的不是所有统计数据,只是收集了以下统计数据: 

  • 文件数 
  • 物理大小(字节)

Examples例子

 假设table1 有4个分区

  • Partition1: (ds='2008-04-08', hr=11)
  • Partition2: (ds='2008-04-08', hr=12)
  • Partition3: (ds='2008-04-09', hr=11)
  • Partition4: (ds='2008-04-09', hr=12)

 用户打了以下的命令

ANALYZE TABLE Table1 PARTITION(ds='2008-04-09', hr=11) COMPUTE STATISTICS;
 那么只会统计分区3的数据(ds='2008-04-09', hr=11) 

 

如果打了以下的命令

ANALYZE TABLE Table1 PARTITION(ds='2008-04-09', hr) COMPUTE STATISTICS;
那么只统计了分区3和分区4的数据

如果打了下面的命令

ANALYZE TABLE Table1 PARTITION(ds, hr) COMPUTE STATISTICS;
 那么会统计4个分区的数据

 

对于非分区表可以使用以下命令

 

ANALYZE TABLE Table1 COMPUTE STATISTICS;
 如果是个分区表,你就需要像上面写的那样明确分区字段,否则予以分析器就会抛出错误。

 

用户可以使用DESCRIBE 命令来查看已经搜集完毕的统计信息。统计信息被存放在一个参数array中,假设用户打算查看全表的统计信息,需要以下命令

 

DESCRIBE EXTENDED TABLE1;
 然后会有以下的输出
... , parameters:{numPartitions=4, numFiles=16, numRows=2000, totalSize=16384, ...}, ....
 如果使用以下命令
DESCRIBE EXTENDED TABLE1 PARTITION(ds='2008-04-09', hr=11);
 会有以下输出
... , parameters:{numFiles=4, numRows=500, totalSize=4096, ...}, ....
 如果用户使用以下命令
ANALYZE TABLE Table1 PARTITION(ds='2008-04-09', hr) COMPUTE STATISTICS noscan;
 就只会统计分区3和分区4中有多少个文件,以及物理大小(单位byte)

 

 

 

 

 

      

 

 

分享到:
评论

相关推荐

    Hive练习项目统计各种TOP的实战(数据和代码)

    **Hive实战:统计各种TOP的项目解析** 在大数据处理领域,Apache Hive 是一个非常重要的组件,它提供了SQL-like查询语言(HQL)用于处理存储在Hadoop分布式文件系统(HDFS)上的大规模数据集。本项目以"统计各种TOP...

    Hive.sql,hive的元数据

    Hive.sql

    hive官方翻译文档

    《Hive官方翻译文档》包含了丰富的Hive技术信息,旨在帮助用户快速理解和掌握这一大数据处理工具。Hive是由Facebook开源的一款基于Hadoop的数据仓库工具,它允许通过SQL(HQL,Hive Query Language)对存储在Hadoop...

    hive客户端安装_hive客户端安装_hive_

    在大数据处理领域,Hive是一个非常重要的工具,它提供了一个基于Hadoop的数据仓库基础设施,用于数据查询、分析和管理大规模数据集。本教程将详细讲解如何在Linux环境下安装Hive客户端,以便进行数据操作和分析。 ...

    HIVE安装及详解

    "HIVE安装及详解" HIVE是一种基于Hadoop的数据仓库工具,主要用于处理和分析大规模数据。下面是关于HIVE的安装及详解。 HIVE基本概念 HIVE是什么?HIVE是一种数据仓库工具,主要用于处理和分析大规模数据。它将...

    大数据 hive 实战数据

    在大数据处理领域,Hive是一个极其重要的工具,它被广泛应用于大数据分析和数据仓库操作。本实战数据集主要涉及两个核心部分:`video`数据和`user`数据,这些都是构建大数据分析模型的基础元素。让我们深入探讨一下...

    大数据之Hive官方文档简要翻译(中文文档)

    【大数据之Hive官方文档简要翻译(中文文档)】 Hive是一款基于Hadoop的数据仓库工具,它允许用户使用SQL-like的语言(HQL)来查询、管理和处理存储在Hadoop文件系统(HDFS)上的大规模数据集。在Hive的核心组件中...

    Hive_JDBC.zip_hive java_hive jdbc_hive jdbc pom_java hive_maven连

    在大数据处理领域,Apache Hive是一个基于Hadoop的数据仓库工具,它允许用户使用SQL(HQL,Hive Query Language)查询存储在Hadoop集群中的大型数据集。Hive JDBC(Java Database Connectivity)是Hive提供的一种...

    电影票房数据分析-hive代码

    本资源为电影票房数据分析的Hive代码,涵盖了四个主要部分:统计2020年上映的电影中当前总票房最高的10部电影、统计2020年国庆假期中电影票房增长最多的三部电影及其每日的票房数据、统计2020年中当日综合总票房最多...

    hive影评案例.rar

    在大数据分析领域,Hive是一个非常重要的工具,尤其在离线处理方面表现出色。本案例“hive影评案例.rar”提供了使用Java编程语言与Hive进行交互的示例,旨在帮助学习大数据Hive的同学深入理解其工作原理和应用。下面...

    连接hive依赖的jar包_hive连接方式

    - 输入数据源名称,然后在"Host"、"Port"、"Database"等字段填入Hive服务器的相关信息。 - 在"Driver"选项卡下,确认驱动类型为"Hive JDBC",如果未列出,需要手动添加。点击"Download"按钮,选择合适的Hive JDBC...

    DBeaver链接hive驱动包下载: hive-jdbc-uber-2.6.5.0-292.jar

    《DBeaver与Hive连接:hive-jdbc-uber-2.6.5.0-292.jar驱动详解》 在大数据处理领域,Hive作为一个基于Hadoop的数据仓库工具,广泛用于数据查询和分析。而DBeaver,作为一款跨平台的数据库管理工具,以其用户友好的...

    Ambari下Hive3.0升级到Hive4.0

    在大数据领域,Apache Ambari 是一个用于 Hadoop 集群管理和监控的开源工具,而 Hive 是一个基于 Hadoop 的数据仓库系统,用于处理和分析大规模数据集。本话题聚焦于如何在 Ambari 环境下将 Hive 3.0 升级到 Hive ...

    Hive驱动1.1.0.zip

    在大数据处理领域,Hive是一个基于Hadoop的数据仓库工具,它允许用户使用SQL(HQL,Hive Query Language)查询和管理存储在Hadoop分布式文件系统(HDFS)中的大量结构化数据。Hive 1.1.0是Hive的一个版本,提供了...

    apache-hive-2.3.9-bin.tar大数据HIVE.zip

    5. **优化器**:Hive的优化器(如CBO,Cost-Based Optimizer)根据元数据和统计信息选择最佳执行计划,提升查询性能。 6. **存储过程(UDF,UDAF,UDTF)**:Hive支持用户自定义函数(UDF),用户定义聚合函数...

    Hive3.1.2编译源码

    使用hive3.1.2和spark3.0.0配置hive on spark的时候,发现官方下载的hive3.1.2和spark3.0.0不兼容,hive3.1.2对应的版本是spark2.3.0,而spark3.0.0对应的hadoop版本是hadoop2.6或hadoop2.7。 所以,如果想要使用高...

    hive相关jar包

    2. **Hive Metastore**:这部分jar包用于存储Hive的元数据,包括表结构、分区信息、列类型等。元数据可以存储在本地MySQL、PostgreSQL或者远程Thrift服务器上。 3. **Hive SerDes(Serialization/Deserialization)...

    hive2.0+开启审计日志.pdf

    在Hive 2.0及更高版本中,启用Metastore审计日志是确保数据安全性与合规性的重要步骤。审计日志记录了用户对Hive Metastore的所有操作,包括元数据的创建、修改和查询等,这对于追踪系统活动、故障排查以及满足法规...

    基于 Hive的数据分析案例 -MM聊天软件数据分析

    本资源摘要信息主要介绍了基于 Hive 的数据分析案例,通过对 MM 聊天软件的数据进行统计分析,了解用户行为,实现精准的用户画像,并为公司的发展决策提供精确的数据支撑。 知识点一:Hive 数据分析 Hive 是基于 ...

Global site tag (gtag.js) - Google Analytics