【hive-design】hive架构详解:描述了hive架构,hive主要组件的作用、hsql在hive执行过程中的底层细节、hive各组件作用

文章目录

  • 一. Hive Architecture
  • 二. Metastore
    • 1. Metastore Architecture
    • 2. Metastore Interface
  • 三. Compiler
  • 四. hive架构小结

本文主要讨论了

  • 描述了hive架构,hive主要组件的作用
  • 详细描述了hsql在hive执行过程中的底层细节
  • 描述了hive各组件作用

一. Hive Architecture

架构图:
在这里插入图片描述

如上图表达了hive的主要组件和以及与hadoop的交互:

主要的hive组件:

  1. UI:用户提交接口,用于用户提交查询和其他操作等。
  2. Driver:接收查询的组件。该组件实现了会话句柄(ing),并提供基于 JDBC/ODBC 接口的execute、 fetch APIs。
  3. Compiler:该组件解析查询,在不同查询块和查询表达式中做语义分析,最终借助从metastore查找的表和分区元数据生成执行计划。
  4. MetaStore:存储所有表、分区的结构化信息包括:列和列类型信息、读写数据所需的序列化器和反序列化器以及相关存储的hdfs文件(?)。
  5. Execution Engine:执行由Compiler生成的执行计划。执行计划是一个由stages组成的有向无环图,执行引擎管理stage之间的依赖关系,并让合适的组件执行对应的stage。

 

看下一个查询触发的hive行为

UI调用执行接口将查询发送到Driver,Driver创建了查询的session handle(会话句柄),并发送查询到Compiler来产生执行计划。Compiler从metastore中获取必要的元数据,这些元数据用于对查询树中的表达式进行类型检查,并根据查询谓词修剪分区。
 
compiler生成的执行计划是一系列组成DAG的stages,每一个stage可能是map/reduce任务、元数据操作或在HDFS的操作。
 
对于map/reduce stage,执行计划包含了map操作符树(执行在mapper上),reduce操作符树(执行在reduce上)。执行引擎提交这些stage到合适的组件上(steps 6, 6.1, 6.2 and 6.3)。
 
和表或中间结果相关的反序列化器用于读取HDFS文件的行,并通过相关的算子树传递这些行。当产生输出结果时,(为了防止不需要reduce,)mapper会通过序列化器将结果写出到一个HDFS临时文件,用于给下游stage提供数据。
 
dml和查询操作:
对于DML操作,最终的临时文件会被移到表的位置。且因为文件重命名是HDFS的原子操作,所以保证了任务不会读取脏数据。
对于查询操作,执行引擎直接从HDFS读取临时文件的内容,作为Driver fetch call的一部分。

 

二. Metastore

Metastore提供了数据仓库的两个重要但经常被忽视的特性:数据概述和数据发现。

  1. 如果没有Hive提供的数据概述,用户必须在查询的同时提供有关数据格式、提取器和加载器的信息。在Hive中,这个信息在表创建时给出,并且在每次表被引用时重用。这与传统的仓储系统非常相似。
  2. 数据发现,它使用户能够发现和探索仓库中的相关和特定数据。可以使用此元数据构建其他工具,以公开并可能增强有关数据及其可用性的信息。

 

1. Metastore Architecture

元数据是存储在数据库或文件后端的对象存储。数据库支持的存储是使用称为DataNucleus的对象关系映射(ORM)解决方案实现的。

将其存储在关系数据库中的主要动机是元数据的可查询性。但会存在同步和伸缩性的问题。

对于存储在HDFS上,因为无法对文件的随机更新,现在还没有明确的方法在HDFS上实现对象存储。这一点,再加上关系存储的可查询性优势,使我们的方法变得合理。

可以通过远程和嵌入式两种方式来配置Metastore。详情见:

https://cwiki.apache.org/confluence/display/Hive/AdminManual+Metastore+Administration

 

2. Metastore Interface

Metastore提供了一个Thrift接口来操作和查询Hive元数据。Thrift可以绑定到许多流行语言中。第三方工具可以通过该接口将Hive元数据集到其他业务元数据存储库中。

 

三. Compiler

Parser :

将查询转换为解释树表达式

 

Semantic Analyser:语义分析器

  • 解析树表达式转换为内部查询表达式,内部查询表达式是基于块的而不是算子树(ing)。

  • 此过程中还会执行:验证列名并展开(select)* 、类型检查和任何隐式类型转换。

  • 如果表是分区表,则收集该表的所有表达式,以便稍后使用它们来删除不需要的分区。如果查询指定了采样,那么也将收集采样以供以后使用。

 
