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

深入理解 Hadoop 上的 Hive 查询执行流程

在 Hadoop 生态系统中,Hive 是一个重要的分支,它构建在 Hadoop 之上,提供了一个开源的数据仓库系统。它的主要功能是查询和分析存储在 Hadoop 文件中的大型数据集,包括结构化和半结构化数据。Hive 在数据查询、分析和汇总方面发挥着关键作用,同时也有助于提高开发人员的生产力。然而,这种增加的生产力是以增加延迟和降低效率为代价的。

换句话说,Hive 可以被看作是 SQL 的一种变体,而且它确实是一种非常好的 SQL 变体。尽管如此,与传统数据库中的 SQL 系统相比,Hive 仍然有一定的差距。不过,Hive 具有许多用户定义函数,使得开发人员能够轻松为 UDF 做出贡献。

此外,Hive 还可以与各种 Hadoop 包进行连接,例如 RHive、RHipe,甚至 Apache Mahout。这使得在处理复杂的分析处理和具有挑战性的数据格式时,Hive 对开发人员社区非常有帮助。

更具体地说,所谓的“数据仓库”是指用于报告和数据分析的系统。它包括了检查、清理、转换和建模数据等步骤,旨在发现有用的信息并提出结论。

Hive架构

在下图中,Hive 教程阐述了 Hive 架构及其组件:
在这里插入图片描述
该组件图中有几个不同的单元。现在,我们来描述一下每个单元:

A. 用户界面
作为一个被广泛认知的数据仓库基础设施软件,Hive 提供了多种用户界面,以便用户与Hadoop分布式文件系统(HDFS)进行交互。这些界面包括了:

Hive Web UI
Hive 命令行
Hive HD Insight(适用于 Windows 服务器)
B. 元商店
Hive 使用元商店来存储表、数据库、表中的列、它们的数据类型以及它们在HDFS中的映射关系,以此来维护模式或元数据。这需要选择相应的数据库服务器来支持。

C. HiveQL 流程引擎
HiveQL(Hive Query Language)可以说是与传统的 SQL 类似,主要用于查询 Metastore 上的架构信息。此外,它也可以作为传统 MapReduce 程序的替代方案之一。开发人员可以使用 HiveQL 编写查询来处理 MapReduce 作业,而不需要编写 Java 程序来实现 MapReduce。

D. 执行引擎
Hive 执行引擎是 HiveQL 流程引擎和 MapReduce 的结合部分。它负责处理查询,并生成与 MapReduce 结果相同的结果。在处理过程中,它还采用了 MapReduce 的风格。

E. 数据存储技术:HDFS 或 HBase
在 Hive 中,数据存储技术主要有两种选择,即将数据存储到 Hadoop 分布式文件系统(HDFS)或者存储到 HBase。这两种技术提供了不同的数据存储解决方案,用户可以根据具体需求进行选择。

**

Hive 是如何工作的?

**
下图展示了Hive和Hadoop之间的工作流程——
在这里插入图片描述

让我们看看Hive与 Hadoop 框架的逐步工作流程:

  1. 执行查询
    首先,用户通过 Hive 界面(命令行或 Web UI)将查询发送到 Driver,即任何数据库驱动程序(如 JDBC、ODBC 等)来执行。

  2. 获取计划
    随后,驱动程序借助查询编译器解析查询,检查语法和查询计划或要求。

  3. 获取元数据
    编译器将元数据请求发送到 Metastore,以获取与查询相关的元数据信息。

  4. 发送元数据
    Metastore 将元数据作为响应发送给编译器。

  5. 发送计划
    编译器检查需求并将计划重新发送给驱动程序。至此,查询的解析和编译已经完成。

  6. 执行计划
    驱动程序将执行计划发送给执行引擎。

  7. 执行作业
    作业的执行过程内部是一个 MapReduce 作业。执行引擎将作业发送到名称节点中的 JobTracker,并将该作业分配给数据节点中的 TaskTracker。此外,查询在此阶段执行 MapReduce 作业。

  8. 元数据操作
    在执行过程中,执行引擎可以通过 Metastore 执行元数据操作。

  9. 获取结果
    执行结束后,执行引擎从数据节点接收结果。

  10. 发送结果
    获取结果后,执行引擎将这些结果值发送给驱动程序,最终发送到 Hive 接口。

通过以上步骤,我们可以清楚地了解 Hive 在 Hadoop 框架中的工作流程。

http://www.lryc.cn/news/330892.html

相关文章:

  • JS封装网页进入/退出全屏功能,兼容各大主流浏览器
  • el-table的复选框勾选整行变色
  • 一步一步写线程之八线程池的完善之二数据结构封装
  • go连接数据库(原生)
  • 【C语言】2048小游戏【附源码】
  • 部署项目遇到的各种问题总结
  • JavaSE:抽象类和接口
  • 发票是扫码验真好,还是OCR后进行验真好?
  • 【AIGC调研系列】AIGC+Jmeter实现接口自动化测试脚本生成
  • 前端|babel升级
  • 【微服务】spring状态机模式使用详解
  • 【算法刷题day14】Leetcode:144.二叉树的前序遍历、94.二叉树的中序遍历、145.二叉树的后序遍历
  • mysql闲谈
  • 物联网学习1、什么是 MQTT?
  • 【机器学习】数据探索(Data Exploration)---数据质量和数据特征分析
  • 软件测试(一)--简介+主流技能+分类+模型+流程
  • 技术引领,策略升级:腾讯云与你共探数字金融新篇章
  • 数据库-root密码丢失的重置方案(win11环境)
  • 免试生常问的一些问题汇总---专升本学习篇
  • FPGA的就业前景
  • 7.阻塞模式与非阻塞模式
  • Unity类银河恶魔城学习记录11-10 p112 Items drop源代码
  • EasyExcel 模板导出excel、合并单元格及单元格样式设置。 Freemarker导出word 合并单元格
  • 炫我科技:云渲染领域的佼佼者
  • VsCode正确解决vue3+Eslint+prettier+Vetur的配置冲突
  • 计算机网络—VLAN 间路由配置
  • 微服务篇-C 深入理解第一代微服务(SpringCloud)_VII 深入理解Swagger接口文档可视化管理工具
  • 区块链的应用领域:重塑未来的信任机制
  • 怎么在循环List的时候删除List的元素
  • SpringBoot+thymeleaf完成视频记忆播放功能