目录
一 hive是什么?
二 为什么会出现hive?
三 hive 为什么适合数据仓库应用程序?
四 hive与传统关系型数据库的比较
五 hive的体系架构
hive体系架构的组成部分:
1 用户接口
2 跨语言服务 thrift server
3 Driver (底层)
4 元数据存储系统
六 hive的执行流程
一 hive是什么?
1:hive是构建在hdfs上的一个数据仓库(Data Warehouse)
2:hive是sql解析引擎,将sql语句转化为MR Job,然后在hadoop平台上运行
3:hive中的表是纯逻辑表,就只是表的定义,也就是表的元数据,本质上来说就是存储在hdfs上的目录/数据。数据和表的定义分离。
4:hive 本身不存储数据,他完全依赖于HDFS和MapReduce。
5:hive是读多少写多少的,不支持对数据的改写和删除。
6:hive中没有专门的数据格式,这个有用户指定,一般需要三个属性:
—— 行分割符:“\n”
——列分割符:"\t"
——读取文件数据的方法
二 为什么会出现hive?
关于这一点,在《hive编程指南》中有明确说明:用户如何从现有的一个数据基础架构转移到Hadoop上,而这个基础架构是基于关系型数据库和结构化查询语句的。对于大量的sql用户来说,这个问题又改如何解决呢?
此时就出现了hive,hive提供了一个被称为Hive查询语音的SQL方言,来查询和存储在Hadoop集群中的数据。这就会减低开发人员的学习成本,以一种熟悉的语言来操作和分析存储在hadoop上的数据。
三 hive 为什么适合数据仓库应用程序?
因为大多数数据仓库应用程序是使用基于SQL的关系型数据库实现的,所以hive降低了将这些程序应用移植到hadoop上的障碍。
四 hive与传统关系型数据库的比较
HQL | SQL | |
数据存储 | Hadoop,HBASE | LocalFS |
数据格式 | 用户自定义 | 系统决定 |
数据更新 | 不支持(覆盖) | 支持 |
索引 | 有(0.8版本之后) | 有 |
执行延迟 | 高 | 低 |
可扩展性 | 高 | 低 |
执行 | MapReduce | Excutor |
数据规模 | 大(TB) | 小 |
数据检查 | 读时模式 | 写时模式 |
五 hive的体系架构
hive的体系架构是遵从主从架构的设计模式。
hive体系架构的组成部分:
1 用户接口
用户接口包括三部分:
CLI(command line interface),交互式命令行,最常用的
JDBC/ODBC (Open Database Connectivity) 是hive基于开发人员通过连接zhi至hiveserver服务
Web UI 是通过浏览器访问hive服务
2 跨语言服务 thrift server
Thtift Server 是Facebook提供的一终软件框架,可以用来进行可扩展跨语言服务的框架,hive集成了该服务,能让不用的语言调用该服务。
3 Driver (底层)
Driver组件完成了对HiveQL语句的语法分析,编译,优化以及执行计划的生成,生成的逻辑执行计划存储在HDFS 中,并随后由MapReduce调用执行。
hive 的核心驱动引擎主要由四部分组成:
1 解释器 是将HQL语句转换成抽象的语法树 (AST)
2 编译器 将语法树编译为逻辑执行计划
3 优化器 是对逻辑执行计划进行优化
4 执行器 调用底层的运行框架执行逻辑计划
4 元数据存储系统
元数据:是存储在hive中数据的描述信息,如 表名,字段,表的所属用户,存储目录等信息。
Metastore 默认存在自带的 Derby 数据库中。缺点就是不适合多用户操作,并且数据存储目录不固定。数据库跟着Hive走,极度不方便管理。
解决方案:通常存我们自己创建的 MySQL 库(本地 或 远程)
Hive 和 MySQL 之间通过 MetaStore 服务交互
六 hive的执行流程
HiveQL 通过命令行或者客户端提交,经过 Compiler 编译器,运用 MetaStore 中的元数据进行类型检测和语法分析,生成一个逻辑方案(Logical Plan),然后通过的优化处理,产生 一个 MapReduce 任务。