认识Hive
程序员文章站
2022-03-22 16:42:05
...
什么是Hive:
- Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射成一张表,并提供类SQL类查询功能。
Hive的认识:
* Hive基于:
1):处理的数据储存在HDFS
2):分析数据底层的实现MapReduce
3):执行程序运行的YARN
* 构建在Hadoop之上的数据仓库:
1):使用HQL作为查询借口
2):使用HDFS存储
3):使用MapReduce计算
* 本质是:将HQL转换成MapReduce程序
个人理解:
就是吧结构化的数据映射成一张表,然后进行类型SQL语言的数据查询。
HQL底层的MapReduce:
把数据转换成MapReduce用的是Engine机制。
Hive架构理解认识:
用户接口:Client
CLI(hive shell) JDBC/ODBC(java访问hive),WEBUI(浏览器访问hive)
元数据:Metastore
元数据包括:表名,表所属的数据库(默认是default),表的拥有者,列/分去字段,表的类型(是否是外部表),表的
数据所在目录等。
默认存储在自带的derby数据库中,推介使用采用MySQL储存Metastore
* derby是嵌入式数据库,只支持单用户
Hadoop:
使用HDFS进行存纯,使用MapReudce进行计算
驱动器:Driver:
包含:
解析器,编译器,优化器,执行器
解析器:
将Sql字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr。对AST进行语法分析,比如表
是否存在,字段是否存在,Sql语义是否有误(比如select中被判定为集合的字段在group by中是否出现)。
编译器:
将AST编译生成逻辑执行计划
优化器:
对逻辑执行计划进行优化
执行器:
吧逻辑执行计划转换成运行的物理计划,对于HIVE来说,就是MR/TEZ/Spark
个人理解架构:
CLI就是我们写的命令行,通过JDBC这种方式访问HIVE,导入元数据,元数据储存有表名,所数据库(默认default),表的
拥有者,列明区字段,是否存在外部表,最重要的是java,驱动器。。
1):解析器;
解析sql语法,看表是否存在,字段是否存在,sql语句有没有错误,
解析hql语句
2) :编译器;
就是逻辑执行计划
把hql翻译成MapReduce
3):优化器;
然后进行优化
优化sql语句
4):执行器
运行在yarn平台之上
然后驱动器做完以后,就会用hadoop底层的的MapReduce来计算,下一步储存到HDFS,所以,HIVE就是基于hadoop之上。
Hive优点与使用场景:
操作借口与采用Sql语法,提供快速的开发的能力(简单,容易上手)
避免了去写MapReudce,减少开发人员的学习成本。
统一的元数据管理,可与impala/spark等共享元数据
易扩展(HDFS+MapReduce):可以扩展集群规模,支持自定义函数)
离线的数据处理:比如,日志分析,海量结构化数据离线分析
Hive执行延迟比较高,因此hive常用与数据分析的,对实用性要求不高的场合
Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive执行延迟比较高。