Hive架构原理

embedded/2024/11/14 2:24:12/

Hive


Hive 的架构是设计用于在大数据环境下进行数据仓库操作和分析的系统。它建立在 Hadoop 生态系统之上,利用 Hadoop 的存储(HDFS)和计算(MapReduce、Tez、Spark 等)能力。
在这里插入图片描述

1. 元数据存储(Metastore):

在这里插入图片描述

  • Metastore 是 Hive 的元数据管理组件,负责存储表的结构信息、分区信息、表的存储位置等
  • 这些元数据通常存储在关系型数据库中,如 MySQL、Derby 等
  • Metastore 提供了对元数据的增删改查接口,使用户可以方便地管理表的元数据信息。

2. 查询解析和优化:

  • 当用户提交一个 HiveQL 查询时,Hive 的 Driver 模块负责接收并解析该查询,构建查询执行计划
  • 构建执行计划的过程中,Hive 会进行优化,包括逻辑优化、物理优化和执行计划生成。这些优化可以提高查询的执行效率,并减少资源消耗

3. 查询执行引擎(Execution Engine):

  • 执行引擎负责实际执行查询任务,它根据查询执行计划将任务分发到集群中的多个节点上执行。
  • Hive 支持多种执行引擎,包括传统的 MapReduce、更高效的 Tez、内存计算框架 Spark 等。用户可以根据需求选择合适的执行引擎。

4. 数据存储:

  • Hive 将数据存储在 Hadoop 分布式文件系统(HDFS)中,通常以文件的形式存储
  • 对于内部表(Managed Table),Hive 负责管理数据的存储路径和格式
  • 而对于外部表(External Table),用户可以自行管理数据的存储位置和格式

5. 任务调度和资源管理:

在这里插入图片描述

  • 在执行查询任务时,Hive 需要有效地管理集群资源并调度任务
  • 通常情况下,Hive 使用 YARN(Yet Another Resource Negotiator)作为资源管理器,负责为查询任务分配适当的资源,并监控任务的执行状态

6. 用户界面和客户端接口:

在这里插入图片描述

  • Hive 提供了多种用户界面和客户端接口,使用户可以方便地与系统交互。其中包括命令行界面(CLI)、Web UI、Hue 插件等。
  • 此外,Hive 还提供了 JDBC 和 ODBC 接口,使得用户可以通过标准的数据库连接方式与 Hive 进行交互

7. 扩展性和灵活性:

  • Hive 的架构设计具有良好的扩展性和灵活性,它可以与 Hadoop 生态系统中的其他组件(如 HBase、Kafka、Presto 等)紧密集成,以满足不同的数据处理和分析需求
  • 同时,Hive 还支持用户自定义函数(UDFs)、用户定义的聚合函数(UDAFs)和用户定义的表生成器(UDTFs),使得用户可以根据自身需求扩展 Hive 的功能。

8.Tips:

1.用户接口:Client

CLI(command-line interface)、JDBC/ODBC。
在这里插入图片描述

JDBC和ODBC的区别:

  • (1)JDBC的移植性比ODBC好(通常情况下,安装完ODBC驱动程序之后,还需要经过确定的配置才能够应用。而不相同的配置在不相同数据库服务器之间不能够通用。所以,安装一次就需要再配置一次。JDBC只需要选取适当的JDBC数据库驱动程序,就不需要额外的配置。在安装过程中,JDBC数据库驱动程序会自己完成有关的配置。)
  • (2)两者使用的语言不同,JDBC在Java编程时使用,ODBC一般在C/C++编程时使用

2.元数据:Metastore

  • 元数据包括:数据库(默认是default)、表名、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等
  • 默认存储在自带的derby数据库中,由于derby数据库只支持单客户端访问,生产环境中为了多人开发,推荐使用MySQL存储Metastore。
    在这里插入图片描述

3.驱动器:Driver

在 Hive 架构中,驱动器(Driver)是一个重要的组件,负责接收用户提交的 HiveQL 查询,然后解析、优化并执行这些查询。
在这里插入图片描述

1. 查询解析(Parsing):

  • 驱动器首先会对用户提交的 HiveQL 查询进行解析,将其转换成抽象语法树(Abstract Syntax Tree,AST)
  • 在这个过程中,它会检查查询语句的语法是否正确,以及查询中所引用的表是否存在等
    在这里插入图片描述

2. 查询优化(Optimization):

