Hive是什么:
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射成一张表,并提供类SQL查询功能;其本质是将HQL转化成MapReduce程序。
-
构建在Hadoop之上的数据仓库:
- 使用HQL作为查询接口
- 使用HDFS存储
- 使用MapReduce计算
-
灵活性和扩展性比较好:支持UDF,自定义存储格式等:
-
适合离线数据处理
Hive体系结构:
Hive的数据存储基于HDFS,其没有专门的数据存储格式,主要的存储结构主要包括:数据库,文件,表,视图,索引。Hive默认可以直接加载文本文件(TextFile),还支持SequenceFile,RCFile。创建表时指定Hive数据的列分隔符与行分隔符即可解析数据。
- 用户接口:Client:
- CLI(hive shell)、JDBC/ODBC(java访问hive),WEBUI(浏览器访问hive)
- 元数据:Metastore
- 元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;
- 默认存储在自带的derby数据库中,推荐使用采用MySQL
- Hadoop
- 使用HDFS进行存储,使用MapReduce进行计算
- 驱动器:Driver(包含解析器,编译器,优化器,执行器)
- 解析器:将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误(比如select中被判定为聚合的字段在group by中是否有出现);
- 编译器:将AST编译生成逻辑执行计划;
- 优化器:对逻辑执行计划进行优化;
- 执行器:把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/TEZ/Spark;
Hive四种表类型
1.分区表
- 最常用
- 可以按时间日期进行分区
2.内部表(管理表)
- 一般创建临时表使用内部表
- 创建的时候如果不指定是外部表,默认就是内部表
- 删除表会将数据一并删除
3.外部表(托管表)
- 推荐使用此方式创建表
- 创建的时候需要使用关键字(EXTERNAL)声明
- 删除表的时候只会删除表结构不会删除数据
4.桶表
- 不常用
- 桶表专门用于抽样查询,是很专业性的
- 不是日常用来存储数据的表,需要抽样查询时,才创建和使用桶表。
Hive 优点与使用场景
优点:
- 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手);
- 避免了去写MapReduce,减少开发人员的学习成本;
- 统一的元数据管理,可与impala/spark等共享元数据;
- 易扩展(HDFS+MapReduce:可以扩展集群规模;支持自定义函数);
使用场景:
- Hive的执行延迟比较高,因此hive常用于数据分析的,对实时性要求不高的场合;
- Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高。