Hive 数据仓库介绍

news2024/11/27 7:41:32

目录

​编辑

一、Hive 概述

1.1 Hive产生的原因

1.2 Hive是什么?

1.3 Hive 特点

1.4 Hive生态链关系

二、Hive架构

2.1 架构图

2.2 架构组件说明

2.2.1 Interface

2.2.1.1 CLI

2.2.1.2 JDBC/ODBC

2.2.1.3 WebUI

2.2.2 MetaData

2.2.3 MetaStore

2.2.4 Hiveserver2

2.2.5 Driver

2.2.5.1 解释器

2.2.5.2 编译器

2.2.5.3 优化器

2.2.5.4 执行器

三、Hive的工作原理

3.1 工作流程及原理图

3.2 工作流程说明

四、Hive的优缺点

4.1 优点

4.2 缺点

五、Hive数据模型

5.1 数据库

5.2 表

5.2.1 内部表

5.2.2 外部表

5.3 分区

5.4 桶

六、字段类型分类

6.1基本类型

6.1.1 Numeric     Type

6.1.2 Date/Time Type

6.1.3 Misc Type

6.1.4 String Type

6.2 复杂类型

七、查询语言分类

7.1 DDL

7.2 MDL

7.3 DQL


一、Hive 概述

1.1 Hive产生的原因

1)方便对文件及数据的元数据进行管理,提供统一的元数据管理方式

2)提供更加简单的方式来访问大规模的数据集,使用SQL语言进行数据分析

1.2 Hive是什么?

官网的解析:The Apache Hive ™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL. Structure can be projected onto data already in storage. A command line tool and JDBC driver are provided to connect users to Hive.

hive是一个构建在Hadoop上的数据仓库工具(框架)。
可以将结构化的数据文件映射成一张数据表,并可以使用类sql的方式来对这样的数据文件进行读,写以及管理(包括元数据)。

1.3 Hive 特点

Hive具有如下特点:

1)Hive是一个构建于Hadoop顶层的 数据仓库工具 ,可以查询和管理PB级别的分布式数据。
2)支持大规模数据存储、分析,具有良好的可扩展性
3)某种程度上可以看作是 用户编程接口 ,本身不存储和处理数据。
4)依赖分布式文件系统HDFS存储数据。
5)依赖分布式并行计算模型MapReduce处理数据。
6)定义了简单的类似SQL 的查询语言——HiveQL。
7)用户可以通过编写的HiveQL语句运行MapReduce任务。
8)可以很容易把原来构建在关系数据库上的数据仓库应用程序移植到Hadoop平台上。
9)是一个可以提供有效、合理、直观组织和使用数据的分析工具。

Hive具有的特点非常适用于 数据仓库 。

1)采用批处理方式处理海量数据。数据仓库存储的是静态数据,对静态数据的分析适合采用批处理方式,不需要快速响应给出结果,而且数据本身也不会频繁变化;
2)提供适合数据仓库操作的工具。Hive本身提供了一系列对数据进行提取、转换、加载(ETL)的工具,可以存储、查询和分析存储在Hadoop中的大规模数据。这些工具能够很好地满足数据仓库各种应用场景;
3)支持MapReduce,Tez,Spark等多种计算引擎;
4)可以直接访问HDFS文件以及HBase;
5)易用易编程。

1.4 Hive生态链关系

Hive是Hadoop生态的一员,依托于Hadoop生态,赋予了其强大的生命力。Hive与其他Hadoop组件的关系为

1)Hive依赖于HDFS 存储数据
2)Hive依赖于MapReduce 处理数据
3)在某些场景下Pig可以作为Hive的替代工具
4)HBase 提供数据的实时访问

二、Hive架构

2.1 架构图

2.2 架构组件说明

2.2.1 Interface

Hive提供三个主要的用户接口。

2.2.1.1 CLI

CLI 是Shell命令行接口,提供交互式 SQL 查询

2.2.1.2 JDBC/ODBC

JDBC/ODBC 是Hive的Java数据接口实现,使远程客户端可以通过Hiveserver2查询数据;例如 beeline 方式

2.2.1.3 WebUI

用户可以通过浏览器访问Hive页面,查看Hive使用的信息

2.2.2 MetaData

Hive将元数据存储在RMDB中,如MySQL\Derby\Postgresql。元数据包括表结构、表名、列属性、分区信息、权限信息及Location等信息。

2.2.3 MetaStore

Hive提供的元数据查询服务,通过MetaStore管理、操作元数据

2.2.4 Hiveserver2

基于thrift的跨平台、跨编程语言的Hive查询服务。为Hive客户端提供远程访问、查询服务

