Hive简介
什么是Hive
- Hive由Facebook实现并开源
- 是基于Hadoop的一个数据仓库工具
- 可以将结构化的数据映射为一张数据库表
- 提供HQL(Hive SQL)查询功能
- 底层数据是存储在HDFS上
- Hive的本质是将SQL语句转换为MapReduce任务运行
- 使不熟悉MapReduce的用户很方便地利用HQL处理和计算HDFS上的结构化数据,适用于离线的批量数据计算
为什么使用Hive
直接使用MapReduce所面临的问题:
- 人员学习成本太高
- 项目周期要求太短
- MapReduce实现复杂查询逻辑开发难度太大
为什么要使用Hive:
- 更友好的接口:操作接口采用类SQL的语句,提供快速开发的能力
- 更低的学习成本:避免了写MapReduce,减少开发人员的学习成本
- 更好的扩展性:可自由扩展集群规模而无需重启服务,还支持用户自定义函数
Hive的特点
优点:
-
可扩展性、横向扩展:Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。
- 横向扩展:通过分担压力的方式扩展集群的规模
- 纵向扩展:一台服务器cpu i7
-
延展性:
-
良好的容错性
缺点:
-
Hive不支持记录级别的增删改查
-
Hive的查询延迟很严重
-
Hive不支持事务
Hive和RDBMS的对比
对比项 | Hive | RDBMS |
---|---|---|
查询语言 | HQL | SQL |
数据存储 | HDFS | Raw Device or Local FS |
执行器 | MapReduce | Executor |
数据插入 | 支持批量导入/单条插入 | 支持批量导入/单条插入 |
处理数据规模 | 大 | 小 |
执行延迟 | 高 | 低 |
分区 | 支持 | 支持 |
索引 | 0.8版本之后加入简单索引 | 支持复杂的索引 |
扩展性 | 高(好) | 有限(查) |
数据加载模式 | 读时模式(快) | 写时模式(慢) |
应用场景 | 海量数据查询 | 实时查询 |
总结:
Hive具有SQL数据库的外表,但应用场景完全不同,Hive只适合用来做海量离线数据统计分析,也就是数据仓库。
Hive架构
1. 用户接口:shell/CLI,jdbc/odbc.webui Command Line Interface
CLI,Shell终端命令行(Command Line Interface),采用交互形式使用hive命令与Hive进行交互,最常用(学习,调试,生产)
2.跨语言服务:thrift server 提供了一种能力,让用户可以使用多种不同的语言来操作Hive
3.底层的Driver:驱动器Driver,编辑器Compiler,优化器Optimizer,执行器Executor
4.元数据存储系统:RDBMS MySQL
元数据:通俗的讲,就是存储在Hive中的数据的描述信息。