Hive sql 底层执行原理

本文深入探讨了Hive SQL如何被解析并转换为MapReduce任务的底层执行流程。首先介绍了Hive的架构,包括UI、DRIVER、COMPILER、METASTORE和EXECUTION ENGINE的角色。接着详细阐述了SQL的编译过程,从词法、语法解析到生成逻辑和物理执行计划,并通过实例解析了Join、Group By和Distinct操作在MapReduce中的实现。了解这一过程有助于优化Hive SQL和增强对Hive的理解。
摘要由CSDN通过智能技术生成

目录

本文结构采用宏观着眼,微观入手,从整体到细节的方式剖析 Hive SQL 底层原理。第一节先介绍 Hive 底层的整体执行流程,然后第二节介绍执行流程中的 SQL 编译成 MapReduce 的过程,第三节剖析 SQL 编译成 MapReduce 的具体实现原理。

Hive

Hive 底层执行架构

Hive SQL 编译成 MapReduce 过程

SQL编译成MapReduce具体原理

Hive

Hive是什么?Hive 是数据仓库工具,再具体点就是一个 SQL 解析引擎,因为它即不负责存储数据,也不负责计算数据,只负责解析 SQL,记录元数据。

Hive直接访问存储在 HDFS 中或者 HBase 中的文件,通过 MapReduce、Spark 或 Tez 执行查询。

我们今天来聊的就是 Hive 底层是怎样将我们写的 SQL 转化为 MapReduce 等计算引擎可识别的程序。了解 Hive SQL 的底层编译过程有利于我们优化Hive SQL,提升我们对Hive的掌控力,同时有能力去定制一些需要的功能。

Hive 底层执行架构

我们先来看下 Hive 的底层执行架构图, Hive 的主要组件与 Hadoop 交互的过程:

图片

Hive底层执行架构

在 Hive 这一侧,总共有五个组件:

  1. UI:用户界面。可看作我们提交SQL语句的命令行界面。

  2. DRIVER:驱动程序。接收查询的组件。该组件实现了会话句柄的概念。

  3. COMPILER:编译器。负责将 SQL 转化为平台可执行的执行计划。对不同的查询块和查询表达式进行语义分析,并最终借助表和从 metastore 查找的分区元数据来生成执行计划。

  4. METASTORE:元数据库。存储 Hive 中各种表和分区的所有结构信息。

  5. EXECUTION ENGINE:执行引擎。负责提交 COMPILER 阶段编译好的执行计划到不同的平台上。

上图的基本流程是:

步骤1:UI 调用 DRIVER 的接口;

步骤2:DRIVER 为查询创建会话句柄,并将查询发送到 COMPILER(编译器)生成执行计划;

步骤3和4:编译器从元数据存储中获取本次查询所需要的元数据,该元数据用于对查询树中的表达式进行类型检查,以及基于查询谓词修建分区;

步骤5:编译器生成的计划是分阶段的DAG,每个阶段要么是 map/reduce 作业,要么是一个元数据或者HDFS上的操作。将生成的计划发给 DRIVER。

如果是 map/reduce 作业,该计划包括 map operator trees 和一个  reduce operator tree,执行引擎将会把这些作业发送给 MapReduce :

步骤6、6.1、6.2和6.3:执行引擎将这些阶段提交给适当的组件。在每个 task(mapper/reducer) 中,从HDFS文件中读取与表或中间输出相关联的数据,并通过相关算子树传递这些数据。最终这些数据通过序列化器写入到一个临时HDFS文件中&

Hive是一个基于Hadoop的数据仓库基础设施,它提供了类似于SQL的查询语言HiveQL来处理大规模的结构化数据。Hive SQL执行原理主要分为以下几个步骤: 1. HiveQL解析和语法分析:Hive接收到用户提交的HiveQL查询语句后,首先会进行语法分析,确保查询语句的正确性和合法性。 2. 查询优化器:在语法分析后,Hive会使用查询优化器对查询进行优化。这个过程包括逻辑优化、物理优化和执行计划生成。优化器会尝试重写查询,选择合适的连接算法和操作顺序,以提高查询性能。 3. 查询计划生成:在优化器阶段完成后,Hive会生成查询的执行计划。执行计划是一个逻辑和物理执行计划的组合,描述了如何从底层存储系统中检索和处理数据。 4. 查询执行:一旦生成了执行计划,Hive将会将其转化为一系列的MapReduce任务或Tez任务,并提交给底层执行引擎进行执行。每个任务负责处理输入数据的一部分,然后将结果写入临时表或输出目录。 5. 结果返回:当所有的任务完成后,Hive会将最终结果返回给用户。用户可以选择将结果保存到文件系统中或者直接在终端上显示。 需要注意的是,Hive SQL执行过程中会将HiveQL查询转化为一系列的MapReduce任务或Tez任务来执行,这样可以充分利用Hadoop集群的并行计算能力来处理大规模数据。同时,Hive还支持使用索引和分区等技术来提高查询的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值