08_Hive数据仓库_note

基于Hadoop的数据仓库Hive

1. 概述

  • 数据仓库概念

    • 数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策。
      在这里插入图片描述
  • 传统数据仓库面临的挑战

  • 无法满足快速增长的海量数据存储需求

  • 无法有效处理不同类型的数据

  • 计算和处理能力不足

  • Hive简介

    Hive是一个构建于Hadoop顶层的数据仓库工具
    支持大规模数据存储、分析,具有良好的可扩展性
    某种程度上可以看作是用户编程接口,本身不存储和处理数据
    依赖分布式文件系统HDFS存储数据
    依赖分布式并行计算模型MapReduce处理数据
    定义了简单的类似SQL 的查询语言——HiveQL
    用户可以通过编写的HiveQL语句运行MapReduce任务
    可以很容易把原来构建在关系数据库上的数据仓库应用程序移植到Hadoop平台上
    是一个可以提供有效、合理、直观组织和使用数据的分析工具
    
    • Hive具有的特点非常适用于数据仓库
      • 采用批处理方式处理海量数据
        • Hive需要把HiveQL语句转换成MapReduce任务进行运行
        • 数据仓库存储的是静态数据,对静态数据的分析适合采用批处理方式,不需要快速响应给出结果,而且数据本身也不会频繁变化
      • 提供适合数据仓库操作的工具
        • Hive本身提供了一系列对数据进行提取、转换、加载(ETL)的工具,可以存储、查询和分析存储在Hadoop中的大规模数据
        • 这些工具能够很好地满足数据仓库各种应用场景
  • Hive与Hadoop生态系统中其他组件的关系

    • Hive依赖于HDFS 存储数据
    • Hive依赖于MapReduce 处理数据
    • 在某些场景下Pig可以作为Hive的替代工具
    • HBase 提供数据的实时访问

在这里插入图片描述

在这里插入图片描述

  • Hive与传统数据库的对比分析

    • Hive在很多方面和传统的关系数据库类似,但是它的底层依赖的是HDFS和MapReduce,所以在很多方面又有别于传统数据库
      在这里插入图片描述
  • Hive在企业中的部署和应用

    • Hive在企业大数据分析平台中的应用
      在这里插入图片描述
    • Hive在Facebook公司中的应用
      在这里插入图片描述
    • 基于Oracle的数据仓库系统已经无法满足激增的业务需求
    • Facebook公司开发了数据仓库工具Hive,并在企业内部进行了大量部署

2. Hive系统架构

在这里插入图片描述

  • 用户接口模块包括CLI、HWI、JDBC、ODBC、Thrift Server
    在这里插入图片描述

  • 驱动模块(Driver)包括编译器、优化器、执行器等,负责把HiveSQL语句转换成一系列MapReduce作业
    在这里插入图片描述

  • 元数据存储模块(Metastore)是一个独立的关系型数据库(自带derby数据库,或MySQL数据库)
    在这里插入图片描述

  • Qubole
    在这里插入图片描述


3. Hive HA基本原理

在这里插入图片描述 在这里插入图片描述


4. SQL转换为MapReduce作业的原理

Hive本身不做具体的数据处理和存储(数据处理依赖于MapReduce,存储依赖于分布式文件系统HDFS)
Hive的运行需要把SQL语句转换为相关的MapReduce作业

4.1 SQL语句转换成MapReduce作业的基本原理

  • 连接:如何用MapReduce实现数据库的连接操作
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

4.2 Hive中SQL查询转换成MapReduce作业的过程

在这里插入图片描述

  • 当用户向Hive输入一段命令或查询时,Hive需要与Hadoop交互工作来完成该操作:
    • 驱动模块接收该命令或查询编译器
    • 对该命令或查询进行解析编译
    • 由优化器对该命令或查询进行优化计算
    • 该命令或查询通过执行器进行执行

在这里插入图片描述 在这里插入图片描述在这里插入图片描述


5. Impala

5.1 Impala简介

在这里插入图片描述

在这里插入图片描述

Impala是由Cloudera公司开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase上的PB级大数据,在性能上比Hive高出3~30倍
Impala的运行需要依赖于Hive的元数据
Impala是参照 Dremel系统进行设计的
Impala采用了与商用并行关系数据库类似的分布式查询引擎,可以直接与HDFS和HBase进行交互查询
Impala和Hive采用相同的SQL语法、ODBC驱动程序和用户接口

在这里插入图片描述

5.2 Impala系统架构

