【Hive】Hive入门解析(一)

在这里插入图片描述在这里插入图片描述在这里插入图片描述

(图片来源于网络,侵删)


一、Hive简介

【1】什么是Hive

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能(HQL)
其本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据的存储,元数据由数据库来存储(默认元数据存储在derby中,但这种方式只允许一个客户端连接数据库,所以只适合测试环境。实际开发过程中大部分都是用MySQL进行管理Hive元数据)

Hive可以理解为一个将SQL转换为MapReduce的任务的工具,减少了开发人员的学习成本

【2】Hive的特点

  • 【1】扩展性 :Hive依靠HDFS作为存储,HDFS具有可扩展性,所以Hive也可以自由的扩展集群的规模
  • 【2】延展性: Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
  • 【3】容错性:良好的容错性,节点出现问题SQL仍可完成执行(本质是转换为MR程序,MR程序运行在Yarn上,由ApplicationMaster进行监控调度,节点出现问题,自动将任务调度到其他节点继续执行)

【3】Hive的缺点

  • 【1】Hive 不支持记录级别的增删改操作,但是用户可以通过查询生成新表或者将查询结果导入到文件中(当前选择的 hive-2.3.2 的版本支持记录级别的插入操作)
  • 【2】Hive 的查询延时很严重,因为 MapReduce Job 的启动过程消耗很长时间,所以不能用在交互查询系统中
  • 【3】Hive 不支持事务(因为没有改,所以主要用来做 OLAP(联机分析处理),而 不是 OLTP(联机事务处理),这就是数据处理的两大级别)

【4.】Hive与传统数据库的对比图

在这里插入图片描述
总结:

Hive具有SQL数据库的外表,但应用场景完全不同,Hive只适合用来做海量离线数据统计分析,也就是数据仓库

【5】Hive架构图

在这里插入图片描述

1、用户接口: shell/CLI, jdbc/odbc, webui Command Line Interface

ClI,Shell 终端命令行(Command Line Interface),采用交互形式使用 Hive 命令行与 Hive 进行交互,最常用(学习,调试,生产)

JDBC/ODBC,是 Hive 的基于 JDBC 操作提供的客户端,用户(开发员,运维人员)通过 这连接至 Hive server 服务

Web UI,通过浏览器访问 Hive

2、跨语言服务 : thrift server 提供了一种能力,让用户可以使用多种不同的语言来操纵hive

Thrift 是 Facebook 开发的一个软件框架,可以用来进行可扩展且跨语言的服务的开发, Hive 集成了该服务,能让不同的编程语言调用 Hive 的接口

3、底层的Driver: 驱动器Driver,编译器Compiler,优化器Optimizer,执行器Executor

Driver 组件完成 HQL 查询语句从词法分析,语法分析,编译,优化,以及生成逻辑执行 计划的生成。生成的逻辑执行计划存储在 HDFS 中,并随后由 MapReduce 调用执行

Hive 的核心是驱动引擎, 驱动引擎由四部分组成:

(1) 解释器:解释器的作用是将 HiveSQL 语句转换为抽象语法树(AST)

(2) 编译器:编译器是将语法树编译为逻辑执行计划

(3) 优化器:优化器是对逻辑执行计划进行优化

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

4、元数据存储系统 : RDBMS MySQL

元数据,通俗的讲,就是存储在 Hive 中的数据的描述信息

Hive 中的元数据通常包括:表的名字,表的列和分区及其属性,表的属性(内部表和外部表),表的数据所在目录

Metastore 默认存在自带的 Derby 数据库中吗,缺点就是不适合多用户操作,并且数据存储目录不固定,数据库跟着 Hive 走,极度不方便管理

解决方案:通常存我们自己创建的 MySQL 库(本地 或 远程)

Hive 和 MySQL 之间通过 MetaStore 服务交互

执行流程

HQL 通过命令行或者客户端提交,经过 Compiler 编译器,运用 MetaStore 中的元数据进行类型检测和语法分析,生成一个逻辑方案(Logical Plan),然后通过的优化处理,产生 一个 MapReduce 任务

【6】Hive的数据存储

  • 1、Hive中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile,RCFILE等)只需要在创建表的时候告诉 Hive数据中的列分隔符行分隔符,Hive 就可以解析数据

  • 2、Hive 中包含以下数据模型:DB、Table,External Table,Partition,Bucket

  • 3、DB:在HDFS中表现为${hive.metastore.warehouse.dir}目录下的一个目录

  • 4、Table:在HDFS中表现为所属DB目录下一个目录

  • 5、External Table:与Table类似,不过其数据存放位置可以在任意指定路径

  • 6、partition:在HDFS中表现为Table目录下的子目录

  • 7、bucket:在HDFS中表现为一个表目录下根据hash散列之后的多个文件

【7】Hive的数据格式

当数据存储在文本文件中,必须按照一定格式区别行和列,并且在Hive中指明行、列的分割符。Hive默认使用了几个平时很少出现的字符,这些字符一般不会作为内容出现在记录中

Hive默认的行和列分隔符如下表所示

分隔符描述
\n对于文本文件来说,每行是一条记录,所以\n 来分割记录
^A (Ctrl+v Ctrl+A)分割字段,也可以用\001 来表示
^B (Ctrl+v Ctrl+B)用于分割 Arrary 或者 Struct 中的元素,或者用于 map 中键值之间的分割,也可以用\002 分割
^C (Ctrl+v Ctrl+C)用于 map 中键和值自己分割,也可以用\003 表示

【8】Hive的数据类型

基本数据类型长度
TINYINT1byte有符号整数
SMALINT2byte有符号整数
INT4byte有符号整数
BIGINT8byte有符号整数
BOOLEAN布尔类型,true或者false
FLOAT单精度浮点数
DOUBLE字符系列,可以指定字符集。可以使用单引号或者双引号
STRING1byte有符号整数
TIMESTAMP时间类型
BINARY字节数组
集合数据类型长度
Struct和c语言中的struct类似,都可以通过“点”符号访问元素内容。例如,如果某个列的数据类型是STRUCT{first STRING, last STRING},那么第1个元素可以通过字段.first来引用
MapMAP是一组键-值对元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取最后一个元素
Array数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第2个元素可以通过数组名[1]进行引用

注意对于什么时候使用Map和Struct,取决于字段名是否发生变化,如果变化就使用Map,否则使用结构体Struct!

【9】Hive的类型转化

Hive的原子数据类型是可以进行隐式转换的,类似于Java的类型转换,例如某表达式使用INT类型,TINYINT会自动转换为INT类型,但是Hive不会进行反向转化,例如,某表达式使用TINYINT类型,INT不会自动转换为TINYINT类型,它会返回错误,除非使用CAST操作
【1】任何数据类型都可以隐式地转换为一个范围更广的类型,如TINYINT可以转换成INT,INT可以转换成BIGINT
【2】所有整数类型、FLOAT、STRING都可以隐式地转换成DOUBLE
【3】TINYINT、SMALLINT、INT都可以转换为FLOAT
【4】BOOLEAN类型不可以转换为任何其他类型
【5】可以使用CAST操作显示进行数据类型的转化,例如:CAST("1" AS INT)把字符串 1 转化成整数 1,如果强制类型转换失败,如执行CAST("x" AS INT),表达式返回值为 NULL


都看到这里了,点赞评论一下吧!!!

在这里插入图片描述

点击查看👇

【Hive】Hive入门解析(二)

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值