Hive的基本概念

一.基本概念

1.基本介绍

什么是Hive

  • 由 Facebook 开源用于解决海量结构化日志的数据统计工具。

  • Hive 是基于 Hadoop 的一个数据仓库工具,可以将<font color=green>结构化的数据文件</font><font color=red>映射</font>为一张<font color=red>表</font>,并 提供<font color=apple green>类 SQL 查询功能</font>。

简单理解

  • 我们可以将Hive理解为一个客户端工具,其提供了一种类SQL查询语言,称为 HiveQL。

  • 这使得Hive十分适合数据仓库的统计分析,能够轻松使用HiveQL开启数据仓库任务,如提取/转换/加载(ETL)、分析报告和数据分析。

  • Hive不仅可以分析HDFS文件系统中的数据也可以分析其他存储系统,例如HBase。

特点

  • Hive可以将SQL语句转化为MapReduce(或Apache Spark和Apache Tez)任务执行,大大降低了Hadoop的使用门槛,减少了开发MapReduce程序的时间成本。

Hive本质

  • 将HQL转化成MapReduce程序
image.png
  • 注意项

    • Hive 处理的数据存储在 HDFS ;

    • Hive 分析数据底层的实现是 MapReduce;

    • 执行程序运行在 Yarn 上;

知识补充: 数据库和数据仓库的区别

数据库:传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易

数据仓库:数据仓库系统的主要应用主要是OLAP(On-Line Analytical Processing),支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。

2.数据单元

Hive中核心的几个数据单元解析如下:

  • 元数据、

    • 元数据(Metadata)是指数据的各项属性信息,例如数据的类型、结构,数据库、表、视图的信息等。
  • 数据库

    • Hive中的数据库相当于一个命名空间,用于避免表、分区、列之间出现命名冲突,以确保用户和用户组的安全。
    • 数据库中的表由若干行组成,每行数据都有相同的模式和相同属性的列。

    • Hive中的表可以分为内部表和外部表。

      • 内部表

        • 通常所说的表就是指内部表,也叫管理表。

        • 内部表数据被存储在数据仓库的目录中。

        • 当删除内部表时,表数据及其元数据将一同被删除。

      • 外部表

        • 外部表在创建时,数据可以存储于指定的HDFS目录中,也可以存储于数据仓库中,还可以与指定的HDFS目录中的数据相关联。

        • 外部表被删除时,只有元数据被删除,实际数据不会被删除。

  • 分区

    • Hive在查询数据的时候会扫描整个表的数据,如果表非常大,则会耗费大量时间和资源。

    • 因此,Hive引入了表分区的功能,每个表可以有一个或多个分区。

    • 这些分区决定了数据的存储方式,使查询操作只扫描相关性高的那部分数据,从而大大提高了Hive的工作效率。

    • 每个分区会根据表的某列数据的哈希值被划分为若干个桶,每个桶对应分区下的一个数据文件。

    • 对表进行分区和分桶不是必须的,但这样可以减少对不必要数据的访问,从而提高查询速度。

3. 数据类型

Hive的数据类型分为基本数据类型和复杂数据类型。

3.1 基本类型

基本数据类型与常用的大部分数据库类似,包括以下几种:

  • 整型:TINYINT、SMALLINT、INT、BIGINT。

  • 布尔型:TRUE/FALSE。

  • 浮点型:FLOAT(单精度)、DOUBLE(双精度)。

  • 定点型:DECIMAL。

  • 字符型:STRING、VARCHAR、CHAR。

  • 日期和时间型:TIMESTAMP、DATE。

  • 二进制型:BINARY,用于存储变长的二进制数据。

3.2 复杂数据类型

3.2.1 STRUCT

  STRUCT是一个记录类型,封装了一个命名字段集合。

  一个STRUCT类型的元素可以包含不同类型的其他元素,并且可以使用点符号“.”访问类型中的元素。

  • 例如,表中的c列的数据类型为STRUCT<\a STRING,b INT>,则可以通过c.a访问c列中的元素a。

例子

  假如现在需要创建一张学生表“student”,其中有两列,一列是主键id,另一列是学生信息info,其中学生信息包括姓名和年龄,则该表的创建语句如下:


CREATE TABLE student(id INT,info STRUCT<name:STRING, age: INT>)

向表“student”中导入以下测试数据:

image.png

若需要查询年龄大于20的所有数据,查询语句如下:


SELECT * FROM STUDENT WHERE info.age>20;

查询输出结果为:

image.png

3.2.2 键值对(MAP)

  类似于Java中的Map,使用键值对存储数据,根据键可以访问值。

  • 例如,表中的c列用于存储学生的姓名和年龄,数据类型为MAP<STRING,INT>(姓名为键,年龄为值),访问c列中的键zhangsan对应的年龄,可以写为c['zhangsan']。

例子

  在上方的学生表例子中,若将列info的类型改为MAP<STRING,INT>,则创建表的语句如下:


CREATE TABLE student (id INT,info MAP<STRING,INT>)

然后向表中导入以下测试数据:

[图片上传失败...(image-d1f0de-1638497175786)]

查询姓名为zhangsan,年龄为20的所有数据,查询语句如下:


SELECT * FROM student WHERE info[zhangsan]=20

输出结果


1 zhangsan:20,english:98

3.2.3 数组(ARRAY)

  类似于Java中的数组,数组中所有元素的类型相同。

  • 例如,表中c列的数据类型为ARRAY<INT>,访问该列的第一个元素可以写为c[0]。

例子

  仍然以上方的学生表为例,若将列info的类型改为ARRAY <STRING>,则创建表的语句如下:


CREATE TABLE student(id INT,info ARRAY<STRING>)

