数分-理论-大数据6-Hive

数分-理论-大数据6-Hive(数据仓库)

(数据分析系列)

1知识点

  • 数据仓库
  • Hive基础
  • Hive核心
  • Hive系统结构
  • 实战应用

2具体内容

2.1数据仓库

2.1.1起源

在这里插入图片描述基于分析型决策的优化,需高性能的完成用户查询,提出数据仓库

2.1.2数仓概念

1.概念

  • 数据仓库是一个面向主题的、集成的、非易失的、随时间变化的,用来支持管理人员决策的数据集合,数据仓库中包含了粒度化的企业数据。
  • 企业数据仓库有效集成了来自不同部门、不同地理位置、具有不同格式的数据,为企业管理决策者提供了企业范围内的单一数据视图。

2.特征
主体性+集成性+非易失性+时变性
在这里插入图片描述

  • 主题性
    • 针对不同业务进行归类分析,抽象为主题,对应某一分析领域涉及的分析对象
    • 抽象层次,每个领域各有逻辑内核,互不交叉
  • 集成性
    • 统一口径,统一数据来源中的歧义、单位、字长等元素进行总和计算,聚合成新数据
  • 非易失性
    • 保存历史业务数据,根据业务每隔一段时间导入新的数据,不会轻易丢失改变
  • 时变性
    • 反应一个业务过程,业务变化会随着改变,适应分析决策
2.1.3体系结构

数据源、数据存储和管理、数据服务以及数据应用
在这里插入图片描述

  1. 数据源:数仓的数据来源,外部数据+业务系统+文档资源
  2. 数据存储和管理:存储和管理数据,数据仓库+数据集市+数据仓库监视+运行与维护工具+元数据管理
  3. 数据服务:为前端工具和应用提供数据服务,从数仓获取数据提供给前端,或通过OLAP服务器为前端应用提供复杂数据服务
  4. 数据应用:直接面向最终用户,数据工具+自由报表工具+数据分析工具+数据挖掘工具+应用系统
2.1.4存在挑战
  • 无法满足快速增长的海量数据存储需求
  • 无法有效处理不同类型的数据
  • 计算和处理能力不足

2.2Hive基础

在这里插入图片描述

2.2.1概述
  • 建立在hadoop上的一种数仓工具
  • 结构化、半结构化的数据文件映射为一张数据库表
  • 基于数据库表,提供一种类sql的查询模型HQL
  • 访问、分析存在Hadoop文件中的大型数据集

注意:

  • 本身不具备存储功能
  • 核心:将HQL转换为MapReduce程序,提交到Hadoop集群执行
    在这里插入图片描述

特点:

  • 类SQL的查询语言HQL
  • 可自定义用户函数UDF和存储格式
  • 为超大数据集设计计算和存储能力,集群扩展容易
  • 统一元数据管理,可与preso\impala\sqarksql共享数据
  • 执行延迟高,不适实时处理,时候海量数据离线处理
2.2.2背景
  • 成本:MR需要学java,不易复杂查询
  • 建立分析型数仓:支持类SQL的查询及支持自定义函数,可做数仓工具
2.2.3Hive与Hadoop生态系统

在这里插入图片描述

  • HDFS:分布式文件系统,存储海量数据
  • MapReduce:分布式并行编程模型,批处理,实现高性能计算
  • Hive:数据仓库,不存储和处理数据,用HQL编写处理逻辑,转换为MR任务执行
  • Pig:Hive的替代工具,数据流语言和运行环境,适用于在Hadoop平台查询半结构化数据集,用于数据抽取(ETL),将外部数据装载到Hadoop集群,转换为用户需要的数据格式
  • HBase:分布式数据库,面向列式存储、分布式、可伸缩的数据库,它可以提供数据的实时访问功能
    • Hive只能处理静态数据,BI报表数据
    • Hive为了减少复杂MR应用程序的编写
    • HBase为了实现对数据的实时访问
2.2.4对比

底层依赖HDFS+MapReduce

