hive 开窗函数_Hive的架构剖析

a3d97018e56903d51888ae9dea50de7a.png

本文主要介绍Hive的架构和以及HQL的查询阶段,主要内容包括:

  • Hive的架构
  • 架构中的相关组件介绍
  • HQL的查询阶段

Hive的架构

hive的基本架构图如下图所示:

0bd2a9c5d36dc321d2f7e18f870c228e.png

相关组件介绍

  • 数据存储

Hive中的数据可以存储在任意与Hadoop兼容的文件系统,其最常见的存储文件格式主要有ORC和Parquet。除了HDFS之外,也支持一些商用的云对象存储,比如AWS S3等。另外,Hive可以读入并写入数据到其他的独立处理系统,比如Druid、HBase等。

  • Data catalog

Hive使用Hive Metastore(HMS)存储元数据信息,使用关系型数据库来持久化存储这些信息,其依赖于DataNucleus(提供了标准的接口(JDO, JPA)来访问各种类型的数据库资源 ),用于简化操作各种关系型数据库。为了请求低延迟,HMS会直接通过DataNucleus直接查询关系型数据库。HMS的API支持多种编程语言。

  • 执行引擎

最初版本的Hive支持MapReduce作为执行引擎,后来又支持

Tez和Spark作为执行引擎,这些执行引擎都可以运行在YARN上。

  • 查询服务

Hiveserver2(HS2)允许用户执行SQL查询,Hiveserver2允许多个客户端提交请求到Hive并返回执行结果,HS2支持本地和远程JDBC和ODBC连接,另外Hive的发布版中包括一个JDBC的客户端,称之为Beeline。

  • Hive客户端

Hive支持多种客户端,比如Python, Java, C++, Ruby等,可以使用JDBC、ODBC和Thrift drivers连接Hive,Hive的客户端主要归为3类:

(1)Thrift Clients

Hive的Server是基于Apache Thrift的,所以支持thrift客户端的查询请求

(2)JDBC Client

允许使用Java通过JDBC driver连接Hive,JDBC driver使用Thrift与Hive进行通信的

(3)ODBC Client

Hive的ODBC driver允许使用基于ODBC协议的应用来连接Hive,与JDBC driver类似,ODBC driver也是通过Thrift与Hive server进行通信的

  • Hive Driver

Hive Driver接收来自客户端提交的HQL语句,创建session handles,并将查询发送到Compiler(编译器)。

  • Hive Compiler

Hive的Compiler解析查询语句,编译器会借助Hive的metastore存储的元数据信息,对不同的查询块和查询表达式执行语义分析和类型检查,然后生成执行计划。

编译器生成的执行计划就是DAG,每个Stage可能代表一个MR作业。

  • Optimizer(优化器)

比如列裁剪、谓词下推等优化,提升查询效率

执行过程

  • Step1:执行查询
    通过客户端提交查询
  • Step2:获取执行计划
    dirver接收到查询,会创建session handle,并将该查询传递给编译器,生成执行计划
  • Step3:获取元数据
    编译器会向metastore发送获取元数据的请求
  • Step4:发送元数据
    metastore向编译器发送元数据,编译器使用元数据执行类型检查和语义分析。编译器会生成执行计划(DAG),对于MapReduce作业而言,执行计划包括map operator trees
    reduce operator tree
  • Step5:发送执行计划
    编译器向Driver发送生成的执行计划
  • Step6:执行查询计划
    从编译器那里获取执行计划之后,Driver会向执行引擎发送执行计划
  • Step7:提交MR作业
  • Step8:返回查询结果

将查询结果通过Driver返回个查询客户端

HQL的查询阶段

Hive的查询阶段如下图所示,具体分析如下:

270dd69a178c36e6f736fd6f33c59a32.png

如上图所示,

  • 1.用户提交查询到HS2
  • 2.该查询被Driver处理,由编译器会解析该查询语句并从AST中生成一个Calcite逻辑计划
  • 3.优化逻辑计划,HS2会访问关于HMS的元数据信息,用来达到验证和优化的目的
  • 4.优化的逻辑计划被转换为物理执行计划
  • 5.向量化的执行计划
  • 6.生成具体的task,可以是mr或者spark、Tez,并通过Driver提交任务到YARN
  • 7.执行结束后将结果返回给用户