在这里插入图片描述

  • ImpalaHive、HDFS、HBase等工具是统一部署在一个Hadoop平台上的

  • Impala主要由Impalad,State Store和CLI三部分组成

  1. Impalad:负责具体的相关查询任务
    在这里插入图片描述

    • 负责协调客户端提交的查询的执行
    • 包含Query Planner、Query Coordinator和Query Exec Engine三个模块
    • 与HDFS的数据节点(HDFS DN)运行在同一节点上
    • 给其他Impalad分配任务以及收集其他Impalad的执行结果进行汇总
    • Impalad也会执行其他Impalad给其分配的任务,主要就是对本地HDFS和HBase里的部分数据进行操作
  2. State Store:负责元数据管理和状态信息维护
    在这里插入图片描述

  • 每一个查询启动会创建一个statestored进程
  • 负责收集分布在集群中各个Impalad进程的资源信息,用于查询调度
  1. CLI:用户访问接口
    在这里插入图片描述
  • 给用户提供查询使用的命令行工具
  • 还提供了Hue、JDBC及ODBC的使用接口

说明Impala中的元数据直接存储在Hive中Impala采用与Hive相同的元数据、SQL语法、ODBC驱动程序和用户接口从而使得在一个Hadoop平台上,可以统一部署Hive和Impala等分析工具,同时支持批处理和实时查询

5.3 Impala查询执行过程

在这里插入图片描述

  • Impala执行查询的具体过程:
    • 第0步,当用户提交查询前,Impala先创建一个负责协调客户端提交的查询的Impalad进程,该进程会向Impala State Store提交注册订阅信息,State Store会创建一个statestored进程,statestored进程通过创建多个线程来处理Impalad的注册订阅信息。
    • 第1步,用户通过CLI客户端提交一个查询到impalad进程,Impalad的Query Planner对SQL语句进行解析,生成解析树;然后,Planner把这个查询的解析树变成若干PlanFragment,发送到Query Coordinator
    • 第2步,Coordinator通过从MySQL元数据库中获取元数据,从HDFS的名称节点中获取数据地址,以得到存储这个查询相关数据的所有数据节点。
    • 第3步,Coordinator初始化相应impalad上的任务执行,即把查询任务分配给所有存储这个查询相关数据的数据节点。
    • 第4步,Query Executor通过流式交换中间输出,并由Query Coordinator汇聚来自各个impalad的结果。
    • 第5步,Coordinator把汇总后的结果返回给CLI客户端。

5.4 Impala与Hive的比较

在这里插入图片描述

  • Hive与Impala的不同点总结如下:
    • Hive适合于长时间的批处理查询分析,而Impala适合于实时交互式SQL查询
    • Hive依赖于MapReduce计算框架,Impala把执行计划表现为一棵完整的执行计划树,直接分发执行计划到各个Impalad执行查询
    • Hive在执行过程中,如果内存放不下所有数据,则会使用外存,以保证查询能顺序执行完成,而Impala在遇到内存放不下数据时,不会利用外存,所以Impala目前处理查询时会受到一定的限制

在这里插入图片描述

  • Hive与Impala的相同点总结如下:
    • Hive与Impala使用相同的存储数据池,都支持把数据存储于HDFS和HBase中
    • Hive与Impala使用相同的元数据
    • Hive与Impala中对SQL的解释处理比较相似,都是通过词法分析生成执行计划

在这里插入图片描述

  • 总结
    • Impala的目的不在于替换现有的MapReduce工具
    • 把Hive与Impala配合使用效果最佳
    • 可以先使用Hive进行数据转换处理,之后再使用Impala在Hive处理后的结果数据集上进行快速的数据分析

6. Hive编程实践

详情参见http://dblab.xmu.edu.cn/blog/2440-2/#more-2440以及https://blog.csdn.net/roy_88/article/details/54944672

6.1Hive安装与基本操作

Hive安装

在这里插入图片描述 在这里插入图片描述

Hive的数据类型
类型描述示例
TINYINT1个字节(8位)有符号整数1
SMALLINT2个字节(16位)有符号整数1
INT4个字节(32位)有符号整数1
BIGINT8个字节(64位)有符号整数1
FLOAT4个字节(32位)单精度浮点数1.0
DOUBLE8个字节(64位)双精度浮点数1.0
BOOLEAN布尔类型,true/falsetrue
STRING字符串,可以指定字符集“xmu”
TIMESTAMP整数、浮点数或者字符串1327882394(Unix新纪元秒)
BINARY字节数组[0,1,0,1,0,1,0,1]
  • Hive的集合数据类型
