Hive文档


  • 1、Hive产生背景
  • 2、hive的来源
  • 3、Hive本质
  • 4、Hive能实现什么功能?
  • 5、Hive内部怎么处理数据
    - Hive文件存储格式
    - Hive各种文件存储格式的特点与区别
  • 6、Hive不适用于什么场景
  • 7、Hive适用于什么场景
  • 8、Hive怎么分析数据
  • 9、Hive整体架构图
  • 10、Hive的数据类型

一、Hive产生背景

Apache Hive 数据仓库软件可以使用SQL方便地阅读、编写和管理分布在分布式存储中的大型数据集。结构可以投射到已经存储的数据上。提供了一个命令行工具和JDBC驱动程序来将用户连接到Hive。

  • 由Facebook开源,最初用于解决海量结构化的日志数据统计问题
  • MapReduce编程的不便性
  • HDFS上的文件缺少Schema(字段名,字段类型等)。
    在这里插入图片描述

二、hive的来源

Hive本是Hadoop的子项目,被设计为使用HPL-SQL语言(简称HQL)来分析大量数据,旨在降低分析大量程序的难度,后来在Apache软件基金会顺利毕业,成为Apache中的一个顶级项目。
在这里插入图片描述

三、Hive本质

Hive是一个由java语言编写的应用程序,能够将HPL-SQL语言写就的语句翻译成MR(或者其他底层执行引擎)程序,HPL-SQL语言跟传统的标准SQL类似,其中描述数据的方式也是数据库与数据表,只不过在Hive中,数据库表与常见的关系型数据中的库表不同。
在这里插入图片描述在这里插入图片描述

四、Hive能实现什么功能?

Hive构建于Apache Hadoop™之上,提供以下功能:
 通过SQL轻松访问数据的工具,从而实现数据仓库任务,如提取/转换/加载(ETL),报告和数据分析。
 一种在各种数据格式上强加结构的机制。
 访问直接存储在Apache HDFS ™ 或其他数据存储系统(如Apache HBase ™)中的文件 。
 通过Apache Tez ™, Apache Spark ™或 MapReduce执行查询
 使用HPL-SQL的过程语言
 通过Hive LLAP,Apache YARN和Apache Slider进行亚秒级查询检索。
Hive提供标准的SQL功能,包括许多后来的SQL:2003和SQL:2011分析功能。
Hive的SQL还可以通过用户定义的函数(UDF),用户定义的聚合(UDAF)和用户定义的表函数(UDTF)使用用户代码进行扩展。

五、Hive内部怎么处理数据

1、文件格式

Hive存储数据的时候没有一种“Hive”格式。Hive附带内置连接器,用于逗号和制表符分隔值(CSV / TSV)文本文件,Apache Parquet™, Apache ORC™和其他格式。
用户可以使用其他格式的连接器扩展Hive。

2、各文件格式特点与区别

  • 1)、TestFile
    TextFile文件不支持块压缩,默认格式,数据不做压缩,磁盘开销大,数据解析开销大。这边不做深入介绍。

  • 2)、RCFile
    Record Columnar的缩写。是Hadoop中第一个列文件格式。能够很好的压缩和快速的查询性能,但是不支持模式演进。通常写操作比较慢,比非列形式的文件格式需要更多的内存空间和计算量。
    RCFile是一种行列存储相结合的存储方式。首先,其将数据按行分块,保证同一个record在一个块上,避免读一个记录需要读.
    取多个block。其次,块数据列式存储,有利于数据压缩和快速的列存取。

  • 3)、ORCFile

存储方式:数据按行分块、每块按照列存储 、压缩快、快速列存取,效率比rcfile高,是rcfile的改良版本,相比RC能够更好的压缩,能够更快的查询,但还是不支持模式演进。

  • 4)、Parquet列式存储

Parquet能够很好的压缩,有很好的查询性能,支持有限的模式演进。但是写速度通常比较慢。这中文件格式主要是用在Cloudera Impala上面的。

六、Hive不适用于什么场景