一旦查询被解析成 AST,驱动器会对其进行优化,以提高查询的执行效率。这个优化过程包括逻辑优化和物理优化两个方面:

  • 逻辑优化:驱动器会对查询进行逻辑优化,例如通过重写查询、合并查询片段等方式,消除查询中的冗余操作,从而减少查询执行的计算量。

  • 物理优化:一旦逻辑优化完成,驱动器会根据执行环境和数据特性选择合适的执行计划。这可能涉及选择合适的执行引擎、优化连接顺序、选择合适的算法等
    在这里插入图片描述


3. 查询执行计划生成(Execution Plan Generation):

  • 优化完成后,驱动器将生成一个执行计划(Execution Plan),描述了如何执行查询以及执行的顺序
  • 执行计划通常是一个有向无环图(DAG),其中每个节点表示一个查询操作,每个边表示数据流向

4. 任务调度和执行(Task Scheduling and Execution):

  • 一旦执行计划生成,驱动器将根据执行计划将任务分发到集群中的多个节点上执行
  • 包括将查询任务转换成 MapReduce 任务、Tez 任务、Spark 任务等,并将这些任务提交给相应的执行引擎执行。

5. 监控和错误处理(Monitoring and Error Handling):

  • 在查询执行过程中,驱动器负责监控任务的执行状态,并及时处理可能出现的错误
  • 它会收集任务执行的日志和统计信息,以便后续的调优和故障排除

6. 结果返回(Result Retrieval):

  • 最后,当查询执行完成后,驱动器会从执行引擎中收集查询结果,并将其返回给用户
  • 用户可以通过命令行界面、Web UI 或客户端接口等方式获取查询结果

驱动器在 Hive 架构中扮演着重要的角色,它负责接收、解析、优化和执行用户提交的查询,保证查询能够高效地在集群上执行,并及时返回执行结果给用户。


http://www.ppmy.cn/embedded/17281.html

相关文章

书生·浦语 大模型(学习笔记-5)XTuner 微调 LLM:1.8B、多模态、Agent

目录 一:两种微调 二、数据的一生 三、微调方案 四、XTuner 五、InternLM2 1.8B模型(相关知识) 一:两种微调 增量与训练和指令微调的区别 二、数据的一生 原始数据转换为标准格式数据 添加对话模板,直接调用即可…

Ventus(承影):基于RISC V的开源GPGPU

Ventus(承影):基于RVV的开源GPGPU 清华大学集成电路学院dsp-lab的承影RVV GPGPU设计文档。 整体目标 提供一个开源的基于RVV的GPGPU实现方案,并给出软件映射方案、指令集(支持的指令及特性、添加的自定义指令&#xf…

CSS-vminvmax单位

vmin 和 vmax 单位 vmin 是相对于视口宽度和高度中较小值进行计算,它的值为视口宽度和高度中的较小值的百分比。 例如,如果视口宽度为 800px,高度为 1000px,那么 1vmin 等于 8px(800px 的 1%)。 vmax 是…

李彦宏:程序员将不复存在! 周鸿祎回怼!网友:先把百度程序员都开除了!

近日,百度创始人、董事长兼首席执行官李彦宏在央视《对话》•开年说的访谈中指出:“基本上说以后其实不会存在“程序员”这种职业了,因为只要会说话,人人都会具备程序员的能力”。 “未来的编程语言只会剩下两种,一种…

掌控基础设施,加速 DevOps 之旅:IaC 深度解析

在当今的 DevOps 世界中,基础设施即代码(IaC)是一个非常重要的概念。它在整个行业几乎无处不在,是现代工程角色的绝对关键。 本文将主要包含 IaC 的定义和它的好处,同时将 Walrus 作为最佳实践来进行详细讲解。 什么是…

Solidity Fundamentals

目录 1、修饰符(external、public、internal、private)的区别 2、在智能合约中这四个不同的区别代表的含义this msg block tx 3、self destruct(合约销毁) 1. 什么情况下需要使用合约销毁? 2.用法:sel…

java垃圾回收机制

java垃圾回收机制 我们知道,Java会自动管理和释放内存,它不像C/C那样要求我们手动管理内存,JVM提供了一套全自动的内存管理机制,当一个Java对象不再用到时,JVM会自动将其进行回收并释放内存,那么对象所占内…

linux下 Mysql8.0 离线安装

环境:centos7.9 MysqlL8.0.36安装包 链接:https://pan.baidu.com/s/1bKwHr05z8Ye82dT9tntdUA 提取码:3a5z 参考Centos安装MYSQL8(离线可用) 文章目录 1、解压安装2、配置启动2.1 修改配置文件2.2 mysql 启动 3、mysql 测试 1、解压安装 #…