Logical Plan Generator:逻辑计划产生器:

  • 转换内部查询表达式为逻辑计划,逻辑计划由算子树组成。
    其中一些算子是关系代数运算符,如“过滤”、“连接”等。一些算子是Hive特有的,稍后将该计划转换为一系列map-reduce作业。比如发生在map-reduce边界的reduceSink算子。
  • 此过程还包括优化器转换逻辑计划以提高性能,如下:
    – 将一系列join转换为单个multi-way join
    – map端执行group-by部分聚合
    – 分两个阶段执行group-by,以避免单个reducer因group key导致数据倾斜而成为瓶颈的情况。
  • 每个操作符包含一个描述符,它是一个可序列化的对象。

 
Query Plan Generator:查询计划产生器。

  • 将逻辑计划转变为一系列的map-reduce任务。操作符树被递归地遍历,被分解成一系列map-reduce可序列化的任务,这些任务稍后提交给Hadoop分布式文件系统的map-reduce框架
  • reduceSink算子是map-reduce边界,算子描述符中包含reduction key,作为map-reduce边界。
  • 如果查询中明确了samples/partitions,计划还会包含samples/partitions。
  • 执行计划会被序列化写到一个文件中。

 

上述参考官网:hive-Design
 

四. hive架构小结

Hive主要由以下四个模块组成:
在这里插入图片描述

1.用户接口模块
用来实现对hive的访问,有CLI、HWI、JDBC、Thrift Server等

  • Cli(Command Line Interface):即命令行操作,类似sql

  • web ui(界面基本不用)

  • 通过jdbc/odbc进行连接:一般地hive连接:jdbc:hive2://(hive所在节点的)主机名:10000;

从上面的架构图可以看到,通过JDBC、ODBC连接,先会经过Thrift Server,然后再到Driver;其他通过command line和hive web interface则直接和Driver进行交互。

 

2.thrift server

即跨语言服务层:它将其他语言(java,c,python)转化为hive可识别的语言可以让不同的编程语言调用Hive的接口。

其中hive提供的Thrift 接口可以让用户通过JDBC连接发送HiveQL请求到thrift接口,然后交由 Driver,最后Thrift将执行结果返回客户端。

 
3.Driver
Hive执行的核心流程:

解释器:将Hql语句转化为抽象的语法树(提取关键字);

编译器:将抽象语法树编译成mapreduce任务;

优化器:对编译结果进行优化(任务的合并);

执行器:最后由 Executor 执行器进行执行。

 

  1. Meta Store

1)hive元数据可以存储在mysql中。默认元数据存储在一个自带的关系型数据库derby,但因为是单用户企业不适用。

2)hive元数据的储存内容:表数据的字段信息(字段名,字段类型,字段顺序)、表名信息表、以及和hdfs目录对应的关系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/180557.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes入门篇

文章目录 🔊博主介绍🥤本文内容Kubernetes是什么?为什么需要 Kubernetes,它能做什么?Kubernetes 版本进化Kubernetes 概念Kubernetes 中 3 个重要概念 📢文章总结📥博主目标 🔊博主介…

毫米波雷达DOA角度计算----Capon算法

算法实现如下: parameter:雷达参数设置。 antVet:目标点 对应的非相参积累天线数据。 function [angle,doa_abs] caponMethod(parameter,antVec)txAntenna parameter.txAntenna; % 发射天线 [1 1]rxAntenna parameter.rxAntenna; % 接…

Java第十二篇:连接安全版kafka(Kerberos认证)出现的问题解答

Could not find a ‘KafkaClient’ entry in the JAAS configuration 问题现象 问题原因 原因没有找到,怎么引起的倒是很清楚。原因就是找到不到指定路径下的kafka_client_jaas.conf文件,别看我的路径带了两个//,但没问题的,等同…

梦极光(ez_re?)

ez_re 先查壳看看,没有壳 32位 我先说说这道题 打开分析找到主函数 在这里就是flag了,用十六进制转ascii码 我们先运行这个程序看看 我想说说我的想法 首先没看出来这里是十六进制转ascii码其次41D538数组用来干啥来的?题目里面给出的请…

Micropython STM32F4外部中断实验

Micropython STM32F4外部中断实验 📌固件刷可参考前面一篇《STM32刷Micropython固件参考指南》🌿 相关篇《Micropython STM32F4入门点灯》📍固件下载:https://micropython.org/download/?mcustm32f4🔖本例程基于STM32…

网络运维与网络安全 学习笔记2023.11.28

网络运维与网络安全 学习笔记 第二十九天 今日目标 OSPF汇总之域间路由、OSPF汇总之外部路由、OSPF链路认证 OSPF安全认证之区域认证、OSPF虚链路 OSPF汇总指域间路由 项目背景 企业内网运行多区域的OSPF网络,在R1 上存在多个不稳定的链路 R1上的不稳定链路&a…

纯cpp如何模拟qt的信号与槽