Hive不适用于联机事务处理(OLTP)工作负载。

七、Hive适用于什么场景

它最适用于传统的数据仓库任务。
Hive旨在最大限度地提高可扩展性(通过向Hadoop集群动态添加更多计算机来扩展),性能,可扩展性,容错性以及与其输入格式的松散耦合。
Hive的组件包括HCatalog和WebHCat。
HCatalog是Hive的一个组件。它是Hadoop的表和存储管理层,使具有不同数据处理工具(包括Pig和MapReduce)的用户能够更轻松地在网格上读取和写入数据。
WebHCat提供的服务可用于运行Hadoop MapReduce(或YARN),Pig,Hive作业或使用HTTP(REST样式)接口执行Hive元数据操作。

八、Hive怎么分析数据

回想一下,我们使用Mapreduce处理应用程序时,针对每一行数据,我们都需要使用数据内所设置的特定分隔符,将一行文本分隔成多个列,然后再对多个列处理。例如,我们MR的入门程序wordcount,就是一个典型的group by + count的操作。同样的,Hive既然要将sql语句翻译成MR执行,就需要“知道”数据的长相——即数据的结构信息,这些信息在Hive内部被称之为元数据(注意,HDFS上的数据本身的元信息是指数据的创建者、创建时间、权限、数据大小等信息),Hive将元数据信息放置到常用的关系型数据库中,这样可以加快Hive分析数据的速度。

在Hive中也有库、表的概念,我们也可以往表中添加数据并进行统计分析,且除了select * 操作以外都转换成了MR去执行。同样的,我们也看到很多操作与mysql相比并不完全相同,甚至大相径庭,是的,Hive本质还是一个数据分析工具,而不是一个传统意义上的数据库软件,所以怎样在Hive内高效的分析数据是我们学习的重点,接下来,我们会通过对Hive的库表的操作来学习使用Hive对大量数据的分析。

九、Hive整体架构图

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

Hive的客户端

由上述架构图可知,Hive中的客户端有多种类型,最常见的就是我们上述的由hive命令打开的hiveshell客户端,称之为HiveCLI,其本质是一个基于JDBC的Hive连接客户端。
HiveServer2(在Hive 0.11中引入)有自己的名为Beeline的CLI ,它是一个基于SQLLine的JDBC客户端。由于新开发的重点是HiveServer2,Hive CLI很快就会被弃用,但是现在还能使用。
HiveCLI与Beeline的区别如下:
HiveCLI(命令行方式)即通过hive进入命令模式后通过执行不同的HQL命令得到对应的结果;相当于胖客户端模式,即客户机中需要安装JRE环境和Hive程序。
beeline客户端方式相当于瘦客户端模式,采用JDBC方式借助于Hive Thrift服务访问Hive数据仓库。
Beeline工作模式有两种,即本地嵌入模式和远程模式。嵌入模式情况下,它返回一个嵌入式的Hive(类似于Hive CLI)。而远程模式则是通过Thrift协议与某个单独的HiveServer2进程进行连接通信。
HiveCLI显示的信息一般不如beeline显示的丰富。
HiveThrift(HiveServer)是Hive中的组件之一,设计目的是为了实现跨语言轻量级访问Hive数据仓库,有Hiveserver和Hiveserver2两个版本,两者不兼容。

beeline的简单使用方式如下:

  1. 先在安装hive的机器上以后台启动的方式启动hive的server2
    nohup hive –service hiveserver2 &
  2. 检测启动情况
    ps -ef | grep Hive
  3. 使用beeline客户端连接hiveserver2
    beeline -u jdbc:hive2://
    注意:上述方式需要beeline也在hive安装的主机上执行,如果需要连接到其他hiveserver2则需要很多其他安全校验方面的配置,我们这里就不涉及了。

