Hive-1 数仓和Hive基本概念

数仓和Hive基本概念

  • 数仓基础知识
    • 数仓基本概念
    • 数仓特点
    • 数仓和数据库的主要区别
      • OLTP和OLAP
    • 数据仓库的分层架构
    • 数据仓库分层的目的
    • 数仓的三层架构
    • 数仓的四层架构
    • ETL
  • Hive概念
    • Hive和数据库的区别
    • Hive的优缺点
    • Hive框架原理
    • Hive SQL执行过程简述
    • Hive数据类型
      • 基本数据类型
      • 复合数据类型
  • Hive的交互方式

数仓基础知识

数仓基本概念

  • 数仓英文名Data Warehouse ,简写为DWDWH
  • 数仓的目的是构建面向分析的数据环境,数仓本身不产生数据,也不消耗数据。数据来源于外部,并且开放给外部使用。这也是数仓为什么叫“仓库”,而不是叫“工厂的原因”。

数仓特点

  • 面向主题:数仓构建时,将所分析的相关业务(主题)的数据汇聚到数仓中
  • 集成性:所有数据源中和主题相关的数据汇聚到一起
  • 非易失性:数据进入数仓后,基本不会被修改
  • 时变性:分析数据的手段(工具)可能会变

数仓和数据库的主要区别

数仓的出现并不是要取代数据库,数仓是在数据库已经大量存在的情况下,为了进一步挖掘数据来决策而产生的,数仓绝不是“大型数据库”数仓和数据库的区别实际上是OLAPOLTP的区别

  • 数仓是面向主题设计的,数据库是面向事物设计的
  • 数仓存储的一般是历史数据,数据库存储的一般是事物相关数据
  • 数仓设计时会可以引入冗余,依然分析需求、分析维度、分析指标进行设计。数据库设计时会尽量避免冗余
  • 数据库是为了捕获数据而设计的, 数仓是为了分析数据而设计的。
    • 如:客户在银行的每笔交易都会写入数据库,可以理解成用数据库记账。数仓是分析系统的数据平台,它从事物系统中获得数据,通过分析、决策交易额,存款等维度来决定在哪增加ATM存款机

OLTP和OLAP

  • 操作型处理,叫联机事务处理 OLTP(On-Line Transaction Processing),也可以称面向交易的处理系统,它是针对具体业务在数据库联机日常操作,通常对少数记录进行查询、修改。用户较为关心操作的响应时间数据的安全性完整性并发支持的用户数等问题。传统的数据库系统作为数据管理的主要手段,主要用于操作型处理OLTP。

  • 分析型处理,叫联机分析处理 OLAP(On-Line Analytical Processing),一般针对某些主题的历史数据进行分析,支持管理决策

数据仓库的分层架构

  • 数仓的数据来源于不同的数据源(如自己的服务器,第三方购买,抓取等),数据自下而上流入数仓后,供上层使用。数仓只是一个数据管理平台
  • 数仓可以按照需求分为三层、四层、五层(很少,比较出名的是阿里用的是五层架构)
  • 分层不是越多越好,每增加一层数据量就可能翻倍,设计的时候够用就行。

数据仓库分层的目的

  • 用空间换时间。通过大量的预处理来提升效率,因此数仓会存在大量的冗余数据。如果不分层的话,每个源业务系统的业务变化会影响整个数据清洗过程,工作量巨大。
  • 简化数据清洗过程。通过分层,可以将原来的一步的工作分解成多个步骤,相当于将一个复杂的工作分解成多个简单的工作。每一层的逻辑都相对简单,当初先问题时,局部调试出问题的步骤即可。

数仓的三层架构

  • 贴源层或数据源层(ODS):主要用于保存原始数据,不对数据做任何更改
  • 数据仓库层(DW):也称为细节层。DW层的数据应该是干净、准确的。即对ODS层进行了清洗(去除杂质)后的数据
  • 数据展示层(DA或APP):前端应用直接读取的数据源。根据报表、需求而计算生成的数据。

数仓的四层架构

数仓的四层架构是对三层架构中的DW层进行了细分

  • ODS层:贴源层
  • DWD层:ods层的数据进行清洗的操作 ==》将数据变成结构化的数据
  • DWS层:对ods层的数据进行聚合操作 ==》 将多张表合并成为一张表
  • ADS层:数据展示层

ETL

ETL(抽取Extra,转化Transfer,装载Load)是数仓的流水线,它维持着数仓的更新。
数仓从各个数据源获取数据、数仓内的数据转换和流动都可以认为是ETL.

Hive概念

  • hive是一个基于hadoop的数据仓库的工具
  • 能将结构化数据映射成一张,并提供SQL查询功能
  • hive默认使用MR作搜索引擎,运行SQL语句时会转化成MapReduce任务运行
    Hive-1 数仓和Hive基本概念_第1张图片

