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

这篇具有很好参考价值的文章主要介绍了【hive-design】hive架构详解:描述了hive架构,hive主要组件的作用、hsql在hive执行过程中的底层细节、hive各组件作用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文主要讨论了

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

一. Hive Architecture

架构图:
简述 hive 架构组成及各个组件的作用,hive,hive,架构,hadoop

如上图表达了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主要由以下四个模块组成:
简述 hive 架构组成及各个组件的作用,hive,hive,架构,hadoop

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目录对应的关系。文章来源地址https://www.toymoban.com/news/detail-763648.html

到了这里,关于【hive-design】hive架构详解:描述了hive架构,hive主要组件的作用、hsql在hive执行过程中的底层细节、hive各组件作用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软件运维工程师的主要职责描述

    软件运维工程师的主要职责描述 1 职责 1 、面向国网电力公司,进行信息系统性能监控模块运维,浙江本地性能监控系统运维,以及信息系统数据库运维工作,监测所有二级系统功能、性能、数据库等,对于出现问题的信息系统,能够从服务器、数据库、中间件、等环节检查

    2024年03月10日
    浏览(43)
  • 2、hive相关概念详解--架构、读写文件机制、数据存储

    1、apache-hive-3.1.2简介及部署(三种部署方式-内嵌模式、本地模式和远程模式)及验证详解 2、hive相关概念详解–架构、读写文件机制、数据存储 3、hive的使用示例详解-建表、数据类型详解、内部外部表、分区表、分桶表 4、hive的使用示例详解-事务表、视图、物化视图、DDL

    2024年02月09日
    浏览(38)
  • 【Jetpack】ViewModel 架构组件 ( 视图 View 和 数据模型 Model | ViewModel 作用 | ViewModel 生命周期 | 代码示例 | 使用注意事项 )

    Activity 遇到的问题 : 瞬态数据丢失 : 操作 Activity 时 , 如果 屏幕 自动旋转 , 当前 Activity 组件会 执行销毁操作 , 并重新创建新的 Activity 组件 , 该操作会 导致 Activity 的 瞬态数据 丢失 ; 内存泄漏 : 在 系统组件 如 Activity 中 , 启动了一个线程 , 在线程中执行一系列操作 , 如果 A

    2024年01月25日
    浏览(35)
  • Kubernetes架构与组件详解

    Kubernetes是由Google开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序的平台。Kubernetes充分利用了云计算和容器化技术,可以大幅简化应用程序的开发、部署和运行过程。 Kubernetes的优势主要包括以下几点: 高可用性 :Kubernetes可以在多个地理位置和云平台上运

    2024年02月05日
    浏览(32)
  • 电阻的主要作用及应用电路

    目录 一、分压作用 二、限流作用 三、分流作用 四、上拉下拉作用 五、滤波作用 六、假负载作用 七、跳线作用 八、将电能转换成热能的作用 上个视频我们讲解了电阻的主要参数,今天主要讲解下电阻的主要作用。 分压是电路中常用的功能,就是 通过电阻的串联得到我们

    2024年02月06日
    浏览(29)
  • 什么是API接口?主要作用是什么?

    API英文全称为:Application Programming Interface,中文意思是应用程序编程接口,它是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力。 主要作用: API之主要目的是提供应用程序与开发人员以访问一组例程的能力,而又无需访问源

    2024年02月13日
    浏览(28)
  • 【论文精读1】MVSNet架构各组件详解

    MVSNet(ECCV2018)是使用神经网络做三维重建的一篇经典论文,但大部分讲解其实都是翻译…看来看去最重要的网络训练各步骤原理和作用都是朦朦胧胧,感谢@朽一的博文用书来比喻特征图让我大致理解了整个过程。 下边结合我自己的理解做了图示来逐流程介绍,个人认为是比较

    2023年04月15日
    浏览(62)
  • OA系统的主要功能和作用是什么

    OA是将现代化办公和计算机网络功能结合起来的一种新型的办公方式。办公自动化没有统一的定义,凡是在传统的办公室中采用各种新技术、新机器、新设备从事办公业务,都属于办公自动化的领域。在行政机关中,大都把办公自动化叫做电子政务,企事业单位就大都叫OA,即办公自

    2024年02月06日
    浏览(34)
  • 贴片电容材质的区别与电容的主要作用

    主要是介质材料不同,不同介质种类由于它的主要极化类型不一样,其对电场变化的响应速度和极化率也不一样。在相同的体积下的容量就不同,随之带来的电容器介质的损耗、容量的稳定性也就不同。 介质材料划分按容量的温度稳定性可分为三类: 超稳定级(工类)的介

    2024年02月07日
    浏览(39)
  • 说一下JVM的主要组成部分及其作用?

    类加载器:根据给定的全限定名类名(如:java.lang.Object)来装载class文件到Runtime data area中的method area 执行引擎:执行classes中的指令 运行时数据区:这就是我们常说的JVM的内存 本地接口:与native libraries交互,是其它编程语言交互的接口 首先通过编译器把 Java 代码转换成字节码

    2024年02月22日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包