Hive的操作
从大的层面来看,Hive的所有操作可以分为以下两种:

  1. Hive Data Definition Language 简称Hive的DDL,即Hive数据定义语言——用来增删查改库、表结构
  2. Hive Data Manipulation Language 简称Hive的DML,即Hive数据操作语言——用来增删改查表内数据
    最重点的当属DML中的查询,其是用来分析数据的关键。但是其他部分也是使用Hive必不可少的,所以也需要我们掌握。

Hive的库

库的本质
mysql中,库的本质是一个逻辑概念,即包含一堆表的实体。跟java语言中的包的概念类似。在Hive中,库的本质就是HDFS上的一个目录,其内含有表和表内数据。我们在hive中创建库时,默认会在hive仓库目录(默认为hdfs上的/user/hive/warehouse目录)中创建一个”库名.db”的文件夹。hive默认的库名为default,位置就是/user/hive/warehouse。
我们能够对库做的所有操作,都是DDL操作。

十、Hive的数据类型

数值类型
 TINYINT(1字节有符号整数,从-128至127)
 SMALLINT(2字节有符号整数,从-32,768至32,767)
 INT / INTEGER(4字节有符号整数,从-2,147,483,648到2,147,483,647)
 BIGINT(8字节符号整数,从-9,223,372,036,854,775,808至9,223,372,036,854,775,807)
 FLOAT (4字节单精度浮点数)
 DOUBLE (8字节双精度浮点数)
 DOUBLE PRECISION ( DOUBLE的别名,仅从 Hive 2.2.0开始提供)
 DECIMAL
DECIMALHive中的类型基于Java的BigDecimal,用于表示Java中不可变的任意精度十进制数。
在Hive 0.11.0中引入,精度为38位
Hive 0.13.0引入了用户可定义的精度和规模
用户可以DECIMAL使用DECIMAL(precision, scale)语法在使用数据类型创建表时指定比例和精度。如果未指定scale,则默认为0(无小数位)。如果未指定precision(精度),则默认为10。
 NUMERIC(同样DECIMAL,从Hive 3.0.0开始)
日期/时间类型
 TIMESTAMP(注意:仅从 Hive 0.8.0开始提供)
时间戳被解释为无时区并存储为UNIX纪元的偏移量
 DATE(注意:仅从 Hive 0.12.0开始提供)
DATE值以形式描述特定的年/月/日YYYY-­MM-­DD。例如,DATE’2013-01-01’。日期类型没有时间组件。Date类型支持的值范围是0000-01-01到9999-12-31
 INTERVAL(注意:仅从Hive 1.2.0开始提供)

字符串类型
 STRING
字符串文字可以用单引号(’)或双引号(“)表示

 VARCHAR(注意:仅从 Hive 0.12.0开始提供)
使用长度说明符(介于1和65535之间)创建Varchar类型,该长度说明符定义字符串中允许的最大字符数。

 CHAR(注意:仅从 Hive 0.13.0开始提供)
Char类型与Varchar类似,但它们是固定长度的,最大长度固定为255。
杂项类型
 BOOLEAN
 BINARY(注意:仅从 Hive 0.8.0开始提供)
复杂类型
 ARRAY
ARRAY<data_type>注意:从Hive 0.14开始,允许使用负值和非常量表达式 。

 map
MAP<primitive_type, data_type>注意:从Hive 0.14开始,允许使用负值和非常量表达式。

 STRUCT
STRUCT<col_name : data_type [COMMENT col_comment], …>

 union
( UNIONTYPE<data_type, data_type, …>注意:仅从 Hive 0.7.0开始提供。)

