`
tobyqiu
  • 浏览: 39301 次
  • 性别: 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.sql,hive的元数据

    Hive.sql

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

    数据包括运行代码和数据类型,启动hive导入表和数据就可以运行结果

    hive

    hive hive hive hive hive hive hive hive hive hive hive hive

    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 Succinctly

    Author Elton Stoneman uses Hive Succinctly to introduce the core principles of Hive and guides readers through mapping Hadoop and HBase data in Hive, writing complex queries in HiveQL, and running ...

    Hive新手学习资料之Hive入门与实战.+Hive用户手册+hive函数大全中文版资源合集

    Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive十分适合对数据仓库进行统计分析。 目录: Hive入门与实战.pdf hive函数...

    Hive表生成工具,Hive表生成工具Hive表生成工具

    Hive表生成工具,Hive表生成工具Hive表生成工具

    hive-jdbc hive jdbc驱动

    hive-jdbc

    Hive使用手册Hive使用手册

    1 Hive 概念与连接使用: 2 2 Hive支持的数据类型: 2 2.1原子数据类型: 2 2.2复杂数据类型: 2 2.3 Hive类型转换: 3 3 Hive创建/删除数据库 3 3.1创建数据库: 3 3.2 删除数据库: 3 4 Hive 表相关语句 3 4.1 Hive ...

    《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf

    《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf《Hive数据仓库案例教程》教学课件 第...

    hive-3.1.1安装包

    Hive也不是分布式计算框架,Hive的核心工作就是把sql语句翻译成MR程序去执行,不用我们再手动去写MapReduce了。 Hive也不提供资源调度系统,默认由Hadoop集群中的YARN集群来调度。 Hive可以将结构化的数据映射为...

    hive官方翻译文档

    hive hbase官方翻译文档,有很高的使用价值,方便快速入门

    hivesql语句练习

    (b)配置元数据库信息 vi hive-site.xml 添加如下内容: <name>javax.jdo.option.ConnectionURL <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true <description>JDBC connect ...

    HIVE-SQL开发规范.docx

    hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的...本文是Hive的开发规范,包括从网上搜集的一些内容,也包括在工作中总结的,以及在书中整理的点。

    Ambari下Hive3.0升级到Hive4.0

    Ambari下Hive3.0升级到Hive4.0,验证自测;

    Apache Hive Functions Cheat Sheet

    How to create and use Hive Functions, Listing of Built-In Functions that are supported in Hive

    利用Hive进行复杂用户行为大数据分析及优化案例

    利用Hive进行复杂用户行为大数据分析及优化案例(全套视频+课件+代码+讲义+工具软件),具体内容包括: 01_自动批量加载数据到hive 02_Hive表批量加载数据的脚本实现(一) 03_Hive表批量加载数据的脚本实现(二) ...

    Hive总结.docx

    Hive原理/Hive SQL/Hive 函数/数据仓库分层和建模/Hive sql优化/数据倾斜

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

    将官方文档做了简要翻译 此页面仅记录配置单元2.x及更早版本中的元存储。对于3.x及更高版本,请参阅AdminManual Metastore 3.0管理。 介绍 所有表和分区的元数据都是通过配置单元元存储区访问的。元数据使用JPOX ORM...

Global site tag (gtag.js) - Google Analytics