2.2.5 Driver

Hive 的核心是驱动引擎, 驱动引擎由解释器、编译器、优化器、执行器四部分组成

2.2.5.1 解释器

解释器的作用是将 HiveSQL 语句转换为抽象语法树(AST Abstract-Syntax-Tree)

2.2.5.2 编译器

编译器是将语法树编译为逻辑执行计划

2.2.5.3 优化器

优化器是对逻辑执行计划进行优化

2.2.5.4 执行器

执行器是调用底层的运行框架执行逻辑执行计划

三、Hive的工作原理

3.1 工作流程及原理图

3.2 工作流程说明

1) 用户把查询任务提交给Driver驱动程序

2)驱动程序将Hql发送给编译器Compiler

3)编译器Compiler根据用户查询任务去MetaStore中获取需要的Hive的元数据信息

4)编译器Compiler得到元数据信息,对任务进行编译

4.1)依据Antlr语法规则,解析HiveQL并转换为AST抽象语法树
4.2)遍历AST抽象语法树,抽象出查询的基本组成单元QueryBlock(查询块)
4.3)依据QueryBlock生成逻辑执行计划
4.4)优化、重写逻辑执行计划,合并不必要的ReduceSinkOperator,降低shuffle
4.5)依据逻辑执行计划生成物理执行计划,也就是Hive Job的Task树(默认是MapReduce Job)
4.6)优化、重写物理执行计划

5)将最终的执行计划(Hive Job)提交给Driver。到此为止,查询解析和编译完成

6)Driver将执行计划(Hive Job)转交给ExecutionEngine去执行

7)在Yarn上,执行作业的过程默认是一个MapReduce任务

7.1)执行引擎发送作业给JobTracker
7.2)JobTracker将task下发给到TaskTracker执行
7.3)task读、写HDFS数据

四、Hive的优缺点

4.1 优点

1)高可靠、高容错:HiveServer采用集群模式。双MetaStor。超时重试机制。
2)类SQL:类似SQL语法,内置大量函数。
3)可扩展:自定义存储格式,自定义函数。
4)多接口:Beeline,JDBC,ODBC,Python,Thrift。

4.2 缺点

1)延迟较高:默认MR为执行引擎,MR延迟较高。
2)不支持雾化视图:Hive支持普通视图,不支持雾化视图。Hive不能再视图上更新、插入、删除数据。
3)不适用OLTP:暂不支持列级别的数据添加、更新、删除操作。
4)暂不支持存储过程:当前版本不支持存储过程,只能通过UDF来实现一些逻辑处理。

五、Hive数据模型

Hive中元数据(即对数据的描述,包括表,表的列及其它各种属性)一般存储在MySQL等数据库中的,因为这些数据要不断的更新,修改,不适合存储在HDFS中。而真正的数据是存储在HDFS中,这样更有利于对数据做分布式运算。

Hive中主要包括四类数据模型:

数据库:Hive 中的DB类似传统数据库的DataBase。
表 :Hive中的表和关系型数据库中的表在概念上很类似,每个表在HDFS中都有相应的目录用来存储表的数据;
分区 :在Hive中,表的每一个分区对应表下的相应目录,所有分区的数据都是存储在对应的目录中;
桶 :对指定的列计算其hash,根据hash值切分数据,目的是为了并行,每一个桶对应一个文件(注意和分区的区别)。

5.1 数据库

类似传统数据库的DataBase,默认数据库"default"。

数据库切换指令:use xxx;

创建数据库:

hive > create database test_dw;

5.2 表

Hive 表跟关系数据库里面的表类似。逻辑上,数据是存储在 Hive 表里面的,而表的元数据描述了数据的布局。我们可以对表执行过滤,关联,合并等操作。在 Hadoop 里面,物理数据一般是存储在 HDFS 的,而元数据是存储在关系型数据库的。

Hive 有下面两种表:内部表、外部表。当我们在 Hive 创建表的时候,Hive 将以默认的方式管理表数据,也就是说,Hive 会默认把数据存储到 /user/hive/warehouse 目录里面。除了内部表,我们可以创建外部表,外部表需要指定数据的目录。

5.2.1 内部表

当我们把数据 load 到内部表的时候,Hive 会把数据存储在 /user/hive/warehouse 目录下(warehouse地址是在 hive-site.xml 中由hive.metastore.warehouse.dir属性指定的数据仓库的目录)。

CREATE TABLE managed_table (dummy STRING);
LOAD DATA INPATH '/user/tom/data.txt' INTO table managed_tabl