然后向表中导入以下测试数据(冒号前面为数组的第一个值,后面为第二个值):

image.png

查询表中年龄大于20的所有数据,查询语句如下:


SELECT * FROM student WHERE info[1]>20

查询结果

image.png

此外,一张表中也可以存在多个复杂数据类型。例如,创建表“student”,其中有三列col1、col2和col3,每一列都使用复杂数据类型,创建语句如下:


CREATE TABLE student(

    col1 STUDENT<a:STRING,b:INT,c:DOUBLE>),

    col2 MAP<STRING,INT>,

    col3 ARRAY<INT>

    )

4.Hive优缺点

  • 优点

    • (1)操作接口采用类 SQL 语法,提供快速开发的能力(简单、容易上手)。

    • (2)避免了去写 MapReduce,减少开发人员的学习成本。

    • (3)Hive 的执行延迟比较高,因此 Hive 常用于数据分析,对实时性要求不高的场合。

    • (4)Hive 优势在于处理大数据,对于处理小数据没有优势,因为 Hive 的执行延迟比较 高。

    • (5)Hive 支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

  • 缺点

    • 1)Hive 的 HQL 表达能力有限

      • (1)迭代式算法无法表达 ;

      • (2)数据挖掘方面不擅长,受MapReduce 数据处理流程的限制,效率更高的算法无法实现;

    • 2)Hive 的效率比较低

    • (1)Hive 自动生成的 MapReduce 作业,通常情况下不够智能化 ;

    • (2)Hive 调优比较困难,粒度较粗;

5.Hive架构体系

image.png

1)用户接口:Client

  CLI是Hive的命令行界面(模式),是Hive最常用的一种方式。CLI本质上是Hive的一个客户端服务,启动客户端后进入交互式命令行,即可通过HiveQL访问Hive中的数据

2)元数据:Metastore

  元数据包括:表名、表所属的数据库(默认是 default)、表的拥有者、列/分区字段、 表的类型(是否是外部表)、表的数据所在目录等;

  默认存储在自带的 derby 数据库中,推荐使用 MySQL 存储 Metastore

3)Hadoop

  使用 HDFS 进行存储,使用 MapReduce 进行计算。

4)驱动器:Driver

  • 解析器(SQL Parser):

    • 将 SQL 字符串转换成抽象语法树 AST

      • 这一步一般都用第 三方工具库完成比如 antlr;

      • 对 AST 进行语法分析,比如表是否存在、字段是否存在、SQL 语义是否有误。

  • 编译器(Physical Plan):

    • 将 AST 编译生成逻辑执行计划。
  • 优化器(Query Optimizer):

    • 对逻辑执行计划进行优化。
  • 执行器(Execution):

    • 把逻辑执行计划转换成可以运行的物理计划。

    • 对于 Hive 来 说,就是 MR/Spark。

6.运行机制

image.png

  Hive 通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的 Driver, 结合元数据(MetaStore),将这些指令翻译成 MapReduce,提交到 Hadoop 中执行,最后,将 执行返回的结果输出到用户交互接口。

7.Hive和数据库的比较

  Hive 采用了类似 SQL 的查询语言 HQL(Hive Query Language),因此很容易将 Hive 理解为数据库。其实从结构上来看,Hive 和数据库除了拥有类似的查询语言,再无类似之处。 本文将从多个方面来阐述 Hive 和数据库的差异。数据库可以用在 Online 的应用中,但是 Hive 是为数据仓库而设计的,清楚这一点,有助于从应用角度理解 Hive 的特性。

  • 查询语言

    • 由于 SQL 被广泛的应用在数据仓库中,因此,专门针对 Hive 的特性设计了类 SQL 的查 询语言 HQL。

    • 熟悉 SQL 开发的开发者可以很方便的使用 Hive 进行开发。

  • 数据更新

  • 由于 Hive 是针对数据仓库应用设计的,而数据仓库的内容是读多写少的。

  • 因此,Hive 中 不建议对数据的改写,所有的数据都是在加载的时候确定好的。

  • 而数据库中的数据通常是需 要经常进行修改的,因此可以使用 INSERT INTO … VALUES 添加数据,使用 UPDATE … SET 修 改数据。

  • 执行延迟

    • Hive 在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高。

    • 另外一个导 致 Hive 执行延迟高的因素是 MapReduce 框架。

      • 由于 MapReduce 本身具有较高的延迟,因此 在利用 MapReduce 执行 Hive 查询时,也会有较高的延迟。

      • 相对的,数据库的执行延迟较低。

        • 当然,这个低是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候, Hive 的并行计算显然能体现出优势。
  • 数据规模

    • 由于 Hive 建立在集群上并可以利用 MapReduce 进行并行计算,因此可以支持很大规模 的数据;

    • 对应的,数据库可以支持的数据规模较小。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • 目录一.Hive基本概念:1.1 Hive1.2 为什么要学习Hive1.3.Hive架构原理:1.4 Hive和...
    Movle阅读 338评论 0 6
  • Hive 基本概念 1、 Hive:由 Facebook 开源用于解决海量结构化日志的数据统计。 2、 Hive ...
    Hi杯酒故人阅读 193评论 0 0
  • 什么是Hive Hive,由Facebook开源用于解决海量结构化日志的数据统计,是基于Hadoop的一个数据仓库...
    ZFH__ZJ阅读 204评论 0 2
  • hive是一个数据仓库基础工具在hadoop中用来处理结构化的数据,它架构在hadoop之上,总归为大数据,并使得...
    byway_lyn阅读 514评论 0 0
  • 1、HIve的概念: 官方解释:Hive是基于Hadoop的数据仓库解决方案。由于Hadoop本身在数据存储和计算...
    默云客阅读 1,576评论 0 2