2.1 Hive简介
2.1.1 什么是Hive
Hive是Facebook为了解决海量日志数据的统计分析而开发的基于Hadoop的一个数据仓库工具(后来开 源给了Apache软件基金会),可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功
能.HQL。
本质上:将HQL语句转换为MapReduce任务进行运行(转化流程如下)
主要用途:做离线数据分析,比直接用MapReduce 开发效率更高
2.1.2 为什么使用Hive
直接使用Hadoop MapReduce 处理数据面临的问题: 人员学习成本太高
MapReduce 实现复杂查询逻辑开发难度太大
使用Hive:
操作接口采用类SQL语法,提供快速开发的能力
避免了去写MapReduce,减少开发人员的学习成本功能扩展很方便
2.1.3 Hive的优缺点
1) 优点
- 操作接口采用类SQL语法,避免了写MapReduce程序,简单易上手,减少开发人员学习成本
2. 在数据处理方面,Hive语句最终会生成MapReduce任务去计算,常用于离线数据分析,对数据实时 性要求不高的场景
3. 在数据存储方面,它能够存储很大的数据集,并且对数据完整性、格式要求并不严格
4. 在延展性方面,Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数2) 缺点
- Hive的HQL本身表达能力有限,不能够进行迭代式计算,在数据挖掘方面也不擅长
2. Hive操作默认基于MapReduce引擎,延迟高,不适用于交互式查询,因此智能化程度低,并且基于 SQL调优困难,粒度较粗2.1.4 Hive架构
1. 用户接口:Client CLI(hive shell)、JDBC/ODBC(java 访问 hive)、WEBUI(浏览器访问 hive)
2. 元数据:Metastore 元数据包括:表名、表所属的数据库(默认是 default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;
3. Hadoop 使用 HDFS 进行存储,使用 MapReduce 进行计算。
4. 驱动器:Driver
(1) 解析器(SQL Parser):将 SQL 字符串转换成抽象语法树 AST,这一步一般都用第三方工具库完成,比如 antlr;对 AST 进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
(2) 编译器(Physical Plan):将 AST 编译生成逻辑执行计划。
(3) 优化器(Query Optimizer):对逻辑执行计划进行优化。
(4) 执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于 Hive 来说,就是
MR/Spark。
Hive 运行机制如下图:
Hive 通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的 Driver,
结合元数据(MetaStore),将这些指令翻译成 MapReduce,提交到 Hadoop 中执行,最后,将执行返回的结果输出到用户交互接口。
2.1.5 Hive与传统数据库对比
Hive 用于海量数据的离线分析。
Hive 具有sql数据库的外表,但应用场景完全不同,Hive 只适用于批量数据统计分析。更直观的对比图如下
2.1.6 Hive数据模型
Hive 的数据模型主要有以下四种,如下图所示:
2.1.7 Hive安装
Hive 安装前需要安装好JDK和Hadoop,配置好环境变量根据元数据存储介质不同,分为两个版本
内置derby版:
优点:安装配置简单
缺点:不同路径启动Hive,每个Hive拥有一套自己的元数据,无法共享每个目录下都会出现(derby.log 及 metastore_db)
mysql 版:(mysql 进行元数据保存)
缺点: 安装配置复杂
优点: 实现了元数据的共享