数据库和数据仓库的区别:
数据库 On-Line Transaction Processing(OLTP):存储数据的仓库 一般用于事务操作,主要是用于捕获数据 要求延迟性较低
数据仓库 On-Line Analytical Processing(OLAP):存储数据的仓库 ,面向于主题(分析)的,一般是保存过去的历史数据,主要是对这些数据进行统计分析,对未来提供决策支持,一般对延迟没有特备要求
- 何为数据分析呢?
指的从数据容器中,根据需求要求获取相关的数据的过程(数据查询操作)
一般使用什么工具进行数据分析呢? SQL
会SQL的人一般比会任何其他语言的人多
- 什么是数据仓库?
数据仓库就是面向于分析 主要是用于保存过去的历史数据对这些数据进行统计分析处理 从而对未来提供决策支持
可以把数据仓库比作粮仓
思考1: 粮仓自己是否会生产粮食
不会的, 粮食一般来源于全国各地
思考2: 粮仓是否会消耗粮食
粮仓自己并不会消耗粮食
-
数仓的最大特点
-
数仓本身不生产数据 也不消耗数据 数据来源于各个数据源
-
-
数据仓库的四大特征
数据库和数据仓库区别
- 面向于主题(分析)的:主题指的分析的目标
- 继承性:数据都是来源于各个数据源的,将各个数据源的数据集中防止在一起
- 非易失性(稳定性):由于存储的是过去既定发生的数据,这些数据一般不允许出现变更
- 时变性:随着时间的推移,原有的分析方案可能无法满足未来的需求,此时需要变更,同时数据也会出现新增操作
数据库(OLTP 联机事务处理): 面向于业务 用于捕获数据 延迟性比较低 数据构建尽量避免冗余发生
数据仓库(OLAP 联机分析处理 ): 面向于主题(分析), 存储过去既定发生的历史数据 对延迟性没有要求 允许出现冗余
数据仓库的分层设计和ETL介绍首先要明白,数据仓库的出现 并不是为了取代数据库
- 数据库是面向于事务的设计,数据仓库是面向于主题设计的。
- 数据库一般存储业务数据,数据仓库存储的一般是历史数据。
- 数据库设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的user表,记录用户名、密码等简单数据即可,符合业务应用,但是不符合分析。数据仓库在设计是有意引入冗余,依照分析需求、分析维度、分析指标进行设计
- 数据库是为捕获数据而设计,数据仓库是为分析数据而设计。
- 数据仓库 是在数据库已经大量存在的情况下 为了进一步挖掘数据资源 为了决策需要而产生的 它绝不是所谓的“大型数据库”。
为什么要进行数仓分层呢?
根据上图总结
- 利于维护管理
- 提供开发效率
数据仓库的分层: ODS层:源数据层 作用: 对接数据源,一般会和数据源保持相同的粒度,完整的数据源的数据拷贝到ODS层中 DW层:数据仓库层 作用:进行数据分析处理工作 DA层:数据应用层 作用:存储DW层分析的结果数据,用于对接后续应用方向 ETL(抽取Extract,转换Transform,加载Load)操作:不管是在DW层 还是DA层都是存在的 基本流程: 1、数据从ODS层抽取出来,对ODS层数据进行清洗转换处理工作,将清洗转换处理后的数据加载到DW层操作 2、数据从DW层抽取出来,对DW层数据进行统计分析处理工作,将处理后的是数据加载到DA层操作 ELT操作:ETL包含ELT 基本流程: 数据从各个数据源中被抽取出来,直接灌入到DW层的过程 ETL工程师:主要从事将数据源的数据灌入到ODS以及再次灌入到DW层操作,甚至包括灌入到DA层 数仓分析工程师:进行DW分析处理工作Apache Hive 基本介绍
hive是隶属于Apache软件基金会的一员, 是apache的顶级项目(http://hive.apache.org), hive是基于hadoop, 意味着如果要使用hive, 必须要先安装并启动好hadoop集群
hive是一个数据仓库的工具, 可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
本质是将SQL转换为MapReduce程序, 意味着分析的时效性较差
应用场景: 进行离线数据分析
hive的架构 对架构的解释hive其实就是一个翻译软件, 将SQL翻译成MR操作, 而对于使用者, 无需关系底层翻译过程, 只需要会写SQL即可
客户端: 命令行客户端, thrift Server, web 后期主要采用命令行客户端 和 thrift Server hive服务: 解释器: 客户端传递过来SQL后, 首先通过解释器对SQL的语法已经数据进行校验处理 解析器: 将SQL进行编译处理, 生产执行计划(先执行什么, 然后执行什么, 怎能处理, 数据在哪里, 量有多少) 优化器: 对解析器生成的执行计划进行优化处理 执行器: 将执行计划默认翻译为MapReduce, 将MR提交给YARN集群,后续执行器监控状态 获取结果 元数据服务: 在hive中, 创建库, 创建表, 表有那些字段, 字段类型, 数据从哪里读... 这些都是元数据 hive仅仅是一款工具, 并不负责任何数据的存储, 元数据存储需要依赖于数据库来存储, 默认的数据库是derby, 生产中一般会选择外部数据库比如MySQL hive专门提供了一个用于和元数据打交道的服务: metastore服务 整个hive: 数据读取一般都是来源于HDFS, 数据计算一般是有MR计算, 交由给yarn提供资源 可以说, hive和hadoop是一个强依赖的关系
hive:主要是进行离线化 批量化数据处理操作
hive的部署三种模式:
- 内嵌模式
指的: 将metastore服务和hive服务内嵌在一起, 无需单独启动metastore服务项,随着客户端的启动而启动,同时在内嵌模式下, 采用元数据库为derby数据库 好处: 安装简单, 解压即可用 弊端: 在不同路径下启动hive, 都会单独形成一个derby数据库, 导致元数据无法共享, 会出现脑裂问题 说明: 此种模式在实际生产中, 基本不会见到
- 本地模式
指的: 将metastore服务和hive的服务内嵌在一起, 无需单独启动metastore服务项,随着客户端的启动而启动,但是可以自由选择元数据库, 一般会选择第三方mysql数据库作为元数据存储 好处: 部署相对简单, 而且避免脑裂问题 弊端: 每一次启动hive, 都会同时启动一个metastore的服务项, 导致数据库连接增多, 占用资源, 对mysql影响不好 说明: 此种模式一般在测试环境中使用
- 远程模式
指的: 将metastore服务和hive服务都独立出来, 形成两个单独独立的服务项, 分别为 metastore 和 hiveserver2服务, 这两个服务是可以单独部署启动 长期挂载在后台, 后续客户端就可以通过hive服务进行连接操作, 而且客户端可以在任意的节点上, 以及后续一些其他的软件需要依赖于hive, 主要依赖的也是metastore服务项 好处: 支持远程连接, 只需要启动一次即可 , 方便和其他软件进行集成 弊端: 安装较为繁琐一些 说明: 此种模式是后续以及生产环境中主要采用模式



