一、什么是Hive,为什么要用Hive,你是如何理解Hive?
面试官往往一上来就一个“灵魂三连问”,很多没有提前准备好的小伙伴基本回答得都磕磕绊绊,效果不是很好。下面贴出菌哥的回答:
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能(HQL)。「Hive本质是将SQL转换为MapReduce的任务进行运算。」
个人理解:hive存的是和hdfs的映射关系,hive是逻辑上的数据仓库,实际操作的都是hdfs上的文件,HQL就是用sql语法来写的mr程序。
二、介绍一下Hive的架构
- Hive可以通过CLI,JDBC和 ODBC 等客户端进行访问。除此之外,Hive还支持 WUI 访问
- Hive内部执行流程:解析器(解析SQL语句)、编译器(把SQL语句编译成MapReduce程序)、优化器(优化MapReduce程序)、执行器(将MapReduce程序运行的结果提交到HDFS)
- Hive的「元数据」保存在数据库中,如保存在MySQL,SQLServer,PostgreSQL,Oracle及Derby等数据库中。Hive中的元数据信息包含表名,列名,分区及其属性,表的属性(包括是否为外部表),表数据所在目录等。
- Hive将大部分 HiveSQL语句转化为MapReduce作业提交到Hadoop上执行;少数HiveSQL语句不会转化为MapReduce作业,直接从DataNode上获取数据后按照顺序输出。
三、Hive和数据库比较
Hive 和 数据库 实际上并没有可比性,除了拥有类似的查询语言,再无类似之处。
- 数据存储位置
Hive 存储在HDFS,数据库将数据保存在块设备或者本地文件系统中。
- 数据更新
Hive中不建议对数据的改写,而数据库中的数据通常是需要经常进行修改的。
- 执行延迟
Hive 执行延迟较高。数据库的执行延迟较低。当然,这个是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候,Hive的并行计算显然能体现出优势。
- 数据规模
Hive支持很大规模的数据计算;数据库可以支持的数据规