当前位置: 首页 > article >正文

hive架构简述

Hive起源于Facebook,Facebook公司有着大量的日志数据,而Hadoop是实现了MapReduce模式开源的分布式并行计算的框架,可轻松处理大规模数据。然而MapReduce程序对熟悉Java语言的工程师来说容易开发,但对于其他语言使用者则难度较大。因此Facebook开发团队想设计一种使用SQL语言对日志数据查询分析的工具,而Hive就诞生于此,只要懂SQL语言,就能够胜任大数据分析方面的工作,还节省了开发人员的学习成本。

Hive是建立在Hadoop文件系统上的数据仓库,它提供了一系列工具,能够对存储在HDFS中的数据进行数据提取、转换和加载(ETL),这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的工具。Hive定义简单的类SQL查询语言(即HQL),可以将结构化的数据文件映射为一张数据表,允许熟悉SQL的用户查询数据,允许熟悉MapReduce的开发者开发mapper和reducer来处理复杂的分析工作,与MapReduce相比较,Hive更具有优势。Hadoop 集群架构

Hadoop 集群主要由两个部分组成:HDFS(Hadoop Distributed File System)集群和 YARN(Yet Another Resource Negotiator)集群。

  1. HDFS 集群:负责海量数据的存储。
    • NameNode:主节点,负责管理文件系统的命名空间和控制对文件的访问。
    • DataNode:数据节点,负责存储实际的数据。
    • SecondaryNameNode:辅助NameNode,主要用来合并编辑日志和文件系统映像,以防NameNode故障。
  2. YARN 集群:负责海量数据运算时的资源调度。
    • ResourceManager:全局资源管理器,负责整个集群资源的分配和任务调度。
    • NodeManager:节点资源管理器,负责单个节点上的资源管理和任务监控。

Hive 架构

Hive 架构主要包括以下几个部分:

  1. 用户接口(Client):包括命令行接口(CLI)、JDBC/ODBC接口以及Web UI,用户通过这些接口提交SQL查询语句。
  2. 元数据存储(Metastore):存储表的元数据信息,如表名、列名、表的数据位置等。这些信息存储在关系型数据库中,如MySQL。
  3. Hive Driver:负责接收用户的查询语句,并调用元数据和查询处理器进行处理。
  4. 查询处理器(Query Processor):将用户提交的HiveQL语句转换为MapReduce或Tez等可执行计划。查询处理器包括解析器、编译器、优化器和执行器四个部分。
  5. Hive Execution Engine:执行计划的实际执行者,默认使用Hadoop MapReduce,也可以配置使用Apache Tez或Apache Spark。

Hive是底层封装了Hadoop的数据仓库处理工具,运行在Hadoop基础上,其系统架构组成主要包含4部分,分别是用户接口、跨语言服务、底层驱动引擎及元数据存储系统

在这里插入图片描述

基于Hadoop搭建的Hive执行查询流程和架构

  1. 用户提交查询:用户通过 Hive 界面(命令行或 Web UI)将查询发送到 Hive Driver。
  2. 获取计划:Hive Driver 借助查询编译器解析查询,检查语法和查询计划或要求。
  3. 获取元数据:编译器将元数据请求发送到 Metastore,以获取与查询相关的元数据信息。
  4. 发送元数据:Metastore 将元数据作为响应发送给编译器。
  5. 发送计划:编译器检查需求并将计划重新发送给 Hive Driver。至此,查询的解析和编译已经完成。
  6. 执行计划:Hive Driver 将执行计划发送给执行引擎,如MapReduce、Tez或Spark。
  7. 执行作业:作业的执行过程内部是一个 MapReduce 作业。执行引擎将作业发送到 YARN 的 ResourceManager,并将该作业分配给数据节点的 NodeManager。此外,查询在此阶段执行 MapReduce 作业。
  8. 元数据操作:在执行过程中,执行引擎可以通过 Metastore 执行元数据操作。
  9. 获取结果:执行结束后,执行引擎从数据节点接收结果。
  10. 发送结果:获取结果后,执行引擎将这些结果值发送给 Hive Driver,最终发送到 Hive 接口

Hive工作原理

Hive建立在Hadoop系统之上,因此Hive底层工作依赖于Hadoop服务,Hive底层工作原理如下所示。

在这里插入图片描述

(1) CLI将用户提交的HiveQL语句发送给DRIVER。
(2) DRIVER将HiveQL语句发送给COMPILER获取执行计划。
(3) COMPILER从METASTORE获取HiveQL语句所需的元数据。
(4) METASTORE将查询到的元数据信息发送给COMPILER。
(5) COMPILER得到元数据后,首先将HiveQL语句转换为抽象语法树,然后将抽象语法树转换为查询块,接着将查询块转换为逻辑执行计划,最后将逻辑执行计划转换为物理执行计划,并将物理执行计划解析为MapReduce任务发送给DRIVER。
(6) DRIVER将MapReduce任务发送给EXECUTION ENGINE(执行引擎)执行。
(7) CLI向DRIVER发送获取HiveQL语句执行结果的请求。
(8) DRIVER与EXECUTION ENGINE进行通信,请求获取HiveQL语句执行结果的请求。
(9) EXECUTION ENGINE向NameNode发送请求获取HiveQL语句执行结果的请求。


http://www.kler.cn/a/448114.html

相关文章:

  • Python读取Excel批量写入到PPT生成词卡
  • STM32F103 | Embedded IDE03 - 使用OpenOCD在STM32F103项目时出现下载固件失败
  • 算法设计期末复习
  • ASP.NET|日常开发中数据集合详解
  • Swin transformer 论文阅读记录 代码分析
  • CLION中运行远程的GUI程序
  • Android Retrofit2OkHttp3添加统一的请求头Header
  • 基于前端技术UniApp和后端技术Node.js的电影购票系统
  • 基于LabVIEW的USRP信道测量开发
  • Day-03 Vue(生命周期、生命周期钩子八个函数、工程化开发和脚手架、组件化开发、根组件、局部注册和全局注册的步骤)
  • 数智化医院分布式计算框架融合人工智能方向初步实现与能力转换浅析
  • 数位dp-acwing(数字游戏)
  • 基于单片机的步进电机控制系统的设计研究
  • 数据结构 (队列略版)
  • TCP常见问题
  • 如何在Ubuntu上利用Docker和Cpolar实现Excalidraw公网访问高效绘图——“cpolar内网穿透”
  • [极客大挑战 2019]HardSQL 1
  • 豆包MarsCode:小T的密码变换规则
  • RLDP(快速链路检测)防环
  • Rust vs C: PNG解码器性能之争的启示
  • Apple Vision Pro 开发教程:通过 TestFlight 把开发的程序安装到其他的设备上测试
  • C++算法第十二天
  • 一起学Git【番外篇:如何在Git中新建文件】
  • OpenCV图像分割
  • UITableView实现通讯录效果
  • 【漏洞-Oracle】未设置口令复杂度校验、密码有效期