hive的底层执行引擎有3种

  • mapreduce(默认)
  • tez(支持DAG作业的计算框架)mr1–>mr2 -->mr3
  • spark(基于内存的分布式计算框架)

Hive和数据库的区别

  • Hive 具有 SQL 数据库的外表,但应用场景完全不同。
  • Hive 只适合用来做海量离线数据统计分析,也就是数据仓库
    Hive-1 数仓和Hive基本概念_第2张图片
    Hive的索引很少用,比较鸡肋

Hive的优缺点

  • 优点
    • 操作接口采用SQL语法,避免写MapReduce,容易上手,坚守学习成本
    • Hive支持用户自定义函数,可以根据需求自定义函数
  • 缺点
    • Hive的查询延迟严重,因为底层要转换成MR任务
    • Hive不支持事物

Hive框架原理

Hive-1 数仓和Hive基本概念_第3张图片

  1. Client
    • CLI(Hive Shell)
    • JDBC/ODBC(java访问Hive)
    • WEBUI(浏览器访问Hive)
    • 第三方界面工具,如Hue。通过界面操作Hive
  2. 元数据:MetaStore
    • 元数据包括:表名,表所属数据库(默认default),表的拥有者,列/分区字段、表的类型(是否是外部表)、表的数据所在目录等
    • 元数据默认存储在Derby(单连接数据库)中,所以推荐使用MySQL存储Metatore
  3. Hadoop
    • 使用HDFS存储表数据,DN。默认使用MR进行计算,也可以使用其他引擎,如Spark,提交给yarn集群运行,RM,NM。
  4. Driver
    • 解析器(SQL Parser)
      • 将SQL字符串转换成抽象语法树AST
      • 对AST进行分析:如路径是否存在、字段是否存在、SQL语义是否有误
    • 编译器(Physical Plan)
      • 将AST编译成执行计划
    • 优化器(Query Optimizer)
      • 对逻辑计划进行优化
    • 执行器(Execution)
      • 将逻辑任务转换成可以运行的物理任务。对Hive来说默认就是MapReduce任务

Hive SQL执行过程简述

  1. 用户创建表时,建立HDFS和元数据库MetaStore的映射
  2. 用户执行select SQL时通过解析器将SQL语句转化成抽象语法树AST
  3. 解析器从MetaStore中拿到表数据信息
  4. 经过编译和优化后将转化成可以执行的物理任务,如MR
  5. 提交给yarn集群运行
    Hive-1 数仓和Hive基本概念_第4张图片

Hive数据类型

基本数据类型

类型名称 描述 举例
boolean true/false true
tinyint 1字节的有符号整数 1
smallint 2字节的有符号整数 1
int 4字节的有符号整数 1
bigint 8字节的有符号整数 1
float 4字节单精度浮点数 1.0
double 8字节单精度浮点数 1.0
string 字符串(不设长度) “abc”
varchar 字符串(1-65355长度,超长截断) “abc”
timestamp 时间戳 1563157873
date 日期 20190715

复合数据类型

类型名称 描述 举例
array 一组有序的字段,字段类型必须相同 array(元素1,元素2) Array(1,2,3)
map 一组无序的键值对 map(k1,v1,k2,v2) Map(‘a’,1,‘b’,2)
struct 一组命名的字段,字段类型可以不同 struct(元素1,元素2) Struct(‘a’,1,2,0)
  • array类型字段的元素访问方式
    • 通过下表获取数据,下表从0开始。如array[0]
  • map类型字段的元素访问方式
    • 通过键获取值。如:获取a这个key对于的value,map[‘a’]
  • struct类型字段的元素访问方式
    • 把struct类型字段当成对象。如:定义struct c{a int , b string},通过c.a和c.b获得其中元素值
      示例:创建一张包含3个复合数据类型的表
create table complex(
         col1 array<int>,
         col2 map<string,int>,
         col3 struct<a:string,b:int,c:double>
)

Hive的交互方式

  • Hive交互shell,基本不用

    • 配置好环境后,任意路径运行Hive即可
  • Hive JDBC服务,需要一个对HDFS有操作权限的用户。用的比较多

    • 前台启动:hive --service hiveserver2。需要再开启一个新的会话窗口。
    • 后台启动:nohup hive --service hiveserver2 2>&1 &
    • 通过前台/后台启动后,通过beeline连接hive
      [hadoop@node03 ~]$ beeline --color=true
      beeline> !connect jdbc:hive2://node03:10000
      

    (beeline支持两种模式,内嵌和远程。)

  • Hive的命令,数仓搭建好后

    • 使用-e来直接指向hql语句
      • hive -e “show databases”
    • 使用-f参数执行包含hql语句的文件
      • hive -f /hive/hive.sql

你可能感兴趣的:(Hive)