Hive与数据仓库——知识总结

Hive介绍:

  • Hive建立在Hadoop上的数据仓库基础框架,提供了一系列工具,存储,查询和分析存储在分布式存储系统中的大规模数据集,可以将结构化的数据文件映射为一张数据库表如(csv),并提供类SQL查询功能
  • Hive它能存储很大数据集,可以直接访问存储在HDFS中的文件,Hive支持MR,Spark,Tez三种分布式计算引擎,Hive的简单的类SQL查询语言,通过底层的计算引擎,将SQL转为具体的计算任务进行执行

Hive底层与数据库交互原理:

  • 由于Hive的元数据可能要面临不断地更新、修改和读取操作,所以它显然不适合使用Hadoop文件系统进行存储
  • 目前Hive将元数据存储在RDBMS中,比如存储在MySQL、Derby中
  • 元数据信息包括:存在的表、表的列、权限和更多的其他信息

HiveSQL底层转换为MR的过程:

  • Hive SQL -> 解析成AST(抽象语法树)-> 遍历AST生成QueryBlock(查询块)-> 遍历QueryBlock生成OperatorTree(操作树)-> 优化后的OperatorTree -> 生成MR Job -> 优化MR Job

Hive外部表与内部表区别:

  • 外部表:数据存储在原路径,元数据存储在Hive指定的Derby、MySQL
  • 内部表:数据存储在数据仓库指向路径,元数据储存在Hive指定的Derby、MySQL
  • 创建表时:
    • 内部表:会将数据移动到数据仓库指向的路径
    • 外部表:仅记录数据所在的路径,不对数据的位置做任何改变
  • 删除表时:
    • 内部表:元数据和数据会被一起删除
    • 外部表:只删除元数据,数据依旧存储在原来的路径下,更加安全、灵活

Hive分区表和分桶表区别:

  • 分区表:分区表字段不为数据表中的字段
  • 分桶表:分桶表字段为数据表中的某字段

Hive概念:

  • 用户接口:Client

    • CLI:hiveshell
    • JDBC/ODBC
    • WEBUI
  • 元数据:Metastore

    • 元数据包括:表名、表所属的数据库、表的拥有者、列/分区字段、表的类型(内/外)、表的数据存储路径等
    • 默认存储在自带的Derby中,推荐使用MySQL存储Metastore
  • Hadoop:HDFS+MR

    • Hive使用HDFS进行数据的存储(以文件形式存在),使用Derby/MySQL进行元数据的存储,使用MR/Spark/Tez进行数据的计算
  • 驱动器:Driver

    • 解析器(SQL Parser):将SQL字符串转换成「抽象语法树AST」
    • 编译器(Physical Plan):将「抽象语法树AST」编译生成「逻辑执行计划」
    • 优化器(Query Optimizer):对「逻辑执行计划」进行优化
    • 执行器(Excution):把「逻辑执行计划」转换为可以运行的「物理计划」。对于Hive来说,就是MR/Spark/Tez

    Hive与数据仓库——知识总结_第1张图片

Hive内置函数:

  • UDF(一进一出、user-defined function、用户定义函数):
    • 继承UDF类
    • 重写evaluate方法
  • UDAF(多进一出、user-defined aggregate function、用户定义聚集函数):
    • 继承类:
      • org.apache.hadoop.hive.ql.exec.UDAF(类继承)
      • org.apache.hadoop.hive.ql.exec.UDAFEvaluator(内部类Evaluator实现UDAFEvaluator接口)
    • 继承Evaluator接口需要实现 init、iterate、terminatePartial、merge、terminate这几个函数:
      • init():类似于构造函数,用于UDAF的初始化
      • iterate():接收传入的参数,并进行内部的轮转,返回boolean
      • terminatePartial():无参数,其为iterate函数轮转结束后,返回轮转数据,类似于hadoop的Combiner
      • merge():接收terminatePartial的返回结果,进行数据merge操作,其返回类型为boolean
      • terminate():返回最终的聚集函数结果
  • UDTF(一进多出、user-defined table-generating function、用户定义表生成函数):
    • 继承类:
      • org.apache.hadoop.hive.ql.udf.generic.GenericUDTF(类继承)
    • 实现initialize, process, close三个方法

数据仓库分层:

Hive与数据仓库——知识总结_第2张图片
Hive与数据仓库——知识总结_第3张图片

数据仓库建模:

  1. 选择业务流程:
    • 选择业务线,例如:下单业务、支付业务、退款业务、物流业务
  2. 声明粒度:
    • 指数据仓库中数据的细化程度,意味着事实表中的一行数据表示什么,应该尽可能选择「最小粒度」,以应对各种各样的需求,最小研究单位(例如在业务数据库中数据精确到秒,而将来分析确定到天即可)
  3. 确定维度:
    • 维度的主要作用是描述业务的角度
    • 确定维度的原则:后续需求中是否需要分析相关维度的指标。例如:需要统计什么时候下的订单多,哪个地区下的订单多。需要的维度就包括:时间维度,地区维度
  4. 确定事实:
    • 以业务需求为建模驱动,基于每个具体业务流程的特点,构建出「最细粒度」的「明细层事实表」,事实表可以适当作为「宽表」处理

数据仓库如何搭建好的模型:

  • 高内聚低耦合:
    • 将业务相近或相关、粒度相同的数据设计为同一个逻辑模型或者物理模型,将高频率的同时访问的数据放在一起、将低频率同时访问的数据分开放
  • 核心模型和拓展模型分离:
    • 建立核心模型和拓展模型体系,核心模型包括的字段支持常用的核心业务。拓展模型包括的字段支持个性化或少量音乐的需要
  • 公共处理层逻辑下沉且单一
    • 越是底层公用的处理逻辑越应用在数据底层调度系统的依赖中记性封装和实现
  • 成本和性能平衡
  • 数据可回滚:
    • 在不改变处理逻辑、不修改代码的情况重跑任务结果不变
  • 数据一致性:
    • 字段命名规范的一致性
    • 指标定义的口径一致性

维度表和事实表:

  • 维度表:
    • 定义:一般对事实的「描述信息」,每一张维度表对应现实世界中的一个对象或概念。例如:用户信息、商品信息、日期、时间、地区等
    • 特征:
      1. 维度表范围很宽,具有多个属性,列比较多
      2. 跟事实表比,行数相对较小
      3. 内容相对固定
  • 事实表:
    • 定义:每行数据代表一个「业务事件」,例如:下单、支付、退款、评价等
    • 特征:
      1. 表行数非常大
      2. 内容相对窄,列数较少
      3. 经常发送变化,每天新增很多行

你可能感兴趣的:(BigData,数据仓库,hive,大数据,数据库)