总结

本文首先介绍了Hive的架构,并对每个组件进行了描述。然后阐述了Hive的具体执行过程,最后对HQL的执行阶段进行了说明。

往期精彩回顾

数仓|Hive性能调优指北

Hive的条件函数与日期函数全面汇总解析

Hive开窗函数实战

http://weixin.qq.com/r/Gi99ZWjEjDXzrSwG93oI (二维码自动识别)

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

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

相关文章

ntr模式_ntr什么意思?求详细解释。。。

展开全部是俚语,表示环境的意32313133353236313431303231363533e59b9ee7ad9431333433623738思。1、语法:(1)可指影响人们生活的各种抽象和具体的“状况,环境”。可以接由that引导的主语从句,从句中的谓语动词一般要用虚拟式(多为动…

小程序switch内部加上文字_文字游戏大全:模拟游戏会长经营公会的小程序,你会管理公会吗?...

40000游戏爱好者已加入我们!每天推荐好玩游戏!加入我们,沐沐带你发现好游戏!《游戏会长》游戏小程序好玩吗?《游戏会长》小游戏怎么玩?只有你想不到,没有我找不到的好游戏!「良心好游…

php实现第三方邮箱登录_JavaScript实现第三方登录网站原理在这呢

点关注,不迷路,每天更新大量前端资料前端实现第三方登录之OAuth2.0协议OAuth 2.0 规定了四种获得令牌的流程。我们可以选择最适合自己的那一种,向第三方应用颁发令牌。下面就是这四种授权方式。授权码模式(authorization-code)简化模式(impli…

pfx证书密码怎么查询_网站是HTTP?10分钟变成HTTPS!域名免费添加配置SSL证书,变成https//环境...

对于小程序request请求需要https域名、navigator.geolocation定位也需要在https环境下才可以生效等问题;前端开发越来越需要https环境来来测试一下API接口和各类问题,今天来讲解一下怎么免费快速把普通的http网站配置升级成https协议。首先向大家介绍一下…

define定义的是什么类型_为什么Django 3后建议使用Field.choices枚举类型定义choices选项...

Django 3.0的主要新增功能之一是对模型字段选择的枚举。它是一种定义和约束模型Field.choices的更好方法。以前在Django模型中通常会通过定义一些“常量”和元组来定义choices,如下所示:from django.db import modelsclass Book(models.Model):UNPUBLISH…

linux卸载openjdk_Linux系列(七)——linux其他指令【rpm、yum、sudo】

1、rpm和yum1.1、介绍rpm: rpm 是由 Red Hat 公司开发的一种软件包管理方式,使用 rpm 我们可以方便的进行软件的安装、查询、卸载等工作,但是使用 rpm 命令安装 rpm 软件包,不能自己解决软件包之间的依赖性问题,需要自己一个一个去…

postgresql 客户端_一款功能强大的数据库客户端:DataGrip

前言在我们日常的程序开发中,很大一部分时间是在与数据库打交道。查数据,导数据,检查SQL执行计划,优化SQL等,是我们数据库开发工作的重要组成部分,而且很多时候我们会使用到多款数据库,如Oracle…

mysql主从同步报错_mysql主从同步报错

主从不同步,经查看发现如下报错Last_Errno: 1666​Last_Error: Error executing row event: Cannot execute statement: impossible to write to binary log since statement is in row format and BINLOG_FORMAT STATEMENT.问题原因:主从复制&#xff…

java 等待几秒_问懵逼:请站在 JVM 角度谈谈 Java 的锁?

存在的问题自旋锁自适应自旋Java 对象的内存布局(重要)synchronized 锁升级流程偏向锁轻量级锁重量级锁可重入悲观锁(互斥锁、排他锁)《Java 2019 超神之路》《Dubbo 实现原理与源码解析 —— 精品合集》《Spring 实现原理与源码解析 —— 精品合集》《MyBatis 实现原理与源码解…

mysql 创建新用户权限_MySQL创建新用户以及权限授予

1.通过mysql数据库的user表查看用户相关信息mysql> use mysql;mysql> select host,user from user;查看用户相关信息2.创建数据库mysql> create database [databasename] default character set utf8 collate utf8_general_ci;3.创建新用户mysql> create user user…

中秋祝福网页_中秋客户维系关怀,该送客户什么礼品?

企业节日礼品是企业间或者商务伙伴之间相互传达美好情意的一种体现,无论是送领导、送员工、还是送合作伙伴,礼品定制都需要根据不同赠送对象来细心选择。如果想要礼品有创意同时又能表达企业理念,进而达到宣传推广或者品牌认知提升的效果&…

浏览器svg插件_Archer-svgs: 异步加载svg方案

Github地址: ShanaMaid/archer-svgs哇哦!无限的svgs!你可以使用archer-svgs去异步加载svg并将它缓存在localStorage里,当你再次使用已经加载过的svg时将不需要再发起http请求。将svgs从你的js-bunlde里移除,并且永远减小js-bunlde的体积。&am…

php打开网页执行即执行bat程序_CVE202011107:XAMPP任意命令执行漏洞复现

0x00简介XAMPP是一个把Apache网页服务器与PHP、Perl及MariaDB集合在一起的安裝包,允许用戶可以在自己的电脑上轻易的建立网页服务器。该软件与phpstudy类似。2020年4月1日ApacheFriends官方发布了XAMPP新版本,该更新解决了Windows Platforms CVE-2020-11…

阿里云rocketmq_云原生时代消息中间件的演进路线

作者 | 周礼(不铭) 阿里巴巴集团消息中间件架构师导读:本文整理自作者于 2020 年云原生微服务大会上的分享《云原生时代的消息中间件演进》,主要探讨了传统的消息中间件如何持续进化为云原生的消息服务。关注阿里巴巴云原生公众号…

mongodb mysql配置_Nosql_MongoDB数据库配置以及基本指令

数据库(database)-数据库的服务器-服务器用来保存数据-mongod用来启动服务器-数据库的客户端-客户端用来操作服务器,对数据进行增删改查的操作-mongo用来启动客户端(不能关闭启动的服务器,否则新开的客户端无法连接)扩展:将mongodb设置为系统…

kafka学习_Kafka 学习笔记01

Kafka概念和基本架构概述以下内容来自拉勾课程学习拉勾教育 - 拉勾旗下教育平台一、Kafka介绍Kafka是最初由 Linkedin 公司开发,是一个 分布式、分区的、多副本的、多生产者、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统&a…

php 随机在文章中添加锚文本_锚文本对网站SEO优化有什么帮助?

对于优化人员来说,网站在做优化时都会在网站关键词或长尾词上添加锚文本,锚文本又称锚文本链接,是链接的一种形式。那么描文本的添加对网站优化都有什么好处呢?下面一起来了解一下。一、锚文本为网站传递权重在更新网站内容时&…

malloc 结构体_二进制安全之堆溢出(系列)——堆基础 amp; 结构(二)

哈喽啊这里是二进制安全之堆溢出(系列)第二期“堆基础 & 结构”第二节!!话不多说,直接上干货!微观结构函数执行流程void *malloc (size_t bytes) void *__libc_malloc (size_t bytes) //对于_int_mallo…

深入理解计算机系统第四版_深入理解计算机系统之存储器层次结构

我的计算机模型是这样的:CPU执行指令,内存犹如一个巨大的字节数组,存储着指令和数据,硬盘保存着各种程序与程序用到的数据。I/O完成输入输出的功能。在本文中我们抛开I/O,谈一谈关于CPU,内存,硬…

java jmeter_使用Jmeter中的Java Request进行性能测试

在使用jmeter进行性能测试的时候,有可能会需要通过一些脚本去测试性能,(比如通过sokeeper的api去测试sokeeper的读写性能)。这时,我们可以通过Java Request实现,以下是操作步骤。首先创建一个maven project。因Jmeter的Java Reque…