根据上面的代码,Hive 会把文件 data.txt 文件存储在 managed_table 表的 warehouse 目录下,即 hdfs://user/hive/warehouse/managed_table 目录。

如果我们用 drop 命令把表删除,这样将会把表以及表里面的数据和表的元数据都一起删除。

DROP TABLE managed_table

5.2.2 外部表

外部表与内部表的行为上有些差别。我们能够控制数据的创建和删除。删除外部表的时候,Hive 只会删除表的元数据,不会删除表数据。数据路径是在创建表的时候指定的:


 

CREATE EXTERNAL TABLE external_table (dummy STRING)
LOCATION '/user/tom/external_table';
LOAD DATA INPATH '/user/tom/data.txt' INTO TABLE external_table;

利用 **EXTERNAL** 关键字创建外部表,Hive 不会去管理表数据,所以它不会把数据移到 /user/hive/warehouse 目录下。甚至在执行创建语句的时候,它不会去检查建表语句中指定的外部数据路径是否存在。这个是比较有用的特性,我们可以在表创建之后,再创建数据。

外部表还有一个比较重要的特性,上面有提到的,就是删除外部表的时候,Hive 只有删除表的元数据,而不会删除表数据。

5.3 分区

为了提高查询数据的效率,Hive 提供了表分区机制。分区表基于分区键把具有相同分区键的数据存储在一个目录下,在查询某一个分区的数据的时候,只需要查询相对应目录下的数据,而不会执行全表扫描,也就是说,Hive 在查询的时候会进行分区剪裁。每个表可以有一个或多个分区键。

创建分区表语法:

CREATE TABLE table_name (column1 data_type, column2 data_type)
PARTITIONED BY (partition1 data_type, partition2 data_type,….);

下面通过一个例子来更好的理解分区概念:

假如你有一个存储学生信息的表,表名为 student_details,列分别是 student_id,name,department,year 等。现在,如果你想基于 department 列对数据进行分区。那么属于同一个 department 的学生将会被分在同一个分区里面。在物理上,一个分区其实就是表目录下的一个子目录。

假如你在 student_details 表里面有三个 department 的数据,分别为 EEE,ECE 和 ME。那么这个表总共就会有三个分区,也就是图中的绿色方块部分。对于每个 department ,您将拥有与该 department 相关的所有数据,这些数据位于表目录下的单独子目录中。

假如所有 department = EEE 的学生数据被存储在 /user/hive/warehouse/student_details/department=EEE 目录下。那么查询 department 为 EEE 的学生信息,只需要查询 EEE 目录下的数据即可,不需要全表扫描,这样查询的效率就比较高。而在真实生产环境中,你需要处理的数据可能会有几百 TB,如果不分区,在你只需要表的其中一小部分数据的时候,你不得不走全表扫描,这样的查询将会非常慢而且浪费资源,可能 95% 的数据跟你的查询语句并没有关系。

5.4 桶

对指定的列计算其hash,根据hash值切分数据,目的是为了并行,每一个桶对应一个文件(注意和分区的区别)。

Hive 可以对每一个表或者是分区,进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive 是针对表的某一列进行分桶。Hive 采用对表的列值进行哈希计算,然后除以桶的个数求余的方式决定该条记录存放在哪个桶中。分桶的好处是可以获得更高的查询处理效率。使取样更高效。

分桶表创建命令:

CREATE TABLE table_name
PARTITIONED BY (partition1 data_type, partition2 data_type,….) 
CLUSTERED BY (column_name1, column_name2, …) 
SORTED BY (column_name [ASC|DESC], …)] 
INTO num_buckets BUCKETS;

每个桶只是表目录或者分区目录下的一个文件,如果表不是分区表,那么桶文件会存储在表目录下,如果表是分区表,那么桶文件会存储在分区目录下。所以你可以选择把分区分成 n 个桶,那么每个分区目录下就会有 n 个文件。从上图可以看到,每个分区有 2 个桶。因此每个分区就会有 2 个文件,每个文件将会存储该分区下的数据。

六、字段类型分类

Hive支持原始数据类型和复杂类型,原始类型包括数值型,Boolean,字符串,时间戳。复杂类型包括数组,map,struct。官网地址:https://cwiki.apache.org/confluence/display/hive/languagemanual+types

6.1基本类型

6.1.1 Numeric     Type

数值类下包含:tinyint、small int、int/integer、bigint、float、double、numertic、decimal

6.1.2 Date/Time Type

时间类型:timestamp、date、interval

6.1.3 Misc Type

Boolean 、BINARY

6.1.4 String Type

字符串类型:String 、varchar、char

6.2 复杂类型

