Hive基本原理详解

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 笔记

一、Hive概述


(1)什么是Hive?

由Facebook开源用于解决海量结构化日志的数据统计

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射成一张表,并提供类SQL查询功能

构建在Hadoop之上的数据仓库:使用HQL作为查询接口,使用HDFS存储,使用MapReduce计算

本质是:将HQL转化为成MapReduce程序

灵活性和扩展性比较好:支持UDF,自定义存储格式等

Hive中的表是纯逻辑表,就只是表的定义等,即表的元数据。本质就是Hadoop的目录/文件,达到了元数据与数据存储分离的目的,Hive本身不存储数据,它完全依赖HDFS和MapReduce。

Hive的内容是读多写少,不支持对数据的更新

Hive中没有定义专门的数据格式,由用户指定,需要指定三个属性:1. 列分隔符 2. 行分隔符 3. 读取文件数据的方法


(2)Hive的优点及应用场景

操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)

避免了去写 MapReduce,减少开发人员的学习成本

统一的元数据管理,可与 impala/ spark等共享元数据

易扩展(HDFS+ MapReduce:可以扩展集群规模;支持自定义函数)

数据的离线处理;比如:日志分析,海量结构化数据离线分析

Hive的执行延迟比较高,因此hve常用于数据分析的,对实时性要求不高的场合

Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高


二、Hive 和 RDBMS(关系数据库管理系统)的对比


7.png


三、Hive架构


8.png

9.png

(1)Hive的基本组成

10.png

用户接口主要有三个:CLI,Client 和 WUI。

元数据存储:通常是存储在关系数据库如 mysql , derby中。

语句转换:解释器、编译器、优化器、执行器。


(2)各组件的基本功能

用户接口主要由三个:CLI、JDBC/Beeline和WebGUI。其中,CLI为shell命令行;JDBC/Beeline是Hive的JAVA实现,与传统数据库JDBC类似;WebGUI是通过浏览器访问Hive。


元数据存储:Hive 将元数据存储在数据库中(MySql或者Derby)。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。表的数据所在目录Metastore 默认存在自带的 Derby 数据库中。缺点就是不适合多用户操作,并且数据存储目录不固定。数据库跟着 Hive 走,极度不方便管理。解决方案:通常存我们自己创建的 MySQL 库( 本地 或 远程)Hive 和 MySQL 之间通过 MetaStore 服务交互。


Driver : 编译器 (Compiler) ) ,优化器 (Optimizer) ) ,执行器 (Executor )

Driver 组件完成 HQL 查询语句从词法分析,语法分析,编译,优化,以及生成逻辑执行

计划的生成。生成的逻辑执行计划存储在 HDFS 中,并随后由 MapReduce 调用执行

Hive 的核心是驱动引擎, 驱动引擎由四部分组成:

(1) 解释器:解释器的作用是将 HiveSQL 语句转换为抽象语法树(AST)

(2) 编译器:编译器是将语法树编译为逻辑执行计划

(3) 优化器:优化器是对逻辑执行计划进行优化

(4) 执行器:执行器是调用底层的运行框架执行逻辑执行计划


四、Hive的工作原理


如图:11.png

流程大致步骤为:


用户提交查询等任务给Driver。

编译器获得该用户的任务Plan。

编译器Compiler根据用户任务去MetaStore中获取需要的Hive的元数据信息。

编译器Compiler得到元数据信息,对任务进行编译,先将HiveQL转换为抽象语法树,然后将抽象语法树转换成查询块,将查询块转化为逻辑的查询计划,重写逻辑查询计划,将逻辑计划转化为物理的计划(MapReduce), 最后选择最佳的策略。

将最终的计划提交给Driver。

Driver将计划Plan转交给ExecutionEngine去执行,获取元数据信息,提交给JobTracker或者SourceManager执行该任务,任务会直接读取HDFS中文件进行相应的操作。

获取执行的结果。

取得并返回执行结果。

创建表时:

解析用户提交的Hive语句–>对其进行解析–>分解为表、字段、分区等Hive对象。根据解析到的信息构建对应的表、字段、分区等对象,从SEQUENCE_TABLE中获取构建对象的最新的ID,与构建对象信息(名称、类型等等)一同通过DAO方法写入元数据库的表中,成功后将SEQUENCE_TABLE中对应的最新ID+5.实际上常见的RDBMS都是通过这种方法进行组织的,其系统表中和Hive元数据一样显示了这些ID信息。通过这些元数据可以很容易的读取到数据。


Hive编译过程

基本流程为:将HiveQL转化为抽象语法树再转为查询块然后转为逻辑查询计划再转为物理查询计划最终选择最佳决策的过程。


优化器的主要功能:


将多Multiple join 合并为一个Muti-way join

对join、group-by和自定义的MapReduce操作重新进行划分。

消减不必要的列。

在表的扫描操作中推行使用断言。

对于已分区的表,消减不必要的分区。

在抽样查询中,消减不必要的桶。

优化器还增加了局部聚合操作用于处理大分组聚合和增加再分区操作用于处理不对称的分组聚合。

12.png

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
SQL HIVE
Hive sql 执行原理
Hive sql 执行原理
77 0
|
SQL 存储 分布式计算
Hive底层原理:explain执行计划详解(一)
不懂hive中的explain,说明hive还没入门,学会explain,能够给我们工作中使用hive带来极大的便利!
927 0
|
5天前
|
SQL 存储 分布式计算
了解Hive 工作原理:Hive 是如何工作的?
Apache Hive 是一个建立在 Hadoop 之上的分布式数据仓库系统,提供类 SQL 查询语言 HiveQL,便于用户进行大规模数据分析。Hive Metastore(HMS)是其关键组件,用于存储表和分区的元数据。Hive 将 SQL 查询转换为 MapReduce 任务执行,适合处理 PB 级数据,但查询效率较低,不适合实时分析。优点包括易于使用、可扩展性强;缺点则在于表达能力有限和不支持实时查询。
17 3
|
7月前
|
SQL HIVE
Hive【Hive学习大纲】【数据仓库+简介+工作原理】【自学阶段整理的xmind思维导图分享】【点击可放大看高清】
【4月更文挑战第6天】Hive【Hive学习大纲】【数据仓库+简介+工作原理】【自学阶段整理的xmind思维导图分享】【点击可放大看高清】
183 0
|
7月前
|
SQL 存储 编解码
Hive中的压缩技术是如何实现的?请解释其原理和常用压缩算法。
Hive中的压缩技术是如何实现的?请解释其原理和常用压缩算法。
79 0
|
SQL 存储 资源调度
Hive 架构、执行原理【重要】
Hive 架构、执行原理【重要】
149 0
|
SQL 缓存 分布式计算
《离线和实时大数据开发实战》(四)Hive 原理实践2
《离线和实时大数据开发实战》(四)Hive 原理实践2
337 0
《离线和实时大数据开发实战》(四)Hive 原理实践2
|
SQL 存储 分布式计算
《离线和实时大数据开发实战》(四)Hive 原理实践1
《离线和实时大数据开发实战》(四)Hive 原理实践1
310 0
《离线和实时大数据开发实战》(四)Hive 原理实践1
|
SQL 存储 分布式计算
数据仓库工具之Hive的架构原理
数据仓库工具之Hive的架构原理
|
SQL HIVE
Hive底层原理:explain执行计划详解(二)
不懂hive中的explain,说明hive还没入门,学会explain,能够给我们工作中使用hive带来极大的便利!
375 0