Hive 基本原理和架构

202208302239358

基本原理

Hive构建在Hadoop之上:

1. 查询语句的解释、优化、计划生成,由Hive完成;

2. 所有的数据都是存储在Hadoop文件系统中;

3. 查询计划被转化为MapReduce任务,在Hadoop集群执行(有些查询没有MR任务,如:select * from table)

基本架构

1. 用户接口:Client

CLI(command-line interface)、JDBC/ODBC(通过 JDBC访问Hive)、WebUI(通过浏览器访问Hive)

2.元数据:Metastore

元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等。

元数据默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore。

3.Hadoop

使用HDFS进行存储,使用MapReduce进行计算。

4.驱动器:Driver

  • 解析器(SQL Parser):通过 ANTLR等工具将SQL字符串转换成抽象语法树AST;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误;
  • 编译器(Physical Plan):将AST编译生成逻辑执行计划;
  • 优化器(Query Optimizer):对逻辑执行计划进行优化;
  • 执行器(Execution):把逻辑执行计划转换成 MapReduce 等可以运行的物理计划;

Hive和数据库的异同

由于Hive采用了SQL形式的查询语言HQL,所以很容易将Hive当成数据库。其实从结构上来看,Hive和数据库除了拥有类似的查询语言,再无类似之处。

HQL与关系型数据库的 SQL 略有不同,但支持了绝大多数的语句(如 DDL、DML)以及常见的聚合函数、连接查询、条件查询等操作。

Hive 不适合用于联机(online) 事务处理,也不提供实时查询功能。它最适合应用在基于大量不可变数据的批处理作业。Hive 的特点是可伸缩(在Hadoop 的集群上动态的添加设备),可扩展、容错、输入格式的松散耦合。

Hive和数据库的比较如下表:

比较项

SQL

HiveQL

ANSI SQL

完全支持

部分支持

更新

INSERT | UPDATE | DELETE

INSERT INTO / OVERWRITE

事务

支持

不支持

模式

写模式

读模式

存储

块设备、本地文件系统

HDFS

延时

多表插入

不支持

支持

子查询

完全支持

仅 FROM 子句

视图

Updatale

Read-Only

数据规模

KAMI
KAMI
数据挖掘研究员,专注分享数据领域的技术和业务,以及逻辑、思维和方法论

发表回复

文章结构
相关文章