Hive数据仓库笔记

Hive数据仓库笔记

Hive概述

HDFS 解决了分布式存储的问题,MapReduce 解决了分布式计算的问题,可以读取 HDFS 上的数据,完成大数据的分布式计算等,然而需要程序员熟悉MapReduce的框架原理和语法规则,对于一些比较复杂的统计对程序员的要求就比较高了。而 Hive 的出现简化了 MapReduce 的开发难度,只要你会 SQL,就能够快速的上手 Hive,通过简单的 SQL 语句就能实现复杂的 MapReduce 所能达到的功能。 美团数据仓库也是基于Hive搭建,每天执行近万次的Hive ETL计算流程,负责每天数百GB的数据存储和分析.

Hive的优点

简单容易上手

操作接口采用类 SQL 语法,提供快速开发的能力。

学习成本低

避免了去写MapReduce,减少开发人员的学习成本。

可扩展

Hive 可以自由扩展集群规模,一般情况下不需要重启服务

延展性

Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数

容错性

良好的容错性,即使节点出现问题 SQL 仍能够正常完成

Hive缺点

  • Hive 的 HQL 表达能力有限,迭代式算法无法表达,比如 pagerank 。数据挖掘方面,比如 k-means 。
  • Hive 的效率比较低,Hive 自动生成的 MapReduce 作业,通常情况下不够智能化
  • Hive 调优比较困难,粒度较粗
  • Hive 可控性差

Hive体系架构

Hive架构图

请添加图片描述

Hive架构基本组成

Hive 的体系结构主要分为以下几个部分:
用户接口

用户接口主要有 3 个:CLI,Client 和 WEBUI。其中最常用的就是 CLI,CLI启动时会启动一个 Hive 副本【其实就是一个 Shell 客户端】;Client 是 Hive 的客户端,用户通过其连接至 HiveServer2,在启动 Client 模式的时候,需要指出 HiveServer2 所在节点和端口,并且在该节点启动 HiveServer2;WEBUI 就是通过浏览器访问 Hive,可以使用 Hue 组件在浏览器上写 HQL 执行相关操作。

MetaStore

Hive 将元数据存储在关系型数据库中,比如 MySQL、Derby等。Hive 中的元数据包括表的名字、表的列和分区及其属性,表的属性(是否为外部表等)、表的数据所在目录等等

ThriftServer

ThriftServer 是将 Hive 作为一个服务器,其他机器可以作为客户端进行访问,可以使用多种编程语言【Java、Python 】通过代码操作 Hive。

Driver

  • SQL Parser
    - Hive 的解析器是将查询字符串转换成抽象语法树 —— AST,对 AST 进行语法分析,比如表是否存在、字段是否存在、SQL 语义是否有误
    • Physical Plan
      将 AST 编译生成逻辑执行计划
    • SQL Optimizer
      对逻辑执行计划进行优化
    • Execution
      把逻辑执行计划转换成可以运行的物理计划任务树。对于 Hive 来说,就是 MR/Spark
      请添加图片描述
      1.完成 SQL 词法,语法解析,将 SQL 转化为抽象语法树 AST Tree
      2.遍历 AST Tree,抽象出查询的基本组成单元 Query Block
      3.遍历 Query Block,翻译为执行操作树 OperatorTree,即逻辑执行计划
      4.逻辑层优化器进行 OperatorTree 变换,合并不必要的 ReduceSinkOperator,减少 Shuffle 数据量
      5.遍历 OperatorTree,翻译为 Hive job 任务,即物理计划
      6.物理层优化器进行 Hive job 任务的变换,生成最终的执行计划

数据库和数据仓库

OLTP : 联机事务处理就是保存我们日常生活中的各种用户行为产生的记录的数据平台.

  • 特点: 服务于业务,需要少量数据的频繁增删改查,要保证响应速度,保证数据安全,保证时效性.

OLAP : 联机分析处理,就是我们数据分析时所使用的海量数据存放的数据平台,一般会将多个业务数据库或各种数据源中的数据提取出来,统一存放在OLAP服务中.

  • 特点: 服务于分析,要能应对海量的数据存储和数据计算,对于响应速度要求不高,我们很少修改数据,所以也不需要对于数据的一致性,安全性等进行考虑.

数据库和数据仓库的区别

  • 本质的区别就是OLTP 和OLAP系统的区别
    • 数据库更偏重于事务处理,要求其支持事务,增删改查效率较高
      • 事务: 最小业务单元, 在执行过程中,要么全部 成功,要么全部失败
        • 举例: 小椭圆给小绿转账1000元 , 银行系统需要给小椭圆减少1000元, 给小绿增加一千元 要么同时成功,要么同时失败
        • 落实到代码层面就是多条sql语句,要么全部成功,要么全部失败.
    • 数据仓库偏重于数据吞吐量和稳定,不要求支持事务,不要求较高的响应效率,但必须可以处理海量数据或文件
    • 数据仓库不是大型的数据库,也没有要取代数据库的目标,只是一个数据分析的平台。

数据仓库核心特征

面向主题性(Subject-Oriented)

主题(subject)是一个抽象的概念 数据综合体。一个分析的主题可以对应多个数据源。
在数仓中开展分析,首先确定分析的主题,然后基于主题寻找、采集跟主题相关的数据。
在数据分析中,要做到宁滥勿缺.

集成性(Integrated)

数仓不是生成数据的平台 其数据来自于各个不同的数据源
当我们确定主题之后 就需要把和主题相关的数据从各个数据源集成过来。
因为同一个主题的数据可能来自不同的数据源 它们之间会存在着差异(异构数据):字段同名不统一、单位不统一、编码不统一;
因此在集成的过程中需要进行ETL(Extract抽取 Transform转换 load加载)

不可更新性(Non-Volatile)

数仓上面的数据几乎没有修改操作,都是分析的操作。
数仓是分析数据规律的平台 不是创造数据规律的平台。
注意:改指的数据之间的规律不能修改。
当下发现有些时间也是需要修改的 数据校正。数据缓慢变化。
notice:其中市面上有一些数仓管理工具时可以进行修改操作的,例如ES,但是目前出现的修改操作都是将数据拷贝到内存中,将数据修改过后再重新写入到数据仓库中。

时变性(Time-Variant)

数仓是一个持续维护建设的东西。
站在时间的角度,数仓的数据成批次变化更新。一天一分析(T+1) 一周一分析(T+7)

数据仓库的分层

ODS层(operation data Store): 数据操作层,源数据层,主要就是将各个数据源中的数据集中采集到指定平台中,几乎不对数据做任何处理,只是临时存放等待后续处理

DW层(Data Warehouse) : 数据仓库层, 对于数据进行数据清洗,数据处理,数据转换等,使其满足数据分析的要求

DA层APP层(application) : 数据应用层, 根据业务部门的需求,进行数据分析处理,获得的数据可以直接用于前端展示或数据报表等.

分层的好处

  • 解耦合(相互依赖),方便协同开发
  • 可以追根溯源,更快对于问题进行解决和修复
  • 过程中创建的中间表可以重复利用
  • 空间换时间 提高最终应用层使用数据的效率
  • 在这里插入图片描述
  • 58
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值