类型描述示例
ARRAY一组有序字段,字段的类型必须相同Array(1,2)
MAP一组无序的键/值对,键的类型必须是原子的,值可以是任何数据类型,同一个映射的键和值的类型必须相同Map(‘a’,1,’b’,2)
STRUCT一组命名的字段,字段类型可以不同Struct(‘a’,1,1,0)
Hive基本操作
1.create: 创建数据库、表、视图
启动hive:
启动hive之前,请先启动hadoop集群。
	start-dfs.sh #启动Hadoop的HDFS
	hive  #启动hive
1. hive 建立一张表 跟已经存在了的结构化的数据文件产生映射关系
	映射成功后,就可以通过写sql的方式来分析这结构化的数据,避免了写MapReduce程序的麻烦
2. 数据库 /user/hive/warehouse 下的一个文件夹对应
	表		数据库文件夹下面的子文件夹 /user/hive/warehouse/hive.db/t_t2
   表的数据位置目前不能随便存放,一定要在指定的数据库表的文件夹下面
   建立表的时候 可能还需要指定分隔符 否则有可能映射不成功
创建数据库
create database [if not exists]  db_name;
# 通过LOCATION关键字来指定hive数据库文件存放的位置,默认的位置是在hdfs上的目录/user/hive/warehouse下面,会以数据库的名称来在hdfs上新建目录。 
create database if not exists db_hive_02 location '/user/text/db_hive_02.db'; 
创建表
  1. 简单类型的数据表指定分隔符ROW FORMAT DETERMITED

    	create table if not exists t_t3(id int ,name string)
    	 row format delimited
    	 fields terminated by ' ';
    

    建表的时候一定要根据数据之间采用什么分割,如’,‘和’ ',用row format 来指定分隔符

  2. 复杂类型的数据表指定分割符

  • Array类型:collection items terminated by '列表数据间隔符’

    		create table t_array(name string,work_locations array<string>)
    			Row format delimited 
    			fields terminated by '\t' 
    			collection items terminated by ',' 
    

    对应数据:

    namework_location
    zhangsanbejing,shanghai,tianjin,wuhan
    wangwushanghai,guanghzou,chengdu,hebei
  • Map类型: map keys terminated by 'key-value连接符’

    		Create table t_map(id int,name string,hobby map<string,string>) 
    			row format delimited 
    			fields terminated by '\t' 
    			collection items terminated by ',' #必须使用','来分割
    			map keys terminated by ':';
    
      对应数据:
      	1	zhangsan	唱歌:非常喜欢,跳舞:喜欢,游泳:一般
      	2	lisi	打游戏:非常喜欢,篮球:不喜欢
    
  • hive建表的默认分隔符是’\001’,如果在建表的时候没有指定分隔符,load文件的时候文件的分隔符需要是’\001’
    用vi编辑器Ctrl+v然后Ctrl+a即可输入’\001’

        \001 --vim-> ^A
    
    • 注意,Hive的SQL语句以分号结束
  • 创建视图

    CREATE VIEW [IF NOT EXISTS] [db_name.]view_name   -- 视图名称
    [(column_name [COMMENT column_comment], ...) ]    --列名
    [COMMENT view_comment]  --视图注释
    [TBLPROPERTIES (property_name = property_value, ...)]  --额外信息
    AS SELECT 语句;
    
2.show:查看数据库,表,视图
  • 查看数据库
    show databases; #查看所有数据库
    show  databases like 'h.*'; #查看所有以h开头的数据库
    
  • 查看表和视图
    use database_name; #选择数据库
    show tables [like '...']; #查看所有表或视图 
    
    • 注意:视图和表本质上是一个东西,所以查看操作通用于二者
3.load:向表中装载数据
#把/usr/local/data下的数据装载到t_customer表
load data [local] inpath '/usr/local/data' [overwrite] into table t_customer;
  • 注意:
    • 本地数据文件向表装载数据需要关键字local
    • 如果要在向表中装载数据的同时覆盖原有数据,需要使用关键字overwrite,慎用
4. insert:向表中插入数据或从表中导出数据
#向表table_name中插入来自usr表的age=10的数据并覆盖原有数据
insert overwrite table table_name
	select * from usr where age = 10; 
#向表table_name中插入来自usr表的所有数据并追加在原有数据后
insert into table table_name
	select * from usr ; 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值