Hive(2)--Hive的基本架构

232 阅读2分钟

这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战

Hive的架构

Hive的架构图

hive架构图.png

Hive的服务(角色)

1、用户访问接口

CLI(Command Line Interface):用户可以使用Hive自带的命令行接口执行Hive QL、设置参数等功能

JDBC/ODBC:用户可以使用JDBC或者ODBC的方式在代码中操作Hive

Web GUI:浏览器接口,用户可以在浏览器中对Hive进行操作**(2.2之后淘汰)**

2、Thrift Server:(远程调用服务)

Thrift服务运行客户端使用Java、C++、Ruby等多种语言,通过编程的方式远程访问Hive

3、Driver

Hive Driver是Hive的核心,其中包含解释器、编译器、优化器等各个组件,完成从SQL语句到MapReduce任务的解析优化执行过程

4、metastore→元数据存储

在 Hive 中,表名、表结构、字段名、字段类型、表的分隔符等统一被称为元数据。所有的元数据默认存储在 Hive 内置的 derby 数据库中,但由于 derby 只能有一个实例,也就是说不能有多个命令行客户端同时访问,所以在实际生产环境中,通常使用 MySQL 代替 derby

HQL的执行流程

Hive 在执行一条 HQL 的时候,会经过以下步骤:

  1. 语法解析:Antlr 定义 SQL 的语法规则,完成 SQL 词法,语法解析,将 SQL 转化为抽象 语法树 AST Tree;
  2. 语义解析:遍历 AST Tree,抽象出查询的基本组成单元 QueryBlock;
  3. 生成逻辑执行计划:遍历 QueryBlock,翻译为执行操作树 OperatorTree;
  4. 优化逻辑执行计划:逻辑层优化器进行 OperatorTree 变换,合并不必要的 ReduceSinkOperator,减少 shuffle 数据量;
  5. 生成物理执行计划:遍历 OperatorTree,翻译为 MapReduce 任务;
  6. 优化物理执行计划:物理层优化器进行 MapReduce 任务的变换,生成最终的执行计划。

关于 Hive SQL 的详细执行流程可以参考美团技术团队的文章:Hive SQL 的编译过程