对比内容Hive传统数据库
数据存储HDFS本地文件系统
索引支持有限索引支持复杂索引
分区支持支持
执行引擎MapReduce、Tez、Spark自身的执行引擎
执行延迟
扩展性有限
数据规模
2.2.5模拟实现
1,jingjing,26,hangzhou
2,wenrui,26,beijing
3,dapeng,26,beijing
4,tony,15,hebei
  • 需求:HDFS文件系统的文件,编写SQL,统计来自北京的年龄大于20的人数

  • 分析:对表操作,先找到文件与表的对应关系,实现表与文件的映射
    在这里插入图片描述

    • 表位置
    • 字段位置
    • 内容读取的分隔操作
  • Hive对SQL语句语法校验,根据记录的元数据对sql解析,制定执行计划,转为MR程序执行,结果封装后返回给用户

2.3Hive核心

2.3.1数据类型

1.基本数据类型

大类类型
Integers(整型)TINYINT:1字节的有符号整数; SMALLINT:2字节的有符号整数;INT:4字节的有符号整数;
BIGINT:8字节的有符号整数
Boolean(布尔型)BOOLEAN:TRUE/FALSE
Floating point numbers(浮点型)FLOAT:单精度浮点型;
DOUBLE:双精度浮点型
Fixed point numbers(定点数)DECIMAL:用户自定义精度定点数,比如 DECIMAL(7,2)
String types(字符串)STRING:指定字符集的字符序列;VARCHAR:具有最大长度限制的字符序列;CHAR:固定长度的字符序列
Date and time types(日期时间类型)TIMESTAMP:时间戳;
TIMESTAMP WITH LOCAL TIME ZONE:时间戳,纳秒精度;DATE:日期类型
Binary types(二进制类型)BINARY:字节序列
  • TIMESTAMP :提交的时间按照原始时间保存,查询时,也不做任何转换
  • TIMESTAMP WITH LOCAL TIME ZONE:用户提交TIMESTAMP给数据库时,会被转换成数据库所在的时区来保存。查询时,则按照查询客户端的不同,转换为查询客户端所在时区的时间。

2.隐式转换:子类型到祖先类型允许隐式转换

  • STRING类型可隐式转换为DOUBLE类型
    在这里插入图片描述

3.复杂类型

类型描述示例
STRUCT类似于对象,字段的集合,字段的类型可以不同,可以使用名称.字段名方式进行访问STRUCT(‘xiaoming’, 12 , ‘2018-12-12’)
MAP键值对的集合,可以使用名称[key]的方式访问对应的值map(‘a’, 1, ‘b’, 2)
ARRAY数组是一组具有相同类型和名称的变量的集合,可以使用名称[index]访问对应的值ARRAY(‘a’, ‘b’, ‘c’, ‘d’)
CREATE TABLE students(
  name      STRING,   -- 姓名
  age       INT,      -- 年龄
  subject   ARRAY<STRING>,   -- 学科
  score     MAP<STRING,FLOAT>,  -- 各个学科考试成绩
  address   STRUCT<houseNumber:int, street:STRING, city:STRING, province:STRING>  -- 家庭居住地址
) ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";
2.3.2数据模型
  • 描述Hive组织、管理和操作数据的方式
  • Hive数据存于HDFS,默认一个根目录,在hive-site.xml配置数据的存储路径
    1.库
  • 默认数据库default
  • 创建不同数仓库database
  • 相当于关系数据库的命名空间,将用户和数据库的表隔离

2.表

  • 表相关的元数据是存储在关系数据库

  • 分内部表,外部表

    1)加载数据和创建表:

    • 内:过程分开,加载时数据被移动到数仓目录,对数据的访问在数仓目录实现
    • 外:是一个过程,访问即读取HDFS内数据
      2)删除表:
    • 内:表内数据和元数据同步被删除(数据移到数仓目录了)
    • 外:数据在HDFS,删除表不影响数据
      3)创建表:
    • 默认创建内部表
    • External创建外部表
内容内部表外部表
数据存储位置内部表数据存储的位置由hive.Metastore.warehouse.dir参数指定,默认情况下,表的数据存储在HDFS的/user/hive/warehouse/数据库名.db/表名/目录下外部表数据的存储位置创建表时由Location参数指定
导入数据在导入数据到内部表,内部表将数据移动到自己的数据仓库目录下,数据的生命周期由Hive来进行管理外部表不会将数据移动到自己的数据仓库目录下,只是在元数据中存储了数据的位置
删除表删除元数据(metadata)和文件只删除元数

