Hive 简介

Hive核心原理与执行流程

一、定义

        Hive 一个基于 Hadoop 的数据仓库,适用于一些高延迟性的应用(离线开发),可以将存储在 Hadoop 文件中的结构化、半结构化数据文件映射为一张数据库表,并基于表提供类似 SQL 的查询模型,称为 Hive 查询语言(HQL),用于访问和分析存储在 Hadoop 文件中的大型数据集。
Hive 的核心是将 HQL 转换为 MapReduce 程序,然后将程序提交到 Hadoop 集群执行;Hive 本身不存储和计算数据,它完全依赖于 HDFS 和 MapReduce,Hive 中的表是纯逻辑表;

数据仓库:

        数据仓库本身并不“生产“任何数据,其数据来源于不同外部系统;同时数据仓库自身也不需要”消费“任何的数据,其结果开放给各个外部应用使用;这就是为什么叫”仓库“,而不叫”工厂的原因“;

二、底层架构及组件

2.1 元数据(Meta store)

        Hive 的元数据管理工具,通常存储在关系型数据库如 Mysql / derby 中,Hive 的元数据包括表名,表所属数据库、表的拥有者、列/分区字段,表的属性(是否是外部表等),表的数据所在目录等;

2.2 Driver

        驱动程序,包括语法解析器、计划编译器、优化器、执行器。完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有执行引擎调用执行;

  • 解析器(SQL Parser)

          将 SQL 字符串转换成抽象语法树 AST ,对 AST 进行语法分析,比如 SQL 语义是否正确、表是否存在、字段是否存在;
  •  编译器(Physical Plan)

          将 AST 编译生成逻辑执行计划(DAG);
     
  •  优化器(Query Optimizer)

         对逻辑执行计划进行优化;
     
  • 执行器(Execution)

         把逻辑执行计划转换成可以运行的物理计划,就是 MapReduce / Spark 程序;

三、HQL 到 MR 的转化流程

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

四、HQL 的执行流程

  1. 发起请求:从 UI 发起执行请求到 Driver;
  2. 获取执行计划:Driver 将用户请求发送到编译器获取执行计划;
  3. 获取元数据:编译器根据 SQL 语句中相关表和分区信息从 Meta store 获取相关元数据;
  4. 返回元数据:Meta store 向编译器返回对应元数据;
  5. 返回执行计划:根据表和分区的元数据对 SQL 解析和优化,生成逻辑执行计划。该计划是一个 DAG 图,每个 stage 对应一个 MapReduce 的 map 或者 reduce 操作;
  6. 运行执行计划:将执行计划发送到 Execution Engine,执行引擎会将逻辑执行计划提交到 Hadoop 中以 MapReduce 形式进行执行;
  7. 运行结果获取:Driver 将运行结果收集发送给 UI;

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值