前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HIVE入门_2

HIVE入门_2

作者头像
用户1147754
发布2018-01-02 17:13:47
1.4K0
发布2018-01-02 17:13:47
举报
文章被收录于专栏:YoungGyYoungGy

HIVE 是数据仓库,本质上也是数据库。

数据仓库

概念

就是一个数据库。

数据仓库是一个面向主题的(商品的推荐系统内容是商品的信息)、集成的(分散型地数据进行加工处理,原来的数据可能来自MySQL或者文本等)、不可更新的(主要为了决策分析,涉及到的操作主要是数据的查询,增加和删除用的少)、随时间不变化的数据集合,它用于支持企业或组织的决策分析处理。

结构和建立过程

数据源:

  1. Oracle,MySQL
  2. 文档资料txt
  3. 其他数据

数据存储及管理(ETL):

  1. 抽取(Extract)
  2. 转换(Transform)
  3. 装载(Load)

数据仓库引擎: 各种各样的服务器

前端展示:

  1. 数据查询
  2. 数据报表
  3. 数据分析
  4. 各类应用
这里写图片描述
这里写图片描述

OLTP和OLAP

这里写图片描述
这里写图片描述

数据模型

星型模型(商品推荐系统为例)

这里写图片描述
这里写图片描述

雪花模型(基于星型模型基础上发展的)

这里写图片描述
这里写图片描述

HIVE

传统的方式可以使用Oracle或者MySQL搭建数据仓库,这种方式数据保存在Oracle或者是MySQL中。

HIVE是建立在Hadoop HDFS上的数据仓库的基础架构。 可以用来进行数据提取转化加载(ETL)。 定义了简单的类似SQL的查询语言,称为HQL。 允许熟悉MapReduce的开发者开发自定义的mapper和reducer来处理内建的mapper和reducer无法完成的复杂工作。 Hive是SQL的解析引擎,将SQL语句转移成M/R Job然后在Hadoop上执行。

HIVE的表其实就是HDFS的目录/文件(表是目录,数据是文件)。

HIVE的体系结构

HIVE的元数据

  • Hive将元数据存储在数据库(metastore)中,支持mysql、derby等数据库。
  • Hive中的元数据包括表的名字,表的列和分区以及其属性、表的属性(是否为外部表等),表的数据所在目录等。
这里写图片描述
这里写图片描述

HQL的执行过程

解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划(Plan)的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。

这里写图片描述
这里写图片描述
代码语言:javascript
复制
explain #查看对应语句的执行计划

建立索引可以提高查询速度。

HIVE的体系结构

  • 用HDFS进行存储,HQL语句会经过编译器最终使用MapReducer进行计算,方便了那些java不好的人。
  • 元数据Metastore通常存放在关系数据库比如mysql、derby中。
这里写图片描述
这里写图片描述

HIVE的安装

安装模式

安装模式有三种:

  • 嵌入模式
  • 本地模式
  • 远程模式

嵌入模式:

  • 元数据信息被存储在HIVE自带的derby数据库中(HIVE在外derby在内)
  • 只允许创建一个连接(同一个时间只有一个人操作数据)
  • 多用于Demo

本地模式:

  • 元数据被存储在MySQL数据库中(没有嵌入在HIVE中)
  • MySQL数据库与HIVE运行在同一台物理机器上
  • 多用于开发和测试(生产不用)

远程模式:

  • 元数据被存储在MySQL数据库中
  • MySQL数据库与HIVE运行在不同物理机器上

嵌入模式

不需要做任何配置

代码语言:javascript
复制
$ hive #直接进到了嵌入模式,在当前目录创建metastore_db

远程/本地模式

  • 元数据被存储在MySQL数据库中
  • MySQL数据库与HIVE运行在不同物理机器上
  • 多用于实际生产环境中
这里写图片描述
这里写图片描述
代码语言:javascript
复制
#为hive建立相应的mysql账户,并赋予足够的权限
hadoop@ubuntu:~$ mysql -uroot -pmysql
mysql> CREATE USER 'hive' IDENTIFIED BY 'mysql';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%' WITH GRANT OPTION;
mysql> flush privileges;

#默认情况下Mysql只允许本地登录,所以需要修改配置文件将地址绑定给注释掉:
代码语言:javascript
复制
mysql -uuname -ppassward
create database hive;  #保存元数据
show databases;
#也可以通过MySQL-font等查看

配置文件(本地模式的区别是连接的是本地的数据库,localhost)

这里写图片描述
这里写图片描述

在数据库中的tbls中可以查看表的信息。

HIVE的管理

  • CLI方式
  • Web界面管理
  • 远程服务启动方式

CLI方式

代码语言:javascript
复制
#进入hive
$ hive
$ hive --service cli

#清屏
ctrl+l
!clear

show tables --这是注释哦;
show functions;

#查看表的结构
desc tb

#查看hdfs上的文件
dfs -ls

#执行操作系统的命令
!ls

#hive的表以目录,数据以文件的形式存储在hdfs中
dfs -ls /user
dfs -lsr /user/hive

#执行HQL语句
#有的时候转换成MR的作业,遍历的话不用执行MR作业
select *** from ***


#执行SQL的脚本
source SQL文件

#静默模式,不打印调试信息
hive -S  #silent

#在系统的CLI中执行
hive -S -e 'show tables'

Web管理方式

Web只能做查询操作。

这里写图片描述
这里写图片描述

解压src源文件,进入hwi的目录

代码语言:javascript
复制
jar cvfM0 hive-hwi-0.13.0.war -C web/
cp hive-hwi-0.13.0.war $HIVE_HOME/lib

vi hive-site.xml


