一、认识Hive
- 什么是Hive?
Hive是基于Hadoop的一个数据仓库的工具,能将数据库文件映射为一张数据库表,提供SQL查询功能,将SQL语句转换为MapReduce任务运行,用来进行数据提取转化加载(ETL),是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。
简而言之,Hive就是类似与Mysql一样的Hadoop工具
-
那么学习Hive是为了什么呢?
因为使用Hadoop的MapReduce进行数据处理时面临着人员学习成本太高、项目周期要求太短、实现复杂逻辑开发难度太大的问题,故而开发Hive。这也侧面说明的我们使用Hive的原因。
总结就是:提供了快速开发的能力,避免了写MapReduce,减少了开发人员的学习成本,而且扩展功能很方便。
拥有其不能忽视的特点: -
Hive可以自由扩展集群的规模。
-
Hive支持用户自定义函数,由用户的特定需求来执行自己的自定义函数。
-
容错性良好,即使节点没有连接成功,SQL语句仍然可以执行。
-
Hive架构图
基本构成: -
主要接口:CLI、Client、HWI(HIver Web Interface)
-
Hive将元数据存储在数据库中。
-
解释器、编译器、优化器完成HQL查询语句从分析到编译、优化到查询计划的生成。
-
Hive的数据存储在HDFS中,大部分查询计算由MapReduce来完成,包含*的select查询不会生成MapReduce任务
二、Hive的应用场景与传统关系型数据库的对比
Hive | RDMS | |
---|---|---|
查询语言 | HQL | SQL |
数据存储 | HDFS | Raw Device or Local FS |
执行 | MapReduce | Executor |
执行延迟 | 高 | 低 |
处理数据规模 | 大 | 小 |
索引 | 0.8版本后加入 | 有复杂的索引 |
所以显然的是hive只适合做批量数据统计分析
三、Hive数据存储类型
Hive包含以下数据类型:
- db:在HDFS中表现为${hive.metastore.warehouse.dir}目录下的一个文件夹
- table:在HDFS中表现为所属db目录下的一个文件夹
- external table:与tadle类似,不过数据存放的位置可以在任意指定路径
- partition:在HDFS中表现为table目录下的子目录
- bucket:在HDFS中表现为同一个目录下根据hash散列之后的多个文件