数仓工具Hive 概述

news2024/11/15 12:23:26

Hive

    • Hive简介
    • Hive架构
    • HiveSQL语法不同之处
      • 建表语句
      • 查询语句
    • Hive查看执行计划
    • Hive文件格式

Hive简介

Hive是由Facebook开源,基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。
通过Hive可以将mapreduce程序的复杂编写过程抽象为简单的sql语句,它提供一种sql语句到mapreduce程序的映射,提高了开发效率。
另外:
(1)Hive中每张表的数据存储在HDFS
(2)Hive分析数据底层的实现是MapReduce(也可配置为Spark或者Tez)
(3)执行程序运行在Yarn上

Hive架构

其架构如下图所示,
在这里插入图片描述

  • Hive Client
    其中Hive Client就代表我们的客户端,如同mysql的client一样,不同的是这里有两种客户端,一种是本地的命令行接口CLI(command-line interface),另一种是远程通过JDBC等连接的客户端,这种远程连接的需要使用HiveServer2来统一代理,在远程访问Hive数据时,客户端并未直接访问Hadoop集群,而是由Hivesever2代理访问。

  • Metastore
    元数据包括:数据库(默认是default)、表名、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等。注意:这里只存储抽线出来的表的信息,真正的元数据还是保存在HDFS上的。(可以只有空表,也可以在hdfs上有数据,但是没有对应的元数据表,这两个的映射是通过hive实现的)元数据默认保存在一个自带的derby数据库中,但是derby数据库只支持单客户端访问,生产环境中为了多人开发,推荐使用MySQL存储Metastore。

  • Driver
    对sql语句做语法分析,解析,优化,然后交给对应执行引擎(可以是mapreduce,也可以是spark,tez等)执行的一个模块,包含以下几部分:
    (1)解析器(SQLParser):将SQL字符串转换成抽象语法树(AST)
    (2)语义分析(Semantic Analyzer):将AST进一步划分为QeuryBlock
    (3)逻辑计划生成器(Logical Plan Gen):将语法树生成逻辑计划
    (4)逻辑优化器(Logical Optimizer):对逻辑计划进行优化
    (5)物理计划生成器(Physical Plan Gen):根据优化后的逻辑计划生成物理计划
    (6)物理优化器(Physical Optimizer):对物理计划进行优化
    (7)执行器(Execution):执行该计划,得到查询结果并返回给客户端

  • Hadoop
    数据使用HDFS进行存储,可以选择MapReduce/Tez/Spark进行计算。资源的调度基于Yarn。Hadoop中HDFS,Yarn和MapReduce部分见之前的文章。

HiveSQL语法不同之处

和普通sql语法不同的几个在于窗口函数,炸裂函数,以及用户自定义函数UDF等,当然,建表语句也有很多不同的,包括分区,分桶等。此外,对应的数据类型也更为复杂,包括array,map和struct等。

建表语句

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name   
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...) 
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format] 
[STORED AS file_format]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]

查询语句

SELECT [ALL | DISTINCT] select_expr, select_expr, ...
  FROM table_reference       -- 从什么表查
  [WHERE where_condition]   -- 过滤
  [GROUP BY col_list]        -- 分组查询
   [HAVING col_list]          -- 分组后过滤
  [ORDER BY col_list]        -- 排序
  [CLUSTER BY col_list
    | [DISTRIBUTE BY col_list] [SORT BY col_list]

Hive查看执行计划

Hive查看执行计划的语句和sql类似,

EXPLAIN [FORMATTED | EXTENDED | DEPENDENCY] query-sql

注:FORMATTED、EXTENDED、DEPENDENCY关键字为可选项,各自作用如下。

  • FORMATTED:将执行计划以JSON字符串的形式输出
  • EXTENDED:输出执行计划中的额外信息,通常是读写的文件名等信息
  • DEPENDENCY:输出执行计划读取的表及分区

Explain呈现的执行计划,由一系列Stage组成,这一系列Stage具有依赖关系,每个Stage对应一个MapReduce Job,或者一个文件系统操作等。

Hive文件格式

为Hive表中的数据选择一个合适的文件格式,对提高查询性能的提高是十分有益的。Hive表数据的存储格式,可以选择text file、orc、parquet、sequence file等。
text file和sequence file是基于行存储的,默认是text file,文本文件中的一行内容,就对应Hive表中的一行记录。

ORC和parquet都是基于列存储的,基于列存储方便对数据指定压缩算法, 减少网络io和磁盘占用,且sql语句中往往只需要特定列。
这两种基于列存储的文件格式类似,解析式都需要从末尾先读取特定字段的一个代表长度的数据,然后向前解析,且列数据和列的元数据信息(数据信息包含了该列的数据类型、该列的编码方式、位置等信息。)也单独存放的。
其中parquet是目前使用的主流格式。

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

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

相关文章

数字IC前端学习笔记:仲裁轮询(三)

相关文章 数字IC前端学习笔记:LSFR(线性反馈移位寄存器) 数字IC前端学习笔记:跨时钟域信号同步 数字IC前端学习笔记:信号同步和边沿检测 数字IC前端学习笔记:锁存器Latch的综合 数字IC前端学习笔记&am…

mitmproxy抓包原理

文章目录 mitmproxy原理详解1 mitmproxy 基本原理2 作为中间代理获取HTTP请求信息2.1 应对显式HTTP请求2.2 应对隐式HTTP请求 3 作为中间代理获取HTTPS请求信息3.1 显式HTTPS请求1) 获取远程主机名2) 处理主题备用名称SAN3) 处理服务器名称指示SNI4) 显式HTTPS请求信息获取整个…

