Hive简介

什么是 Hive

Hive 由 Facebook 实现并开源,是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据 映射 为一张数据库表,并提供HQL(Hive SQL)查询功能,底层数据是存储在 HDFS 上。Hive 的本质是将 SQL 语句转换为 MapReduce 任务运行,使不熟悉 MapReduce 的用户很方便地利 用 HQL 处理和计算 HDFS 上的结构化的数据,适用于离线的批量数据计算。
数据仓库之父比尔·恩门(Bill Inmon)在 1991 年出版的“Building the Data Warehouse”(《建 立数据仓库》)一书中所提出的定义被广泛接受——数据仓库(Data Warehouse)是一个面 向主题的 (Subject
Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史 变化(TimeVariant)的数据集合,用于支持管理决策(Decision Making Support)。 Hive 依赖于 HDFS存储数据,Hive 将 HQL 转换成 MapReduce 执行。 所以说 Hive 是基于 Hadoop 的一个数据仓库工具,实质就是一款基于 HDFS 的 MapReduce 计算 框架,对存储在 HDFS 中的数据进行分析和管理 。

为什么使用 Hive

直接使用 MapReduce 所面临的问题: 人员学习成本太高 项目周期要求太短 MapReduce 实现复杂查询逻辑开发难度太大
为什么要使用 Hive:
更友好的接口:操作接口采用类 SQL 的语法,提供快速开发的能力 更低的学习成本:避免了写MapReduce,减少开发人员的学习成本 更好的扩展性:可自由扩展集群规模而无需重启服务,还支持用户自定义函数

Hive 特点

优点:

1、可扩展性,横向扩展,Hive 可以自由的扩展集群的规模,一般情况下不需要重启服务 横向扩展 纵向扩展
2、延展性,Hive支持自定义函数,用户可以根据自己的需求来实现自己的函数
3、良好的容错性,可以保障即使有节点出现问题,SQL 语句仍可完成执行 缺点:
1、Hive 不支持记录级别的增删改操作,但是用户可以通过查询生成新表或者将查询结果导入到文件中
2、Hive 的查询延时严重,因为MapReduce的启动过程消耗很长时间,所以不能用在交互查询系统 中。
3、Hive 不支持事务(因为不没有增删改,所以主要用来OLAP(联机分析处理),而不是 OLTP(联机事务处理),这就是数据处理的两大级别)

Hive 和 RDBMS 的对比
在这里插入图片描述

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

Hive 的架构
在这里插入图片描述
基本组成

一、用户接口 CLI,Shell 终端命令行(Command Line Interface),采用交互形式使用 hive 命令行与 hive进行交互,最常用(学习,调试,生产) JDBC/ODBC,是 Hive 的基于 JDBC 操作提供的客户端,用户(开发员,运维人员)通过 这连接至 Hive server 服务 Web UI,通过浏览器访问 Hive
二、Thrift Server Thrift 是
Facebook 开发的一个软件框架,可以用来进行可扩展且跨语言的服务的开发, Hive 集 成了该服务,能让不同的编程语言调用 hive
的接口
三、元数据存储 元数据,通俗的讲,就是存储在 Hive 中的数据的描述信息。 Hive 中的元数据通常包括:表的名字,表的列和分区及其属性,表的属性(内部表和 外部表), 表的数据所在目录 Metastore 默认存在自带的 Derby 数据库中。缺点就是不适合多用户操作,并且数据存 储目录不 固定。数据库跟着 Hive 走,极度不方便管理
解决方案:通常存我们自己创建的 MySQL 库(本地 或 远程) Hive 和 MySQL 之间通过 MetaStore 服务交互
四、Driver:编译器(Compiler),优化器(Optimizer),执行器(Executor) Driver 组件完成 HQL查询语句从词法分析,语法分析,编译,优化,以及生成逻辑执行 计划的生 成。生成的逻辑执行计划存储在 HDFS 中,并随后由 MapReduce 调用执行 。
Hive 的核心是驱动引擎, 驱动引擎由四部分组成:
(1) 解释器:解释器的作用是将 HiveSQL语句转换为抽象语法树(AST)
(2) 编译器:编译器是将语法树编译为逻辑执行计划
(3) 优化器:优化器是对逻辑执行计划进行优化 (4)
执行器:执行器是调用底层的运行框架执行逻辑执行计划
五、执行流程 HiveQL 通过命令行或者客户端提交,经过 Compiler 编译器,运用 MetaStore 中的元数 据进行类 型检测和语法分析,生成一个逻辑方案(Logical Plan),然后通过的优化处理,产生 一个 MapReduce 任务

Hive 的数据存储

1、Hive 的存储结构包括数据库、表、视图、分区和表数据等。数据库,表,分区等等都对 应 HDFS 上 的一个目录。表数据对应 HDFS
对应目录下的文件。
2、Hive 中所有的数据都存储在 HDFS 中,没有专门的数据存储格式,因为 Hive 是读模式 (Schema OnRead) ,可支持 TextFile,SequenceFile,RCFile 或者自定义格式等
3、只需要在创建表的时候告诉 Hive数据中的列分隔符和行分隔符,Hive 就可以解析数据 Hive 的默认列分隔符:控制符 Ctrl + A,\x01 Hive 的默认行分隔符:换行符 \n
4、Hive 中包含以下数据模型:
database:在 HDFS表现为${hive.metastore.warehouse.dir}目录下一个文件夹 table:在 HDFS 中表现所属database 目录下一个文件夹 external table:与 table 类似,不过其数据存放位置可以指定任意 HDFS 目录路径
partition:在 HDFS 中表现为 table 目录下的子目录
bucket:在 HDFS中表现为同一个表目录或者分区目录下根据某个字段的值进行 hash 散列之后的 多个文件
view:与传统数据库类似,只读,基于基本表创建
5、Hive 的元数据存储在 RDBMS 中,除元数据外的其它所有数据都基于 HDFS 存储。 默认情况下,Hive 元数据保存在内嵌的Derby 数据库中,只能允许一个会话连接,只适合简单的 测试。实际生产环境中不适用,为了支持多用户会话,则需要一个独立的元数据库,使用
MySQL 作为 元数据库,Hive 内部对 MySQL 提供了很好的支持。 6、Hive 中的表分为内部表、外部表、分区表和 Bucket 表

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值