avatar

目录
Hive-入门

参考:

第1章 概述

hive是基于HDFS的数据仓库,主要介绍数据仓库和Hive的基本概念

什么是数据仓库

数据仓库

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

面向主题:推荐系统

集成:数据来自于关系型数据库、文本..

不可更新:一般只做查询


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

![屏幕快照 2019-09-02 下午3.52.00](20190902151453320/屏幕快照 2019-09-02 下午3.52.00.png)

ETL:

抽取Extract:提取不同数据源的数据
转化Transform:转化格式,不同数据源的数据格式可能不一致
装载Load:将满足数据格式的数据装载到数据仓库


OLTP应用于OLAP应用

OLTP应用:联机事务处理,关注的是事物的处理,典型的OLTP应用是银行转账,一般操作频率会比较高;

OLAP应用:联机分析处理,主要面向的是查询,典型的OLAP应用是商品推荐系统,一般不会做删除和更新,数据一般都是历史数据。


数据仓库中的数据模型

星型模型和雪花模型。星型模型是数据仓库最基本的数据模型,雪花模型是在星型模型的基础上发展起来的。

![屏幕快照 2019-09-02 下午3.57.15](20190902151453320/屏幕快照 2019-09-02 下午3.57.15.png)

什么是Hive

  • Hive是建立在Hadoop HDFS上的数据仓库基础架构;

  • Hive可以用来进行数据提取转化加载(ETL)

  • Hive定义了简单的类似SQL查询语言,称为HQL它允许熟悉SQL的用户查询数据

  • Hive允许熟悉MapRduce开发者的开发自定义的mapper和reducer来处理内建的mapper和reducer无法完成的复杂的分析工作;

  • Hive是SQL解析引擎,他将SQL语句转移成M/R Job然后在Hadoop执行;

  • Hive的表其实就是HDFS上的目录/文件;

  • 底层支持多种执行引擎:MR/Tez/Spark

为什么要使用Hive

第2章 Hive的体系结构

hive的体系结构,以及与HDFS的关系

元数据

Hive将元数据存储在(metastore),支持mysql,derby等数据库 (默认存放在derby数据库中)

Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表),表的数据所在目录。

![屏幕快照 2019-09-02 下午4.13.02](20190902151453320/屏幕快照 2019-09-02 下午4.13.02.png)


HQL的执行过程

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

![屏幕快照 2019-09-02 下午4.17.23](20190902151453320/屏幕快照 2019-09-02 下午4.17.23.png)

以oracle执行计划为例:

Code
1
2
explain plan for select * from emp where deptno10
...

Hive的体系结构

![屏幕快照 2019-09-02 下午4.24.48](20190902151453320/屏幕快照 2019-09-02 下午4.24.48.png)

第3章 Hive的安装

演示元数据库的安装以及Hive的安装;包括基于MySQL的hive的安装

安装模式介绍

1 嵌入模式

- 本地durby :元数据信息被存储在Hive自带的Derby数据库中
- 只允许创建一个链接:同一时间只能一个人操作
- 多用于Demo:演示环境

2 本地模式

- 元数据信息被存储在MySQL数据库中
- MySQL数据库与Hive运行在同一台物理机器上
- 多用于开发和测试环境

3 远程模式

- 元数据信息被存储在MySQL数据库中
- MySQL数据库与Hive运行在不同的物理机器上
- 多用于生产环境(mysql要主从备份,用VIP连接)

安装本地模式

安装

apache-hive-3.1.2-bin.tar.gz

conf/hive-env.sh.template

Code
1
2
3
4
5
6
cp hive-env.sh.template hive-env.sh
vi hive-env.sh
# 修改HADOOP_HOME
HADOOP_HOME=/opt/hadoop-3.1.2

vi hive-site.xml

hive-site.xml

xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://centos01:3306/hadoop_hive?createDatabaseIfNotExist=true</value>
</property>

<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>

<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>machine</value>
</property>

<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>4869</value>
</property>

</configuration>

将mysql-connector-java-5.1.39-bin.jar拷贝到 ./lib下


启动

shell
1
2
3
4
5
$ cd $HIVE_HOME/bin
# 指定元数据库并进行初始化
$ ./schematool -dbType mysql -initSchema
$ hive
> hive

第4章 Hive的操作

Hive快速入门(建库/建表/执行HQL)

创建数据库

shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
hive>create database test_db;

