Hive基础知识

一、概述

Hive是基于hadoop的数据仓库工具,将结构化数据文件映射为表,并提供类SQL(HiveSql)的查询功能,本质上是对MapReduce/Spark的封装

二、Hive架构(核心组件)

用户接口:接收用户查询请求
元存储(Metastore):存储表结构、分区信息等元数据,通常使用关系型数据库(如MySQL)
Driver:解析SQL–>生成执行计划–>调用执行引擎;

1、解析器:将接收到的SQL语句转换为AST(抽象语法树),方便查询优化和执行;
2、编译器:编译并优化AST,生成一个包换对数据进行操作的逻辑计划;
3、优化器:对编辑器进行优化,包含整理查询的基础运算元算子树,消除无效运算,减少数据传输等;
4、执行器:根据逻辑计划生成物理计划,然后将其转为适合运行在Hadoop上的MapReduce或者Tez任务。

执行引擎:将逻辑计划转化为物理任务(如MapReduce job)
存储层:将数据实际存储在HDFS(文件)或者HBase(KV存储)

三、Hive数据结构

表(Table):逻辑概念,分为内部表(数据由Hive管理)和外部表(数据由外部系统管理)。
分区(Partition):按列值(如日期)划分数据,加速查询。
分桶(Bucket):通过哈希进一步细分数据,优化JOIN和采样。
数据类型:支持基本类型(INT、STRING等)、复杂类型(ARRAY、MAP、STRUCT)。

四、Hive工作原理

用户提交 HiveQL 查询至驱动模块。
解析器生成抽象语法树(AST),语义分析验证表/列是否存在。
逻辑计划生成器转换为操作符树,优化器应用规则(如谓词下推)。
物理计划生成器将逻辑计划转为 MapReduce/Tez/Spark 任务。
执行引擎提交任务至集群,返回结果。

五、相关问题

1、Hive SQL转化过程

Hive SQL的转化过程主要包括将Hive SQL查询转换为可执行的MapReduce、Tez或Spark作业。以下是Hive SQL转化的主要步骤:

SQL解析与语法分析
Hive首先对SQL语句进行词法和语法解析,生成抽象语法树(AST)。这一阶段检查SQL的语法正确性,并将其转换为Hive的内部表示形式。

逻辑计划生成
基于AST,Hive生成逻辑执行计划(Logical Plan)。逻辑计划描述了查询的逻辑操作,如过滤、连接、聚合等,但不涉及具体的执行细节。

逻辑优化
Hive对逻辑计划进行优化,包括谓词下推(Predicate Pushdown)、列剪裁(Column Pruning)、分区剪裁(Partition Pruning)等,以减少数据处理量。

物理计划生成
逻辑计划被转换为物理执行计划(Physical Plan)。物理计划指定了具体的执行引擎(如MapReduce、Tez或Spark)以及操作的具体实现方式。

作业提交与执行
Hive将物理计划提交到Hadoop集群执行。根据配置,Hive可能生成多个MapReduce或Spark任务,最终完成查询并返回结果。

2、内部表和外部表

内部表

定义:数据和元数据都由hive进行管理
特点:当执行Drop TABLE操作时,表中的数据也会被一并删除;
数据管理:Hive负责数据的生命周期,适用于数据仅在Hive中使用的情况;
使用场景:适合临时分析或者Hive独占的数据集;

外部表

定义:元数据由hive管理,数据实际存储在HDFS上;
特点:执行DROP TABLE操作时,只删除元数据,数据本身仍然保留在HDFS上;
数据共享:使用于需要在多个计算框架间共享数据的场景;
数据独立性:删除表不影响数据本身,方便数据的管理和操作;

3、分区表和分桶表

分区表

定义:通过指定分区字段来建立表,常用时间字段作为分区字段;
优势:通过查询时指定分区字段,可以加速查询过程;
查询优化:分区可以作为查询的过滤条件,减少扫描的数据量;
数据管理:方便数据的维护,如可以按分区删除旧数据;

分桶表

定义:通过指定分桶字段来建立表,对分桶字段进行Hash并按照桶的个数进行数据分配;
优势:可以加速JOIN操作,并方便进行数据抽样;
数据散列:通过散列算法将数据分散到不同的桶中,使得数据分布更均匀;
抽样便捷性:通过对桶进行抽样,可以快速进行数据分析;

4、四个BY

sort by

定义:局部排序,只在每个reduce内部进行排序;
特点:当指定reducer数量为1时,效果与order by相同;

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容