纯cpp如何模拟qt的信号与槽 我之前是如何使用bind的?一.demo示例二.简单来讲,c自带的bind与function函数,如何实现类似信号与槽的机制1. 简单语法2. function与bind联动尝试1尝试2真正实现流程图 自我反思 我之前是如何使用bind的? 一.demo示例 using MsgHander std::funct…

数据结构-交换排序(冒泡、快速)

冒泡排序 基本思想 先将第一个记录与第二个记录比较,将较大的记录放到第二个位置上,之后再将第二个记录与第三 个记录比较,将较大的记录放到第三个位置上,如此类推,知道比较完最后一个位置,此时注意到 …

红队攻防之hash登录RDP

没什么好害怕,孩子放心去飞吧,在你的身后有个等你的家 Restricted Admin Mode 受限管理模式是一项 Windows 功能,可防止将 RDP 用户的凭据存储在建立 RDP 连接的计算机的内存中。 这是用来防止用户(管理员)在 RDP 进…

shopee数据:如何获取Shopee平台的数据

在如今快速发展的跨境电商市场中,Shopee(虾皮)作为一个备受关注的平台,主要服务于东南亚市场。对于卖家来说,了解Shopee平台的数据是非常重要的,因为这可以帮助他们更好地了解市场趋势、优化商品策略并提高…

Ubuntu 20.0 + mysql 8.0 用户和密码修改

第一步 下载(简单,注意联网)Ubuntu 终端输入以下两行命令 (1) 数据库的服务端及客户端数据库的开发软件包 sudo apt-get install mysql-server mysql-client (2) 数据库的开发软件包 sudo apt-get install libmysqlclient-dev 第二步 查看是否安装成功 …

血的教训--redis被入侵之漏洞利用复现--总览

血的教训–redis被入侵之漏洞利用复现–总览 相信大家对于自己的服务器被入侵,还是比较憎恨的,我的就被攻击了一次,总结经验,自己也是整理了这一个系列,从最基础到最后面的自己总结被攻破的步骤,非常清晰的…

20世纪30年代的大危机

背景 1929年9月,美国财政部部长安德鲁梅隆向公众保证“现在没有担心的理由,这一繁荣的高潮将会继续下去”。 当时流行的一首儿歌:“梅隆拉响汽笛,胡佛敲起钟,华尔街发出信号,美国往地狱里冲!”…

Elasticsearch:向量搜索 (kNN) 实施指南 - API 版

作者:Jeff Vestal 本指南重点介绍通过 HTTP 或 Python 使用 Elasticsearch API 设置 Elasticsearch 以进行近似 k 最近邻 (kNN) 搜索。 对于主要使用 Kibana 或希望通过 UI 进行测试的用户,请访问使用 Elastic 爬虫的语义搜索入门指南。你也可以参考文章…

聚观早报 |红魔9 Pro开卖;真我GT5 Pro定档

【聚观365】11月29日消息 红魔9 Pro开卖 真我GT5 Pro定档 一加12镜头细节公布 Redmi K70 Pro将搭载夜枭算法 苹果Vision Pro头显下月量产 红魔9 Pro开卖 红魔电竞旗舰最新力作——红魔9 Pro系列正式发布。作为一款全能电竞旗舰,该机搭载了第三代骁龙8移动平台…

计网Lesson4 - 计算机组网模型

文章目录 计算机的连接方式1. 两台计算机的互联2. 多台计算机的互联(旧式)3. 多台计算机的互联 --- 集线器(Hub)4. 网桥5. 多台计算机的互联 --- 交换器(Switch) 计算机的连接方式 1. 两台计算机的互联 网…

web框架,django,路由控制,视图层(补充)

web框架 是什么? web 框架是什么---》别人帮咱们写了一些基础代码---》我们只需要在固定的位置写固定的代码--》就能实现一个web应用 Web框架(Web framework)是一种开发框架,用来支持动态网站、网络应用和网络服务的开发。这大多…

漏洞扫描-德迅云安全漏洞扫描服务

漏洞扫描是指基于漏洞数据库,通过扫描等手段对指定的远程或者本地计算机系统的安全脆弱性进行检测,发现可利用漏洞的一种安全检测的行为。 漏洞扫描的主要目的是发现系统、网络或应用程序中可能存在的安全漏洞和缺陷,以便及时修复这些漏洞和缺…

python实验3 石头剪刀布游戏

实验3:石头剪刀布游戏 一、实验目的二、知识要点图三、实验1. 石头剪刀布2. 实现大侠个人信息 一、实验目的 了解3类基本组合数据类型。理解列表概念并掌握Python中列表的使用。理解字典概念并掌握Python中字典的使用。运用jieba库进行中文分词并进行文本词频统计。…

C/C++ 发送与接收HTTP/S请求

HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的协议。它是一种无状态的、应用层的协议,用于在计算机之间传输超文本文档,通常在 Web 浏览器和 Web 服务器之间进行数据通信。HTTP 是由互联网工程任务组(IETF…