mysql> use hadoop_hive;
mysql> show tables;
mysql> select * from DBS \G;
# 系统自动创建的
*************************** 1. row ***************************
DB_ID: 1
DESC: Default Hive database
DB_LOCATION_URI: hdfs://centos01:9000/user/hive/warehouse
NAME: default
OWNER_NAME: public
OWNER_TYPE: ROLE
CTLG_NAME: hive
# 用户自己创建的test_db
*************************** 2. row ***************************
DB_ID: 2
DESC: NULL
DB_LOCATION_URI: hdfs://centos01:9000/user/hive/warehouse/test_db.db
NAME: test_db
OWNER_NAME: root
OWNER_TYPE: USER
CTLG_NAME: hive

$ hadoop fs -ls /user/hive/warehouse
Found 1 items
drwxr-xr-x - root supergroup 0 2019-09-02 16:14 /user/hive/warehouse/test_db.db

创建一张表

shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
hive> use test_db;
# 先建个空表
hive> create table helloword(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
hive> show tables;
hive> select * from helloword;
# 加载数据
hive> load data local inpath '/media/psf/centos_share/helloword.txt' overwrite into table helloword;
hive> select * from helloword;
OK
1 zhongshan
2 lisi
3 wangwu
# 统计(这是一条HQL,会生成mapreduce作业)
hive> select count(1) from helloword;
# 访问http://centos01:8088/cluster 查看mp作业

Hive DDL

参考官网:Hive DDL

DDL: Hive Data Definition Language

数据抽象/结构

![屏幕快照 2019-09-03 上午10.06.50](20190902151453320/屏幕快照 2019-09-03 上午10.06.50.png)

Create Database

shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name``  ``[COMMENT database_comment]``  ``[LOCATION hdfs_path]``  ``[WITH DBPROPERTIES (property_name=property_value, ...)];

# 创建数据库
hive> CREATE DATABASE IF NOT EXISTS hive;
hive> CREATE DATABASE IF NOT EXISTS hive2 LOCATION '/test/location';
hive> CREATE DATABASE IF NOT EXISTS hive3 WITH DBPROPERTIES('creator'='pk');
# 查看信息
hive> DESC DATABASE hive2;
hive> DESC DATABASE extended hive3;
# 显示当前数据库
hive> set hive.cli.print.current.db=true;
# 清屏
hive> !clear
# 删除
hive> DROP DATABASE xxx;

建表

![屏幕快照 2019-09-03 上午10.26.28](20190902151453320/屏幕快照 2019-09-03 上午10.26.28.png)

加载表数据

![屏幕快照 2019-09-03 上午10.30.28](20190902151453320/屏幕快照 2019-09-03 上午10.30.28.png)

Rename Table

Code
1
`ALTER TABLE table_name RENAME TO new_table_name;`

HIVE DML

Loading files into tables

Code
1
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

LOCAL:本地系统,如果不加,就指HDFS路径

OVERWRITE:是否数据覆盖,如果没有,就是追加

Inserting data into Hive Tables from queries

sql
1
2
3
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1 FROM from_statement;

create table emp2 as select * from emp;

Writing data into the filesystem from queries

Code
1
2
3
INSERT OVERWRITE [LOCAL] DIRECTORY directory1
``[ROW FORMAT row_format] [STORED AS file_format] (Note: Only available starting with Hive ``0.11``.``0``)
``SELECT ... FROM ...

![屏幕快照 2019-09-03 上午10.43.23](20190902151453320/屏幕快照 2019-09-03 上午10.43.23.png)

insert 、update 不建议在大数据Hive下使用!

Hive Query

sql
1
2
3
4
5
6
7
8
9
SELECT [ALL | DISTINCT] select_expr, select_expr, ...
``FROM table_reference
``[WHERE where_condition]
``[GROUP BY col_list]
``[ORDER BY col_list]
``[CLUSTER BY col_list
``| [DISTRIBUTE BY col_list] [SORT BY col_list]
``]
``[LIMIT [offset,] rows]

基本查询

Code
1
WHERE LIMIT ...

聚合

Code
1
2
3
max/min/sum/avg
count
这些都需要mp任务

分组函数:GROUP BY

Code
1
2


JOIN

Code
1
2


执行计划

Code
1
2


else todo

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
第4章 Hive的管理

介绍Hive中三种管理方式,即:CLI、Web界面以及远程服务

第5章 Hive的数据类型

详细介绍hive的数据类型;对比与关系型数据库数据类型的异同

第6章 Hive的数据模型

详细说明Hive中各种表和视图以及如何使用

第7章 课程总结

课程总结
文章作者: Machine
文章链接: https://machine4869.gitee.io/2019/09/02/20190902151453320/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 哑舍
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论