arrays、maps、structs、union

七、查询语言分类

7.1 DDL

大致包含以下部分内容:

* CREATE DATABASE/SCHEMA, TABLE, VIEW, FUNCTION, INDEX
* DROP DATABASE/SCHEMA, TABLE, VIEW, INDEX
* TRUNCATE TABLE
* ALTER DATABASE/SCHEMA, TABLE, VIEW
* MSCK REPAIR TABLE (or ALTER TABLE RECOVER PARTITIONS)
* SHOW DATABASES/SCHEMAS, TABLES, TBLPROPERTIES, VIEWS, PARTITIONS, FUNCTIONS, INDEX[ES], COLUMNS, CREATE TABLE
* DESCRIBE DATABASE/SCHEMA, table_name, view_name, materialized_view_name

详细内容,可参考官网地址:LanguageManual DDL - Apache Hive - Apache Software Foundation

7.2 MDL

大致包含以下部分内容:

* LOAD
* INSERT
  * into Hive tables from queries
  * into directories from queries
  * into Hive tables from SQL
* UPDATE
* DELETE
* MERGE

详细内容,可参考官网地址:LanguageManual DML - Apache Hive - Apache Software Foundation

7.3 DQL

Hive select 常规语法与 Mysql 等 RDBMS SQL 几乎无异,大致包含以下部分内容:

* Select Syntax
  * WHERE Clause
  * ALL and DISTINCT Clauses
  * Partition Based Queries
  * HAVING Clause
  * LIMIT Clause
  * REGEX Column Specification
  * More Select Syntax

详细内容,可参考官网地址:LanguageManual Select - Apache Hive - Apache Software Foundation

今天Hive相关内容就分享到这里,如果帮助到大家,欢迎大家点赞+关注+收藏,有疑问也欢迎大家评论留言!

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

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

相关文章

tokenizers总结

简介 tokenize的目标是把输入的文本流,切分成一个个子串,每个子串相对有完整的语义,便于学习embedding表达和后续模型的使用。 tokenize有三种粒度:word/subword/char word词,是最自然的语言单元。对于英文等自然语…

通过数据导入导出功能批量重命名文件名称更简单

在日常工作中,我们经常需要对大量的文件进行重命名,以方便管理和查找。然而,手动一个一个修改文件名称的方式不仅费时费力,而且容易出错。为了提高工作效率,我们可以使用一款名为“固乔文件管家”的软件来实现文件的批…

【MySQL多表查询以及事务、索引】

1. 多表查询 1.1 概述 1.1.1 数据准备 #建议:创建新的数据库 create database db04; use db04;-- 部门表 create table tb_dept (id int unsigned primary key auto_increment comment 主键ID,name varchar(10) not null unique comment 部门名称…

基于自编译的onlyoffice镜像,关于修改字体的问题

基于自编译的onlyoffice镜像,关于修改字体的问题 自编译onlyoffice镜像来自于 https://blog.csdn.net/Gemini1995/article/details/132427908 该镜像里面没有documentserver-generate-allfonts.sh文件,所以需要自己创建一个(建议放在/usr/b…

C++笔记之引用折叠规则

C笔记之引用折叠规则 文章目录 C笔记之引用折叠规则1. 当两个左值引用结合在一起时,它们会折叠成一个左值引用。2. 当一个左值引用和一个右值引用结合在一起时,它们会折叠成一个左值引用。3. 当两个右值引用结合在一起时,它们也会折叠成一个右…

Mybatis学习笔记9 动态SQL

Mybatis学习笔记8 查询返回专题_biubiubiu0706的博客-CSDN博客 动态SQL的业务场景: 例如 批量删除 get请求 uri?id18&id19&id20 或者post id18&id19&id20 String[] idsrequest.getParameterValues("id") 那么这句SQL是需要动态的 还…

CI/CD与DevOps:您需要知道的8个核心区别

CI/CD是一种让程序员能迅速并可靠地更新代码的做法。而DevOps则包括一系列方法和思想,这些让开发和运维的人都能更好地协作,使得整个产品从设计到使用都能更加高效地完成。尽管CI/CD和DevOps都是为了让软件开发更高效,但它们在具体怎么做上有…

苹果mac笔记本部分按键失灵怎么回事?5连option键即可解决

苹果mac部分按键突然失灵怎么办? 使用万能的重启大法,数字键 7,8,9 以及 m 等按键失灵,但是其他按键正常。 使用外接键盘发现是可以正常输入的,难道是笔记本键盘坏了?要去售后维修吗? 苹果mac笔记本部分按…