#后边得添加jdk下面的jar包
cp jdk/tools.jar $HIVE_HOME/lib
这里写图片描述
这里写图片描述

远程服务

这里写图片描述
这里写图片描述

HIVE的数据类型

基本类型

这里写图片描述
这里写图片描述

复杂类型

这里写图片描述
这里写图片描述

数组,数组的元素是 [1,2,3,4]:

这里写图片描述
这里写图片描述

Map,数组元素是<’English’,85>:

这里写图片描述
这里写图片描述

数组和map联合起来:

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

结构体:

这里写图片描述
这里写图片描述

时间类型

  • Date类型:分为年月日,不包含一天中的时间
  • Timestamp类型:时间戳,算跟unix有的偏移量
代码语言:javascript
复制
select unix_timestamp();

HIVE的数据存储

特征

  • HIVE中的数据都是保存在HDFS中,表对应文件夹,数据对应文件夹中的文件。
  • 没有专门的数据存储格式,一般的文本文件就可以,一般采用制表符作为分隔符。
  • 存储结构主要包括:数据库、文件、表、视图(逻辑概念)
  • 可以直接加载文本文件(.txt文件等)
  • 创建表的时候,可以指定列分隔符和行分隔符

表分为:

这里写图片描述
这里写图片描述

内部表

这里写图片描述
这里写图片描述
代码语言:javascript
复制
create table t1
(tid int, tname string, age int)

create table t2
(tid int, tname string, age int)
location '/mytable/hive/t2'  #指定HDFS中的其他位置

create table t3
(tid int, tname string, age int)
row format delimited fields terminated by ',';

create table t4
as 
select * from t3;  #列与列之间没有分隔符

create table t5
row format delimited fields terminated by ','
as 
select * from t3;

#添加新的列
desc t1;
alter table t1 add columns(english int);
desc t1;

#删除表
#如果开启了HADOOP的回收站,那么删除后
drop table t1;

分区表

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

当数据很大的时候,需要按照一定的条件分区,这样可以提高查询效率。 查看查询效率,可以查看查询计划。

代码语言:javascript
复制
#未建立分区表的查询计划
explain select * from sample_data where gender='M';

#建立分区表的查询计划,执行计划从下往上读
explain select * from partition_table where gender='M';

查询性别是”M”学生需要进行全文扫描,分区后降低了扫描的记录数提高了查询的效率。

这里写图片描述
这里写图片描述
代码语言:javascript
复制
create table partition_table
(sid int, sname string)
partitioned by (gender string)
row format delimited fields terminated by ',';

#向表中添加各种分区数据
insert into table partition_table partition(gender='M')
select sid name from sample_data
where gender='M';
insert into table partition_table partition(gender='F')
select sid name from sample_data
where gender='F';

外部表

  • 指向已经在HDFS中存在的数据,可以创建partition
  • 它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大差异
  • 外部表只有一个过程加载数据和创建表同时完成,并不会将数据移动到数据仓库目录中,只是与外部的数据建立一个链接。删除一个外部表时,立刻删除该链接。

外部表的HIVE中只有表的定义与结构没有数据,数据存放在HDFS中。创建表和加载数据一次性完成。 内部表HIVE数据仓库中也是有数据的。

这里写图片描述
这里写图片描述
代码语言:javascript
复制
#将数据放在hdfs上
hdfs dfs -put student01.txt /input
hdfs dfs -put student02.txt /input
hdfs dfs -put student03.txt /input

create external table external_table
(sid int, sname string, age int)
row format delimited fields terminated by ','
location '/input';  #外部表创建的时候location指向HDFS中

#删除外部HDFS中的数据会影响hive查询的数据记录
select * from external_table
hdfs dfs -rm /input/student03.txt
select * from external_table

桶表

  • 桶表是对数据进行哈希取值(打散后),然后放到不同的文件中存储。
  • 降低系统的热块,提高查询的速度。
代码语言:javascript
复制
create table bucket_table
(sid int, sname string, age int)
clustered by (sname) into 5;  #根据sname进行hash运算,创建5个桶的桶表

desc bucket_table;

视图

  • 视图是一种虚表,是一个逻辑概念,可以跨越多张表,不存在数据,查询的数据依赖于基表。
  • 视图建立在已有表的基础上,视图赖以建立的这些表称为基表
  • 视图可以简化复杂的查询

部门表和员工表: 注意外键

这里写图片描述
这里写图片描述

要求功能: 查询员工信息:员工号,姓名,月薪,年薪 ,部门名称

代码语言:javascript
复制
#创建视图
create viem empinfo
as
select e.empno, e.ename, e.sal, e.sal*12 annlsal,d.name
from emp e,dept d
where e.deptno=d.deptno

#从视图中查询数据,和查询表的方法完全一样
select * from empinfo

HIVE不支持物化视图,视图中存数据。

这里写图片描述
这里写图片描述

总结

这里写图片描述
这里写图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据仓库
    • 概念
      • 结构和建立过程
        • OLTP和OLAP
          • 数据模型
            • HIVE
            • HIVE的体系结构
              • HIVE的元数据
                • HQL的执行过程
                  • HIVE的体系结构
                  • HIVE的安装
                    • 安装模式
                      • 嵌入模式
                        • 远程/本地模式
                        • HIVE的管理
                          • CLI方式
                            • Web管理方式
                              • 远程服务
                              • HIVE的数据类型
                                • 基本类型
                                  • 复杂类型
                                    • 时间类型
                                    • HIVE的数据存储
                                      • 特征
                                          • 内部表
                                          • 分区表
                                          • 外部表
                                          • 桶表
                                        • 视图
                                        • 总结
                                        相关产品与服务
                                        云数据库 SQL Server
                                        腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                                        领券
                                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档