hive

什么是Hive ?

Hive是构建在hadoop HDFS上的一个数据仓库;

Hive的表/数据 就是HDFS中目录/文件

数据仓库:

  • 是一个面向主题的、集合的、不可更新的、随时间不变化的数据集合;
  • 主要是用于支持企业或组织的决策分析处理

数据仓库的结构和建立过程

抽取E:把数据源的数据按照一定的方式进行读取

转换T:将不同格式的数据按照一定的规则进行转化

装载L:将满足格式的数据存在数据仓库中

OLTP应用和OLAP应用:

  • OLTP连接事务处理:(比如银行转账),操作频率高,事务的处理
  • OLAP连接分析处理:(比如商品推荐系统) 基于原来的历史数据,提供给别的系统使用,一般不会更新插入数据

数据仓库中的数据模型:

  • 星型模型:以主题为核心,进行关联
  • 雪花模型: 基于星型模型上发展

什么是Hadoop ?

  • 什么是HDFS

  • 什么是mapreduce

  • Hadoop中的一些基本操作

Hive的体系结构

Hive的元数据:

  • Hive将元数据存储在数据库中(metastore),支持MySQL,Derby等数据库
  • Hive中元数据 包括 表的名字,表的列,和 分区及其属性,表的属性(是否为外部表等),表的数据所在目录等

 

 

HQL语句的执行过程 

 Hive的安装

下载地址:http://archive.apache.org/dist/hive/ 

先安装Hadoop的环境,才能再安装Hive的安装

嵌入模式的安装

  • 元数据信息被存储在Hive自带的Derby数据库
  • 只允许创建一个连接
  • 多用于Demo

本地模式的安装

  • 元数据信息被存储在Mysql数据库
  • MySQL数据和Hive运行在同一台物理机上
  • 可以用于开发和测试

远程模式的安装

  • 常用于生成环境
  • MySQL和Hive运行在不同的操作系统上

Hive的管理方式

  • 命令行CLI方式: 可以进入命令行,然后执行一些命令即可
  • 远程服务启动
  • web界面方式

常用的HQL语句

查询语句:https://docs.jboss.org/hibernate/orm/3.5/reference/zh-CN/html/queryhql.html

Hive的数据类型

  • 基本数据类型:
    • 整数类型:tinyint/smallint/int/bigint
    • 浮点数类型:float/double
    • 布尔类型:boolean
    • 字符串类型:string
  • 复杂数据类型
    • Array
    • map:格式是key-value格式,key相同时,value被覆盖
    • struct:结构类型,包含不同数据类型的元素,可以通过”点语法“的方式来获取到所需要的元素
  • 时间数据类型
    • date:日期
    • timestamp:偏移量,跟时区无关

示例:

  创建表,

create table student
(sid int,
sname string,
grade array<float>,
id map<string,int>,
info struct<name:string,age:int,sex:string>);

sid和sname是基本数据类型,grade是复杂数据类型Array,info是结构数据,id是map,grade是数组array

  查看表结构,

desc student;

Hive数据模型

内部表

  • 与数据库中的table在概念上是类似的
  • 每一个table在hive中都有一个相对应的目录存储数据
  • 所有的table数据(不包括外部表)都保存在这个目录中
  • 删除表时,元数据和数据都会被删除

分区表

  • partition对应于数据库的partition列的密集索引
  • 在hive中,表中的一个partition对应于表下的一个目录,所有的partition的数据都存储在对应的目录中

外部表

  • 外部表 是一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个连接。当删除一个外部表,就是删除该连接

桶表

  • 桶表是对数据进行哈希取值,然后放在不同文件中进行存储

视图

  • 视图是一种虚表,是一个逻辑概念;可以跨越多个表
  • 视图简历在已有表的基础上,视图赖以建立的这些表,成为基表
  • 视图可以简化复杂的查询

Hive和数据库的区别

  Hive和数据库除了查询语言类似,其他都不一样

  1. 存储位置:Hive存储在HDFS,MySQL存储在本地文件系统
  2. 数据更新:MySQL有update操作,增删改查很方便也很快;Hive 是读多写少,不建议对数据的改写,所有数据都是在加载时候确定好的。
  3. 索引:HIve没有索引,扫描整个数据,所以延迟比较高,不适合在线数据查询。由于mapreduce的引入,Hive其实也是能并行访问数据。而数据库,可以建立索引。
  4. 执行:数据库是有自己的执行引擎;Hive是Hadoop提供的MapReduce实现的。
  5. 执行延迟:Hive延迟高; MySQL数据量小时,延迟比较低
  6. 数据规模:Hive 可以支持很大规模;数据库支持的数据规模比较少

 

posted @ 2019-09-02 10:43  豆芽花花儿酱  阅读(148)  评论(0编辑  收藏  举报