总目录:https://www.jianshu.com/p/e406a9bc93a9
Hadoop - 子目录:https://www.jianshu.com/p/9428e443b7fd
什么是HIVE
HIVE是由Facebook开源(目前移交Apache)用于解决海量结构化日志的数据统计。
他是一个基于Hadoop的数据仓库工具,可以将结构化数据映射成一张表,并提供类SQL的查询服务。
HIVE原理本质上是一个将HQL语句转换为MapReduce的转换器。
- HIVE处理的数据保存在HDFS上
- HIVE默认的底层实现是MapReduce(慢,吞吐量大)
- 程序运行在YARN上
HIVE可以理解为Hadoop的客户端,让人更方便的操作内部存储的数据。也是Hadoop生态圈中少有的不是分布式框架的组件。毕竟没有听说过谁的chrome浏览器还是分布式的。
HIVE的优缺点
HIVE的优点
- 接口是类SQL语言,提高开发能力,降低学习成本。
- HIVE的延迟高,因此HIVE做数据分析的场景对实时性要求不高。
- HIVE的优势在于处理海量数据,对小数据没有优势,毕竟延迟高,底层还是MR。
- HIVE支持自定义函数,用户可以按照自己的需求自定义函数。
HIVE的缺点
- HQL表达能力有限,这是SQL的通病,例如无法表示迭代式算法。
- 不擅长数据挖掘
- 效率低,底层是MR。
- 调优比较困难,是粗粒度处理。
HIVE的架构原理
架构图HIVE本质是一个客户端,所以在这个框架里面很多东西并不在HIVE中,元数据存放在关系型数据库中,上端是用户的操作,下端是MR。
之后中间四个器是HIVE的,这四个器的运行顺序是解析器-->编译器-->优化器-->执行器。
-
解析器
将SQL字符串转化为抽象语法树AST,这一步使用第三方工具完成,例如antlr。
之后对AST进行语法分析,例如表是否存在,语法是否错误。 -
编译器
将AST编译生成逻辑执行计划。 -
优化器
对逻辑执行计划进行优化。 -
执行器
将逻辑执行计划转换成可执行的物理计划,既MapReduce。
ANTLR解析阶段
ANTERHIVE运行原理
运行原理HIVE和数据库的区别
查询语言的区别
因为SQL被广泛用于数据仓库方面,因此专门针对HIVE的特性设计了类SQL语言--HQL。
这使得熟悉SQL的开发者可以方便使用HIVE进行开发。
数据存放位置的区别
HIVE是建立在Hadoop之上,所以数据存储在HDFS中。
数据库则是存储在本地文件系统中。
数据更新
由于HIVE是针对数据仓库应用设计的,而数据仓库的内容是读多写少。因此,HIVE不建议对数据仓库进行频繁读写,所有的数据再存入时就要确定好。
而数据库的数据是要频繁读写的,因此可以使用语句来添加修改数据。
索引
HIVE没有索引,也不需要索引。他读取数据就是暴力扫描所有数据。
而数据库需要根据实际应用对一个或多个建立索引,方便读取和检索。
执行
HIVE的查询时基于MapReduce实现的,数据库则是有自己的执行引擎。
执行延迟
HIVE的读取是直接暴力扫描所有数据,而且底层还是MR,双重延迟,导致HIVE延迟很高,但是这个高是相对的,HIVE可以处理海量数据还保持一个可以接收的延迟。
在和数据库比较时,HIVE的并行处理能力优势就得到的体现。
可扩展性
HIVE的存储是基于Hadoop的HDFS,世界上最大的hadoop集群是Yahoo的集群(4W台服务器,600PB数据,19个集群。)
而oracle最多也不过百台服务器。
网友评论