1. HIVE结构 Hive 是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数 据提取转化加载 (ETL),这是一种可以存储、 查询和分析存储在 Hadoop 中的大规模数据的 机制。 Hive 定义了简单的类 SQL 查询语言,称为 QL,它允许熟悉 SQL 的用户查询数据。 同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理 内建的 mapper 和 reducer 无法完成的复杂的分析工作。 1.1HIVE 架构 Hive 的结构可以分为以下几部分: 用户接口:包括 CLI, Client, WUI 元数据存储。通常是存储在关系数据库如 mysql, derby 中 6 解释器、编译器、优化器、执行器 Hadoop:用 HDFS 进行存储,利用 MapReduce 进行计算 1、 用户接口主要有三个: CLI,Client 和 WUI。其中最常用的是 CLI , Cli 启动的时候, 会同时启动一个 Hive 副本。 Client 是 Hive 的客户端,用户连接至 Hive Server 。 在启动 Client 模式的时候, 需要指出 Hive Server 所在节点,并且在该节点启动 Hive Server 。 WUI 是通过浏览器访问 Hive 。 2、 Hive 将元数据存储在数据库中,如 mysql 、 derby 。 Hive 中的元数据包括表的名字, 表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。 3、 解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及 查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行。 4、 Hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成(包含 * 的查询,比 如 select * from tbl 不会生成 MapRedcue 任务)。 1.2Hive 和 Hadoop 关系 Hive 构建在 Hadoop 之上, HQL 中对查询语句的解释、优化、生成查询计划是由 Hive 完成的 所有的数据都是存储在 Hadoop 中 查询计划被转化为 MapReduce 任务,在 Hadoop 中执行(有些查询没有 MR 任 务,如: select * from table ) Hadoop和 Hive 都是用 UTF-8 编码的 7 1.3Hive 和普通关系数据库的异同 Hive RDBMS 查询语言 HQL SQL 数据存储 HDFS Raw Device or Local FS 索引 无 有 执行 MapReduce Excutor 执行延迟 高 低 处理数据规模 大 小 1. 查询语言。由于 SQL 被广泛的应用在数据仓库中,因此,专门针对 Hive 的特性设计 了类 SQL 的查询语言 HQL。熟悉 SQL 开发的开发者可以很方便的使用 Hive 进行开 发。 2. 数据存储位置。 Hive 是建立在 Hadoop 之上的,所有 Hive 的数据都是存储在 HDFS 中 的。而数据库则可以将数据保存在块设备或者本地文件系统中。 3. 数据格式。 Hive 中没有定义专门的数据格式,数据格式可以由用户指定,用户定义数 据格式需要指定三个属性:列分隔符(通常为空格、” t ”、” x001″)、行分隔符 (” n”)以及读取文件数据的方法( Hive 中默认有三个文件格式 TextFile , SequenceFile 以及 RCFile )。由于在加载数据的过程中,不需要从用户数据格式到 Hive 定义的数据格式的转换,因此, Hive 在加载的过程中不会对数据本身进行任何修 改,而只是将数据内容复制或者移动到相应的 HDFS 目录中。而在数据库中,不同的数 据库有不同的存储引擎,定义了自己的数据格式。所有数据都会按照一定的组织存储, 因此,数据库加载数据的过程会比较耗时。 4. 数据更新。由于 Hive 是针对数据仓库应用设计的,而数据仓库的内容是读多写少的。 因此, Hive 中不支持对数据的改写和添加,所有的数据都是在加载的时候中确定好的。 而数据库中的数据通常是需要经常进行修改的,因此可以使用 INSERT INTO ... VALUES 添加数据,使用 UPDATE ... SET 修改数据。 5. 索引。之前已经说过, Hive 在加载数据的过程中不会对数据进行任何处理,甚至不会 对数据进行扫描,因此也没有对数据中的某些 Key 建立索引。 Hive 要访问数据中满足 条件的特定值时,需要暴力扫描整个数据,因此访问延迟较高。由于 MapReduce 的引 入, Hive 可以并行访问数据,因此即使没有索引,对于大数据量的访问, Hive 仍然 可以体现出优势。数据库中,通常会针对一个或者几个列建立索引,因此对于少量的特 定条件的数据的访问,数据库可以有很高的效率,较低的延迟。由于数据的访问延迟较 高,决定了 Hive 不适合在线数据查询。 6. 执行。 Hive 中大多数查询的执行是通过 Hadoop 提供的 MapReduce 来实现的(类似 select * from tbl 的查询不需要 MapReduce)。而数据库通常有自己的执行引擎。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值