Hive架构原理

news/2024/5/9 10:19:11

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.mrgr.cn/p/84238435

相关文章

如何从0到1设计诊断系统

诊断系统设计主要涵盖了诊断方案设计、诊断需求定义和诊断数据库开发。本文会逐一介绍这些环节,以便更好地理解和把握诊断系统设计的全貌。引言在整车电子电气体系中,诊断系统的设计扮演着至关重要的角色,负责支持整车的刷写、故障排查和EOL(End of Line)等关键操作。这一重…

springboot实现https双向认证

1.生成证书#生成服务端密钥文件localhost.jks keytool -genkey -alias xdd-server -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -keystore xdd-server.jks -dname CN=pero,OU=pero,O=pero,L=sz,ST=gd,C=cn -validity 3650 -storepass xxx-password-xxx -keypass xxx-pass…

JDK源码分析-Vector

概述 Vector 是 Java集合中线程安全的动态数组,它也可以根据需要进行扩容和缩容,与 ArrayList 类似。但有一个重要的区别,Vector 是同步的,也就是它的操作是线程安全的,在某些特定场景下是可以保证线程安全的,但同时也会带来性能损耗,因此在单线程环境通常还是推荐使用 …

(windows ssh) windows开启ssh服务,并通过ssh登录该win主机

☆ 问题描述 想要通过ssh访问win主句 ★ 解决方案 安装ssh服务 打开服务 如果这里开不来就“打开服务”,找到下面两个开启服务 然后可以尝试ssh链接,注意,账号密码,账号是这个: 密码是这个 同理,如果…

【React】Sigma.js框架网络图-入门篇

一、介绍 Sigma.js是一个专门用于图形绘制的JavaScript库。 它使在Web页面上发布网络变得容易,并允许开发人员将网络探索集成到丰富的Web应用程序中。 Sigma.js提供了许多内置功能,例如Canvas和WebGL渲染器或鼠标和触摸支持,以使用户在网页上…

改善员工绩效管理的 8 种最佳方法

企业如何改进绩效管理体系,才能获得最好的结果?请仔细阅读,找出答案… 人力资源部门对组织的成功起着至关重要的作用,组织的员工也是如此。更好的组织管理会带来更高的利润。人力资源部门的工作很大一部分就是规范绩效管理体系,营造员工能做出最好的工作、发挥最大能力的工…

【数据结构】时间复杂度的例题

🎁个人主页:我们的五年 🔍系列专栏:数据结构 🌷追光的人,终会万丈光芒 目录 🌷例题1: 🌷例题2: 🌷例题3: 🌷例题4&am…

amCharts图像分类

代码案例<!DOCTYPE html> <html><head><script src="https://cdn.amcharts.com/lib/5/index.js"></script><script src="https://cdn.amcharts.com/lib/5/xy.js"></script><script src="https://cdn.am…

车用MCU,R7F701320EAFP、R7F701321EAFP、R7F701322EAFP、R7F701323EAFP微控制器功耗低,闪存容量高达2MB

RH850/P1M 是适用于底盘系统的汽车微控制器,功耗低,闪存容量高达 2 MB,RAM 容量高达 128 KB。RH850/P1M——适用于底盘系统的汽车用微控制器 简介 RH850/P1M 微控制器功耗低,闪存容量高达 2 MB,RAM 容量高达 128 KB,具有增强型电机控制定时器、CAN 接口、SENT 和 PSI5 等…

Recommended Azure Monitors

General This document describes the recommended Azure monitors which can be implemented in Azure cloud application subscriptions. SMT incident priority mapping The priority “Blocker” is mostly used by Developers to prioritize their tasks and its not a…

主打熟人双向社交,UXLINK 如何用群组打造超强社交生态

社交&#xff0c;作为最强 Web3 流量入口 Web2 世界里&#xff0c;社交产品总是最具想象力。全球使用 Facebook 系列产品的日活用户&#xff08;DAP&#xff09;均值近 30 亿人&#xff0c;占全球人口的 1/3。然而&#xff0c;加密货币用户仅约有 4.2 亿&#xff0c;占全球人口…

Apache RocketMQ ACL 2.0 全新升级

我们推出了 RocketMQ ACL 2.0 升级版,进一步提升 RocketMQ 数据的安全性。本文将介绍 RocketMQ ACL 2.0 的新特性、工作原理,以及相关的配置和实践。作者:徒钟 引言 RocketMQ 作为一款流行的分布式消息中间件,被广泛应用于各种大型分布式系统和微服务中,承担着异步通信、系…

说说你对分而治之、动态规划的理解?区别?

一、分而治之 分而治之是算法设计中的一种方法,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并 关于分而治之的实现,都会经历三个步骤:分解:将原问题分解为若干个规模较小,相对独立,与原问题…

【C语言】深入解析选择排序算法

一、算法原理二、算法性能分析三、C语言实现示例四、总结 一、算法原理 选择排序&#xff08;Selection Sort&#xff09;是一种简单直观的排序算法。它的工作原理是不断地选择剩余元素中的最小&#xff08;或最大&#xff09;元素&#xff0c;放到已排序的序列的末尾&#xff…

科普:嵌入式代码软件在环(SiL)测试的可靠性

​​关键词:嵌入式系统、软件在环(SiL)、测试、生命周期01.简介当前,嵌入式系统开发的大趋势为通过软件实现大量的硬件功能,这导致软件的复杂程度显著上升——代码开发成本和风险也成倍增加。复用已有系统中的软件组件是改进嵌入式系统生命周期的一种可能的解决方案,对代…

hitcontraining_heapcreator

[BUUCTF]hitcontraining_heapcreator UAF|Off-By-One|堆溢出 对应libc版本libc6_2.23-0ubuntu9_amd64 [*] /home/bamuwe/heapcreator/heapcreatorArch: amd64-64-littleRELRO: Partial RELROStack: Canary foundNX: NX enabledPIE: No PIE (0x3fc000)bamu…

django自定义构建模板,通过bootstrap实现菜单隐藏和显示

实现后的界面1.自定义页面模板实现 主页面代码(home.html) {% extends layout.html %} #引用模板 {% load static %} {% block content %}<h3>欢迎登录</h3> {% endblock %}自定义内容layout.html文件设置(模板){% load static %} {% load menu %} #导入me…

五一~感恩回馈,SolidKits工具折扣来袭!

SOLIDWORKS插件多样且丰富,有着不同的种类和用途,可以为SOLIDWORKS软件本身提升使用效率,更快速的响应你的操作方式。SolidKits自主设计研发多款SOLIDWORKS增效插件,包括:自动化参数设计插件、高级BOM插件、批量编码器插件、标准件增强工具等,也可提供按需定制开发服务。…

蓝桥杯2024年第十五届省赛真题-握手问题

方法一&#xff1a;模拟 #include<bits/stdc.h> using namespace std; #define int long long const int n1e6; int a,b[n],c; signed main() {for(int i1;i<50;i){for(int ji1;j<50;j){if(i<7&&j<7){continue;}c;}}cout<<c<<endl; }方…

wstunnel (websocket模式ssh)

接上一篇 修改客户端运行参数 ssh -o ProxyCommand"./wstunnel client -L stdio://%h:%p ws://192.168.254.131:8080" 127.0.0.1 其中127.0.0.1为服务端的本地ssh访问&#xff0c;可以修改为通过服务端访问其他设备的ssh服务。例如&#xff1a; ssh -o ProxyComma…