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.csdn.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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章