根据万字长文——最详Hive入门指南这篇博客,以下几个关键点是值得记忆的,这些知识点不仅有助于理解Hive的基本概念和使用场景,而且在面试中可能会被问到:
简要知识点
- Hive的本质和作用:
- Hive是一个建立在Hadoop生态系统之上的数据仓库软件,它允许通过SQL-like的查询语言(HiveQL)对存储在HDFS上的数据进行查询、统计和分析。
- Hive将SQL语句转换成MapReduce、Tez或Spark作业进行执行。
- Hive与SQL的区别:
- Hive SQL适合于处理大数据集,而传统SQL更适用于小到中等规模的数据集。
- Hive使用Hadoop的HDFS作为存储系统,而传统SQL使用本地文件系统或专用的数据库存储。
- Hive的设计初衷是为了批量处理和分析大数据,因此它的实时查询能力不如传统SQL。
- Hive易于扩展存储和计算能力,而传统SQL数据库在这方面可能不如Hive灵活。
- Hive的表类型:
- Hive中的表可以是内部表或外部表,内部表的数据和元数据都由Hive管理,而外部表的数据存储在HDFS上,Hive只管理元数据。
- Hive的数据类型:
- Hive支持多种数据类型,包括TINYINT、SMALLINT、INT、BIGINT、BOOLEAN、FLOAT、DOUBLE、STRING、TIMESTAMP和BINARY等。
- Hive的执行流程:
- 从UI或Cli与Driver建立连接,进行访问。
- 编译过程中获取和查询元数据,然后由Execution Engine执行。
- 任务最终发送给JobTracker进行调度和分发。
- Hive的分区和分桶:
- 分区表根据业务需求将数据分配到不同的子表中,提高并发量和查询效率。
- 分桶则是对数据进行更细粒度的划分,通过某列属性值的哈希值进行区分,提高join操作和数据抽样的效率。
- Hive的优化策略:
- 包括减少查询数据量、使用压缩数据、合理控制reducer数量、使用Map join处理小表join大表等。
- Hive的数据倾斜问题:
- 数据倾斜是Hive中常见的性能问题,可以通过对异常值赋予随机变量、使用map join或调整join顺序等方法来解决。
区别(表格展示)
以下是一个简洁的表格,展示了Hive和传统SQL(通常指关系型数据库管理系统中使用的SQL,如MySQL)的主要区别:
特性 | Hive | 传统SQL (如MySQL) |
设计目的 | 大数据批量处理和分析 | 结构化数据的存储、管理和查询 |
数据存储 | 基于Hadoop的HDFS | 本地或远程服务器的文件系统 |
查询语言 | HiveQL(类似SQL) | SQL(结构化查询语言) |
数据处理模式 | 批处理模式 | 交互式查询和事务处理 |
性能特点 | 优化批量处理大数据 | 优化快速随机读写和实时查询 |
扩展性 | 水平扩展,适用于大数据集 | 通常需要更复杂的配置来处理大数据 |
容错性 | 高容错性,依赖数据副本 | 通常依赖事务日志和备份 |
适用场景 | 数据仓库、大数据分析 | 在线事务处理、Web应用、企业系统 |
并发处理 | 通过MapReduce等框架实现 | 内置的并发控制和事务处理 |
执行引擎 | 将HiveQL转换为MapReduce等作业执行 | 使用优化器和执行引擎进行查询处理 |
支持的数据类型 | 包括复杂的大数据类型 | 主要是基于关系模型的数据类型 |