基于深度学习的高精度烟雾检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度烟雾检测识别系统可用于日常生活中或野外来检测与定位烟雾目标,利用深度学习算法可实现图片、视频、摄像头等方式的烟雾目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

为什么数据库字段建议设置为NOT NULL?

目录 一、性能 二、开发的友好性 三、聚合函数不准确 四、null与其它值计算 五、distinct、group by、order by的问题 六、索引问题 七、其它问题 一、性能 如果查询中包含可为null的列,对MYSQL来说更难优化,因为可为null的列使得索引、索引统计…

NUCLEO-F411RE RT-Thread 体验 (9) - GCC环境 PWM的驱动移植以及简单使用

NUCLEO-F411RE RT-Thread 体验 (9) - GCC环境 PWM的驱动移植以及简单使用 驱动移植 驱动位于drv_pwm.c文件中,components层代码位于rt_drv_pwm.c中。 修改Makefile文件 修改配置文件rtconfig.h LED2链接PA5,而TIM2_CHANNEL1可从PA5输出PWM&#xff0…

ubuntu命令

查看当前用户 whoami 进入root权限 sudo su 修改用户名密码 sudo passwd username #修改用户密码 //username是用户设置用户名,记得替换 sudo passwd root #修改root密码 https://blog.csdn.net/m0_54647521/article/details/127521032 重启…

图形编辑器开发:以光标位置缩放画布

大家好,我是前端西瓜哥。 画布缩放是图形设计工具中很重要的基础能力。 通过它,我们可以像举着一台摄影机,在图形所在的世界到处游逛,透过镜头,可以只看自己想看的图形;可以拉近摄影机,看到图…

SpringBoot 如何使用 @ControllerAdvice 注解进行全局异常处理

SpringBoot 如何使用 ControllerAdvice 注解进行全局异常处理 在 Web 开发中,异常处理是非常重要的一环。在 SpringBoot 框架中,我们通常使用 ExceptionHandler 注解来处理 Controller 层的异常。但是,如果想要处理全局异常,我们…

【MySql】MySql事务常见操作

文章目录 准备工作事务常见操作方式总结 准备工作 将mysql的默认隔离级别设置成读未提交 set global transaction isolation level read uncommitted;注意:设置完毕之后,需要重启终端,进行查看 select tx_isolation 创建测试表 mysql>…

HTML5 的新特性

html基础知识html基础知识_上半场结束,中场已休息,下半场ing的博客-CSDN博客html5的新特性HTML5 的新特性_上半场结束,中场已休息,下半场ing的博客-CSDN博客 目录 1.0 HTML5 的新特性 1.1 HTML5 新增的语义化标签 1.2 HTML5 新增的…

LabVIEW何得知是谁在连接远程前面板

LabVIEW何得知是谁在连接远程前面板 想要知道连接远程前面板的用户的身份。如何来得知用户的身份和他们连接远程前面板的时间? 解答: 可以使用Remote Panel: Connections To Clients属性或者Remote Panel Client Connections方法来得知连接远程面板用户的身份。Re…

TypeScript ~ TS 掌握编译文件配置项 ⑤

作者 : SYFStrive 博客首页 : HomePage 📜: TypeScript ~ TS 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &…

【2023,学点儿新Java-20】流程控制语句关键字及其介绍:while、do、break、continue、return

前情回顾: 【2023,学点儿新Java-19】Java特殊空类型关键字 | Java流程控制语句关键字 | switch-case 选择结构的执行过程&注意点 | 详解:for循环的普通和增强版本【2023,学点儿新Java-18】Java关键字汇总说明 |附&#xff1a…

chatgpt赋能python:Python新手常见的报错提示及解决方法

Python新手常见的报错提示及解决方法 Python是一种非常流行的编程语言。对于新手来说,Python在学习过程中可能会遇到许多报错提示,这些提示可能会让人感到很困惑。本文将介绍Python新手常见的报错提示,并提供解决方法。 IndentationError: …

ninja的简单使用

文章目录 Ninja安装windows环境Linux环境 入门使用与CMake一起使用 Ninja安装 windows环境 问题的解决通常有多种方法。按照结果的好坏程度,可以将解决方法简单的划分为,上中下三个层次,见:为什么谋士总喜欢提上中下三策? 在w…

SpringBoot 如何使用 @RestControllerAdvice 注解进行 RESTful 异常处理

SpringBoot 如何使用 RestControllerAdvice 注解进行 RESTful 异常处理 在 SpringBoot 应用程序中,RESTful 异常处理是一个非常重要的话题。当 RESTful API 出现异常时,我们需要对异常进行处理,以保证 API 的稳定性和可靠性。SpringBoot 提供…

【SpringBoot】SpringBoot的发展沿革,相关介绍,特点,重要策略以及安装步骤讲解

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖&#x1f…

Java·Map和Set

文章目录 🏯1. 搜索🏯1.1 概念及场景1.2 模型 🏰2. Map 的使用🏰2.1 关于Map的说明2.2 关于Map.Entry的说明2.3 Map 的常用方法说明2.4 TreeMap的使用案例2.5HashMap源码分析 ⛺️3. Set 的说明⛺️3.1 常见方法说明 &#x1f3ed…

设计模式—访问者模式

需求:店铺采购了一批水果(苹果及橘子),现在市场监督局来店里检查过期的水果。 public class Fruit {private String name;private Date pickDate;public Fruit(String name, Date pickDate) {this.name name;this.pickDate pic…

【Unity之IMGUI】—位置信息类和控件基类的封装

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏: ⭐…