您的位置:首页 > 运维架构 > 网站架构

Hive体系架构

2017-08-24 14:19 183 查看

Hive 是什么

首先是一个构建在Hadoop之上的数据仓库(它并不是一个真实的数据库)

由Facebook开源,最初用于解决海量结构化的日志数据统计问题

Hive定义了一种类似于SQL查询语言:HQL(非常类似于MySQL中的SQL语句,同时做了扩展)

通常用于离线数据处理(采用MapReduce)

可以认为是一个HQL=>MapReduce的语言翻译器

底层支持多种不同的执行引擎(默认是MapReduce)

支持不同的压缩格式、存储格式以及自定义函数

Hive中的数据库及表就是HDFS中的目录/文件夹,数据是文件,元数据信息可以存储在任意的一个关系型数据库中(比如:MySQL、SqlServer、Oracle等,默认是Derby),数据存储在HDFS中

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(关系型数据库)的区别

HiveRDBM
面向SQL面向SQL
关注于分析统计,延时性比较高更专注于实时,延时性比较短的分析
支持事务(高版本)支持事务
支持分区,随机insert/update(高版本)支持随机insert/update
基于MapReduce的分布式处理引擎支持分布式
成百上千个节点很少超过20个
构建在廉价的机器上通常情况是构建专用的机器上
能够处理P级别的数据到T…差不多了把…

hive的优缺点

优点:

容易上手、易用,比用MapReduce编程简单很多

数据离线处理,比如日志分析,海量数据结构化分析

底层基于hadoop,易于扩展,支持自定义函数UDF

缺点:

Hive执行延迟比较高,不适合实时查询

Hive优势在于处理大数据集,对于小数据集没有优势

因为Hive启动是需要时间的,提交MapReduce作业.如果数据量比较小.说不定启动时间比计算时间还要长.

不单单是启动,最后还要销毁.这就占用了非常多的时间
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hadoop hive