Hive体系架构,
Hive 是什么
Hive 的体系架构
上图为Hive的体系架构图,主要由如下几部分组成
用户接口:Client
Cli(Command-line shell),及shell 命令行,hive1的客户端,hive server2 提供了新的命令beeline
JDBC/ODBC,通过Java来访问hive,与传统数据库JDBC的方式类型,比如我们使用Java通过JDBC访问操作MySQL
WebUI,浏览器中访问hive
元数据:metastore
Hive 将元数据存储在数据库中(metastore),数据库可以为关系型数据库中的任意一种,元数据包括:表名、表所属数据库、表的拥有者、列/分区字段、表的类型、表数据所在目录。
元数据存储在MySQL上
驱动器:driver
包含:解析器、编译器、优化器、执行器
完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划(plan)的生成,生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行
Hadoop
使用hdfs进行数据存储,运行在yarn上,使用mapreduce进行计算
Hive 部署架构
在测试环境中
Hive 是构建在Hadoop之上的一个数据仓库,实际工作中,我们的Hadoop是肯定是集群,但Hive我们只需要装在一台服务上即可,元数据默认存放在Derby中,Derby是一个单用户,使用起来不是很方便,建议我们自己装一个mysql数据库,专门用于存放hive的元数据信息。
在生产环境中
生产环境中与测试环境不相同的之处就是mysql用的是主备,当一台mysql服务挂掉了,通过某种机制它会自动切换到另一台,其实这样做的好处就是为了容错,保证高可用,防止hive的元数据丢失
Hive与RDBM(关系型数据库)的区别
Hive | RDBM |
---|---|
面向SQL | 面向SQL |
关注于分析统计,延时性比较高 | 更专注于实时,延时性比较短的分析 |
支持事务(高版本) | 支持事务 |
支持分区,随机insert/update(高版本) | 支持随机insert/update |
基于MapReduce的分布式处理引擎 | 支持分布式 |
成百上千个节点 | 很少超过20个 |
构建在廉价的机器上 | 通常情况是构建专用的机器上 |
能够处理P级别的数据 | 到T…差不多了把… |
hive的优缺点
优点:
容易上手、易用,比用MapReduce编程简单很多
数据离线处理,比如日志分析,海量数据结构化分析
底层基于hadoop,易于扩展,支持自定义函数UDF
缺点:
Hive执行延迟比较高,不适合实时查询
Hive优势在于处理大数据集,对于小数据集没有优势
因为Hive启动是需要时间的,提交MapReduce作业.如果数据量比较小.说不定启动时间比计算时间还要长.
不单单是启动,最后还要销毁.这就占用了非常多的时间