解决Python中的JSON序列化Bug TypeError: Object of type ‘int64‘ is not JSON serializable

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页: 🐅🐾猫头虎的博客🎐《面试题大全专栏》 🦕 文章图文并茂&#x1f996…

9_16搜索练习

填涂颜色 此时的递归是可以停下来的&#xff0c;我们需要做到开工没有回头箭&#xff08;不能让他往回走&#xff09; 此处使用的1标记走过的点&#xff0c;&#xff01;0证明走过&#xff0c;走过就停 #include <bits/stdc.h> using namespace std; int a[32][32],b[32]…

看期权哪个软件更好用?数据比较全面直观的那种?

在介绍期权看盘软件之前&#xff0c;我们先来了解一下期权交易的发展史。2015年&#xff0c;国内首只期权上市交易&#xff0c;2019年深交所期权上市&#xff0c;期权市场越来越火&#xff0c;期权分仓软件也是横空出世发展至今&#xff0c;下文介绍看期权哪个软件更好用&#…

链路聚合和VRRP链路聚合

目录 链路聚合 基本术语 配置链路聚合的条件 手工模式 负载分担 LACP模式 活动链路的选举 LACP模式配置 VRRP VRRP的基本概念 VRRP的定时器 VRRP的主备选举 VRRP主备切换 VRRP抢占模式(Preempt Mode) : VRRP监视上行端口 VRRP和MSTP结合应用 VRRP的基本配置 …

信息安全 科技评估分类

声明 本文是学习GB-T 42776-2023 科技评估分类. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 6 编码方法 科技评估分类代码由基本分类代码和7个附加分类代码组成&#xff0c;代码结构如图2所示。 图 2 科技评估分类代码结构图 GB/T 42776—2023 …

uniapp——实现base64格式二维码图片生成+保存二维码图片——基础积累

最近在做二维码推广功能&#xff0c;自从2020年下半年到今天&#xff0c;大概有三年没有用过uniapp了&#xff0c;而且我之前用uniapp开发的程序还比较少&#xff0c;因此很多功能都浪费了很多时间去查资料&#xff0c;现在把功能记录一下。 这里写目录标题 效果图1.base64生成…

go语言---锁

什么是锁呢&#xff1f;就是某个协程&#xff08;线程&#xff09;在访问某个资源时先锁住&#xff0c;防止其它协程的访问&#xff0c;等访问完毕解锁后其他协程再来加锁进行访问。这和我们生活中加锁使用公共资源相似&#xff0c;例如&#xff1a;公共卫生间。 死锁 死锁是…

共享股东:一种让连锁门店企业家赚钱的新模式

你是否经营着一家或多家连锁门店&#xff0c;想要提高你的收入和竞争力&#xff1f;你是否想要吸引更多的客户和投资者&#xff0c;让他们成为你的忠实合作伙伴&#xff1f;你是否想要利用互联网的力量&#xff0c;让你的门店变得更加智能和高效&#xff1f;如果你的答案是肯定…

JavaScript速成课—事件处理

目录 一.事件类型 1.窗口事件 2.表单元素事件 3.图像事件 4.键盘事件 5.鼠标事件 二.JavaScript事件处理的基本机制 三.绑定事件的方法 1.DOM元素绑定 2.JavaScript代码绑定事件 3.监听事件函数绑定 四.JavaScript事件的event对象 1.获取event对象 2.鼠标坐标获取…

11、Kubernetes核心技术 - Service

目录 一、概述 二、Endpoint 三、Service资源清单 四、Service 类型 4.1、ClusterIP 4.2、NodePort 4.3、LoadBalancer 4.4、ExternalName 五、Service使用 5.1、ClusterIP 5.1.1、定义Pod资源清单 5.1.2、创建Pod 5.1.3、定义Service资源清单 5.1.4、创建Servic…

面试官:请说说flex布局_番茄出品.md

面试官&#xff1a;请说说flex布局_番茄出品.md start 依然记得当初学习 flex 布局时&#xff0c;用 flex 布局&#xff1a;画麻将。一筒到九筒&#xff0c;应有尽有。但是光和面试官说&#xff0c;我用 flex 布局画过麻将&#xff0c;并没有什么用。面试官问你一个语法&…

Hadoop:YARN、MapReduce、Hive操作

目录 分布式计算概述 YARN概述 YARN架构 核心架构 辅助架构 MapReduce 概述 配置相关文件 提交MapReduce到YARN Hive Hive架构 Hive在VMware部署 Hive的启动 数据库操作 数据表操作 内部表操作 外部表操作 数据加载和导出 数据加载LOAD 数据加载 - INSERT SEL…