3.分区:优化

  • 减少全表扫描
  • 存储:表的主目录文件夹下的子文件夹,子文件夹的名字表示所定义的分区列名字

4.分桶:拆分数据文件本身

  • 根据表中字段(例如,编号ID)的值,经过hash计算规则,将数据文件划分成指定的若干个小文件
  • 优化join查询方便抽样查询

2.4Hive系统结构

用户接口模块+驱动模型+元数据存储模块
在这里插入图片描述

2.4.1用户接口模块
  • 实现外部应用对Hive的访问
  • 包括:CLI、Hive网页接口(Hive Web Interface,HWI)、JDBC、ODBC、Thrift Server等
  • 操作数据:
    • CLI(command-line shell): Hive自带的一个命令行客户端工具
    • HWI(Thrift/JDBC):Hive的一个简单网页,JDBC、ODBS和Thrift Server可以向用户提供编程访问的接口。用户可以按照标准的JDBC的方式,通过Thrift协议操作数据。
2.4.2驱动模块Driver
  • 实现:MR,把 HiveQL语句转换成一系列MapReduce作业,所有命令和查询都会进入驱动模块,通过该模块对输入进行解析编译,对计算过程进行优化,然后按照指定的步骤执行。
  • 包括:编译器、优化器、执行器等
  • 执行引擎:可以是 MapReduce、Tez或Spark等
2.4.3元数据存储模块Metastore

1.元数据:描述数据的数据

  • 描述HDFS文件和表的各种对应关系(位置关系、顺序关系、分隔符)
  • 存储:在关系数据库中(Hive内置的是Derby、第三方的是MySQL),HDFS中存储的是数据
  • 默认存储在Hive内置的Derby数据库中,但由于Derby只能有一个实例,也就是说不能有多个命令行客户端同时访问,所以在实际生产环境中,通常使用 MySQL代替Derby

2.Metastore

  • Metastore是独立的关系数据库,可以是MySQL实例,也可是Hive自带的Derby实例,提供元数据服务
  • Metastore保存表模式和其他系统元数据
    • 表的名称
    • 表的列及其属
    • 表的分区及其属性
    • 表的属性
    • 表中数据所在位置信息等
  • Metastore对外提供一个服务地址,使客户端能够连接Hive,以此来对元数据进行访问
    • 元数据把数据保存在关系数据库中,Hive提供元数据服务,通过对外的服务地址,用户能够使用客户端连接Hive,访问并操作元数据
    • 支持多个客户端的连接,实现了数据访问层面的解耦操作
    • Hive创建的表在presto/impala/sparksql中可直接使用(Metastore中获取统一的元数据信息)

在这里插入图片描述

3.Metastore管理元数据方式

  1. 内嵌:默认Metastore元数据服务和Hive服务融合在一起
    在这里插入图片描述

    • Hive服务(即Hive驱动本身)+ 元数据服务Metastore + 元数据metadata(用于存储映射信息)在一个JVM
    • 启动HiveServer进程,Derby和Metastore都会启动
    • 一次只能支持一个用户访问,适用于测试场景
  2. 本地:把元数据提取出来
    在这里插入图片描述

    • Metastore服务与HiveServer主进程在同一个JVM进程中运行,存储元数据的数据库在单独的进程中
    • 元数据一般存储在MySQL关系型数据库
  3. 远程:都单独进程
    在这里插入图片描述

    • Metastore在单独进程运行,保证全局唯一,保证数据访问安全性(不随hive启动而动)
    • 安装在远程服务器集群,解耦Hive服务和Metastore服务,保证Hive的稳定运行
2.4.4HQL的执行流程
  1. 语法解析:Antlr定义SQL的语法规则,完成SQL词法,语法解析,将SQL转化为抽象语法树AST Tree;
  2. 语义解析:遍历AST Tree,抽象出查询的基本组成单元QueryBlock;
  3. 生成逻辑执行计划:遍历QueryBlock,翻译为执行操作树OperatorTree;
  4. 优化逻辑执行计划:逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量;
  5. 生成物理执行计划:遍历OperatorTree,翻译为MapReduce任务;
  6. 优化物理执行计划:物理层优化器进行MapReduce任务的变换,生成最终的执行计划。

2.5实战应用

  1. Hive的安装部署和管理
  2. Hive常用的DDL操作

3参考

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值