Hive初始
一、Hive概念
Hive最初是应Facebook每天产生的海量新兴社会网络数据进行管理和机器学习的需求而产生和发展的,是建立在Hadoop上的数据仓库基础架构。作为Hadoopd的一个数据仓库的工具,Hive可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,Hive数据仓库软件提供对存储在分布式中的大型数据集的查询和管理,它本身是建立在Apache Hadoop之上,主要提供以下功能:
- 它提供了一系列的工具,可用来对数据进行提取/转化/加载(ETL);
- 是一种可以存储、查询和分析存储在HDFS(或者HBase)中的大规模数据的机制;
- 查询是通过MapReduce来完成的(并不是所有的查询都需要MapReduce来完成,比如select * from XXX就不需要;
- 在Hive0.11对类似select a,b from XXX的查询通过配置也可以不通过MapReduce来完成
二、为什么要是用Hive
直接使用 MapReduce 所面临的问题:
- 人员学习成本太高
- 项目周期要求太短
- 直接操作MapReduce难度大
为什么使用Hive:
- Hive有更友好的接口,操作接口采用类SQL语法,提供快速开发的能力
- 更低的学习成本,避免学习MapReduce,减少开发人员的学习成本
- 更好的扩展,可自由扩展集群规模而无需重启服务,还支持自定义函数
三、Hive优缺点
优点:
- 可扩展性,横向扩展,Hive 可以自由的扩展集群的规模,一般情况下不需要重启服务 横向扩展:通过分担压力的方式扩展集群的规模 纵向扩展:一台服务器cpu i7-6700k 4核心8线程,8核心16线程,内存64G => 128G
- 延展性,Hive 支持自定义函数,用户可以根据自己的需求来实现自己的函数
- 良好的容错性,可以保障即使有节点出现问题,SQL 语句仍可完成执行
缺点:
- Hive 不支持记录级别的增删改操作,但是用户可以通过查询生成新表或者将查询结 果导入到文件中(当前选择的 hive-2.3.2 的版本支持记录级别的插入操作)
- Hive 的查询延时很严重,因为 MapReduce Job 的启动过程消耗很长时间,所以不能 用在交互查询系统中。
- Hive 不支持事务(因为不没有增删改,所以主要用来做 OLAP(联机分析处理),而 不是 OLTP(联机事务处理),这就是数据处理的两大级别)。
四、hive架构
hive是基于hadoop的一个数据仓库工具,可以将结构化的数据映射成一张数据库表,并提供HQL(hive SQL)查询功能,底层数据存储在HDFS上,Hive本质上是将SQL语句转化为MapReduce任务运行,是不熟悉MapReduce的用户很方便利用HQL处理和计算HDFS上的结构化的数据,适用于离线计算。
hive工作方式,发出sql,hive将其转化为Mapduce任务,mapduce执行任务,操作HDFS中的文件
名称说明:
- 用户接口层,用户与Hive交互的界面和工具
- 界面与Hive内部驱动交互的协议和接口提供
- 底层驱动,Driver 组件完成 HQL 查询语句从词法分析,语法分析,编译,优化,以及生成逻辑执行 计划的生成。生成的逻辑执行计划存储在 HDFS 中,并随后由 MapReduce 调用执行Hive 的核心是驱动引擎, 驱动引擎由四部分组成:
(1) 解释器:解释器的作用是将 HiveSQL 语句转换为抽象语法树(AST)
(2) 编译器:编译器是将语法树编译为逻辑执行计划
(3) 优化器:优化器是对逻辑执行计划进行优化
(4) 执行器:执行器是调用底层的运行框架执行逻辑执行计划 - 元存储系统RDBS Mysql,元数据,通俗的讲,就是存储在 Hive 中的数据的描述信息。
Hive 中的元数据通常包括:表的名字,表的列和分区及其属性,表的属性(内部表和 外部表),表的数据所在目录。
Metastore 默认存在自带的 Derby 数据库中。缺点就是不适合多用户操作,并且数据存 储目录不固定。数据库跟着 Hive 走,极度不方便管理。
解决方案:通常存我们自己创建的 MySQL 库(本地 或 远程)
Hive 和 MySQL 之间通过 MetaStore 服务交互。
工作原理:
接收到一个sql,后面做的事情包括:
- 词法分析/语法分析
使用antlr将SQL语句解析成抽象语法树-AST - 语义分析
从Megastore获取模式信息,验证SQL语句中队表名,列名,以及数据类型的检查和隐式转换,以及Hive提供的函数和用户自定义的函数(UDF/UAF) - 逻辑计划生产
生成逻辑计划-算子树 - 逻辑计划优化
对算子树进行优化,包括列剪枝,分区剪枝,谓词下推等 - 物理计划生成
将逻辑计划生产包含由MapReduce任务组成的DAG的物理计划 - 物理计划执行
将DAG发送到Hadoop集群进行执行 - 将查询结果返回