hive架构介绍、SQL引擎与NoSQL引擎的对比
hive架构介绍、SQL引擎与NoSQL引擎的对比
什么是hive?
hive构建在hadoop hdfs 上的数据仓库。
什么是数据仓库?
数据仓库是一个面向主题的,集成的,不可更新的,随时间不变化的数据集合,
它主要用于支持企业或组织的决策分析处理。
数据仓库实际上就是一个数据库,数据仓库的特点:引入冗余,分析数据;
数据库的特点:避免冗余,捕获数据。
数据仓库的构建过程
1、数据源 (业务数据系统、文档资料、其他数据)
2、数据存储及管理-ETL (抽取Extract、转换Transform、装载Load)
3、数据仓库引擎 (服务器)
4、前端展示 (数据查询、数据报表、数据分析、各类应用)
OLTP应用和OLAP应用
1.OLTP(on-line transaction processing) 联机事务处理
例:银行转账
2.OLAP(on-line analytical processing) 联机分析处理
例:商品推荐系统
数据仓库中的数据模型
1、星型模型——强调大范围的维度,冗余少
2、雪花模型——强调具体指标,有较多冗余,用起来方便
什么是hive
hive是建立在hadoop hdfs 上的数据仓库基础架构。
hive可以用来进行数据提取转化加载(ETL)。
hive提供了简单的类似SQL的查询语言(HQL),它允许熟悉SQL的用户查询数据。
hive允许熟悉MapReduce的开发者,
开发自定义的mapper和Reducer来处理内建的mapper和reducer无法完成的复杂的分析工作。
hive是SQL引擎,它将SQL语句转移成M/R job, 然后在Hadoop上执行。
hive表其实就是HDFS的目录/文件
HIVE的体系结构
hive的体系结构之元数据
hive的元数据
- hive将元数据存储在数据库中(metastore),支持mysql、derby等数据库(mysql、derby、oracle)
- hive中的元数据包括表的名字、表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
hive的体系结构之HQL的执行过程
解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。
生成的查询计划存储在HDFS中,并在随后又MapReduce调用生成。
hive的体系结构
hadoop
- 用HDFS进行存储,利用MapReduce进行计算
元数据存储 (MetaStore) - 通常是存储在关系数据库 mysql,derby等
什么是SQL引擎?
对关系型数据来说,数据库引擎 (或“存储引擎”)是DBMS用于从数据库增删查改(CRUD)数据的底层软件组件。
部署了最基本的数据存取(包括B+树以及索引)以后,还可以实现一些高级功能。
(1)SQL语言是数据库通用操作语言,所以需要一个SQL解析器,将SQL命令解析为对应的ISAM操作。
(2)数据库连接(join)是指数据库的两张表通过"外键",建立连接关系。你需要对这种操作进行优化。
(3)数据库事务(transaction)是指批量进行一系列数据库操作,只要有一步不成功,整个操作都不成功。所以需要有一个"操作日志",以便失败时对操作进行回滚。
(4)备份机制:保存数据库的副本。
(5)远程操作:使得用户可以在不同的机器上,通过TCP/IP协议操作数据库。
对于非关系型数据,主要在sql解析上区别。对比关系型与非关系型数据库如下;
SQL与NoSQL的典型引擎和区别
数据库类型 | SQL | NoSQL |
---|---|---|
举例 | Oracle、SqlServer、MySQL、PostgreSQL等 | MongoDB、Redis、HBase等 |
存储结构 | 采用结构化表来存储数据 | 采用半结构化数据集存储数据 |
存储规范化 &存储代价 | 通过更加规范化逻辑表来避免重复,获得最精简的空间,但数据操作往往涉及多个表,数据管理复杂。 | 将数据存储在数据集中,数据经常可能存储重复,但数据更容易读写。 |
横向扩容能力 | 较弱 | 较强 |
事务性 &纯扩展性 | 非常好的支持事务性 | 不支持或半支持 |
关系型数据库特征及适用场景
数据库 | 特征 | 适用场景 |
---|---|---|
MySQL | 最广泛、流行的开源数据库,支持多插件式存储引擎、灵活、多平台,支持水平拆分。 | 支持高并发,简单的绝大部分 OLTP场景,单实例数量级不易过大,非常适合大规模数据库场景相对简单的互联网行业。 |
SQL Server | 与微软体系紧密结合的商业关系型数据库,大多数操作通过图形界面完成,支持共享存储方式的数据库集群,可通过硬件进行垂直升级。 | 适用于应用端采用微软体系的大多数 OLTP场景。 |
Oracle | 目前市面上功能最强大、最复杂的商业数据库,有一套完整监控管理体系,支持多种高可用方案。 | 适用于稳定性、安全性要求非常高的 OLTP场景,如银行、金融行业。 |
PostgreSQL | 目前功能最强大的开源数据库,支持多平台、多种高可用方案,但国内社区活跃度有待进一步增强。易用性介于 mysql与oracle中间。 | 支持绝大多数高并发 OLTP场景,国内大规模应用的案例相对较少,适合作为oracle与mysql之间的折中方案。 |
关系型数据库特征及适用场景
数据库 | 特征 | 适用场景 |
---|---|---|
MongoDB | 主流的文档型 NoSQL数据库,开源,多平台。 | 适用于更新迭代快、需求变更多、以对象为主的网站应用、小文件系统、日志分析系统等。 |
Redis | 主流的内存数据库,性能高,稳定性好。 | 适用于对命令响应速度要求高,热点数据规模小、读取频繁的场景。 |
Hbase | 主流的海量列式存储型 NoSQL数据库。 | 适用于简单数据写入和海量、简单数据查询的业务场景,多用于 OLAP场景。 |
hive on
spark及spark on hive,spark sql的区别:sql引擎和计算引擎
Spark-SQL:Spark SQL引擎 + SparkRDD引擎
Hive on Spark:Hive SQL引擎+ SparkRDD引擎
Spark on Hive: Hive SQL引擎+ SparkRDD引擎
Hive on Spark和Spark on Hive之间的SQL和计算引擎是一模一样的,如果区分?
Hive on Spark 是在Hive中配置Spark,运行方式入口是通过Hive,底层是有第三方的hive on spark中间包自动转换MR引擎,变为SparkRDD引擎。
Spark on Hive 是在Spark中配置Hive,运行方式入口是通过Spark,底层通过配置Hive的hive-site.xml,hdfs-site.xml等配置文件来直接操作hive SQL,其实是Hive的语法规则,但是计算还是本身的SparkRDD引擎。
Spark-SQL、Hive on Spark、Spark on Hive使用场景
从计算引擎上来看,三者都是SparkRDD计算引擎。从计算性能上来看,其实不会差非常多,都是取决于SparkRDD计算引擎。
Spark-SQL更多是开发Code中进行计算任务比较多,同时Saprk-SQL可以持久化到库表中方便第二次使用。
Hive on Spark,常规的数仓查询任务的,对外接口服务之类的。因为Hadoop生态群中的WEBUI界面非常丰富,所以直接通过HiveSQL查询将会非常方便。
Spark on Hive,使用Spark作为开发架构的,Hive作为数仓存储的场景中使用。
Hive
计算引擎的切换方法
1、配置mapreduce计算引擎
set hive.execution.engine=mr;
2、配置spark计算引擎
set hive.execution.engine=spark;
3、配置tez 计算引擎
set hive.execution.engine=tez;
参考
HIVE入门(概述、hive的体系结构): https://zhuanlan.zhihu.com/p/46210633
从 Hive 迁移到 SparkSQL,有赞的大数据实践:https://www.infoq.cn/article/I0ogpB7hMY4r4-4dFDDI
Hive计算引擎的切换方法:https://blog.****.net/u014236468/article/details/80927783
主流开源SQL引擎总结,不断改进的Hive始终遥遥领先 :https://www.sohu.com/a/127616590_470008
如何开发一个大数据SQL引擎:
https://geek-docs.com/hive/hive-tutorial/how-to-develop-a-large-data-sql-engine.html
大学生如何实现一个数据库?:https://www.zhihu.com/question/35382593
数据库的最简单实现:
https://www.ruanyifeng.com/blog/2014/07/database_implementation.html
数据库入门之3张表对比关系型与非关系型数据库:http://blog.itpub.net/31556022/viewspace-2638924/