Hadoop之数据仓库Hive

1.Hive介绍

1.1 Hive是什么

  • 由 Facebook 实现并开源
  • Hive 是在 Hadoop 分布式文件系统 (HDFS) 之上开发的 ETL 和数据仓库工具
  • Hive 提供写 SQL 的方式对存储在 Hadoop 集群里面的数据进行清洗、加工,生成新的数据并存储到 Hadoop 集群当中
  • Hive只是个客户端,不涉及集群的概念

1.2 Hive产生背景

  • Mapreduce 编程不方便
    没学过java的怎么办?运行Mapreduce程序也很麻烦,打包运行等等,Hive实现同样的功能就更容易
  • 传统关系型数据库人员的需求
    他们sql写的很好,大数据如果用不上sql,岂不很可惜,基于 SQL 的数据开发方式,让 Hive 成为了大数据处理领域最重要的一项技术,对于大数据开发技术来说,SQL 是一等公民

1.3 使用Hive的好处

  • 简单,容易上手
    写sql的方式实现,并且语法和sql类似
  • 统一元数据管理
    Hive是基于Hadoop的,所以数据都是用HDFS存储的,都是一行一行的字符串,没有关系型数据库的表,列啊,字段类型之类的元数据概念。Hive会有这些元数据,并且把它们存储在Mysql中
  • 底层支持多种执行引擎
    Mapreduce,Tez,Spark。可以让Hive sql 语句运行在不同的模式中,比如离线在线

1.4 Hive的架构

在这里插入图片描述
Hive 主要由三个部分组成:Clients(客户端)、Serverices(服务)、Storage and compute(存储和计算)

  • Clients(客户端):Hive 为与不同类型的应用程序的通信提供了不同的驱动程序。Hive clinets 可以支持 Thrift、JDBC、ODBC 协议与 Hive services 进行通信
  • Serverices(服务):Clients 与 Hive 的交互通过 Hive Services 执行。CLI 是命令行界面,充当 DDL(数据定义语言)操作的 Hive 服务。Serverices 核心的模块是 Driver(驱动程序)
  • Hive Services、CLI、Hive web Interface 都通过 Driver(驱动程序)对元数据、文件系统进行计算和处理
  • Storage and compute(存储和计算):Hive 的元数据存储在元数据数据库中,元数据数据库支持 Mysql 等多种类型。Hive 的查询结果和数据存储在 Hadoop 中
  • 1.5 Hive的数据结构

Hive 的存储结构包括数据库、表、视图、分区和表数据

  • database:在 HDFS 中表现为 ${hive.metastore.warehouse.dir} 目录下一个文件夹
  • table:在 HDFS 中表现所属 database 目录下一个文件夹
  • external table:与 table 类似,不过其数据存放位置可以指定任意 HDFS 目录路径
  • partition:在 HDFS 中表现为 table 目录下的子目录
  • bucket:在 HDFS 中表现为同一个表目录或者分区目录下根据某个字段的值进行 hash 散列之后的多个文件
  • view:与传统数据库类似,只读,基于基本表创建

2.Hive的部署

Hive的元数据管理依赖Mysql数据,所以得提前安装一个Mysql

2.1 下载并安装

Hive只是个客户端,所以得有安装包,下载需要的版本的Hive安装包
在这里插入图片描述
解压并指定目录

tar -zxvf hive-1.1.0-cdh5.15.1.tar.gz -C ~/app/

2.2 配置Hive到环境变量

vi ~/.bash_profile

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

2.3 修改配置文件

  • hive-env.sh
    主要配置了Hadoop目录,如果Hadoop也加入了环境变量,那么不用修改这个配置文件
  • hive-site.xml
    主要配置了Mysql的信息,copy mysql的驱动到Hive的lib文件夹下。
    在这里插入图片描述
    从上到下分别是数据库名,驱动名,数据库用户名和密码
    在这里插入图片描述

3.Hive的操作

Hive文档链接:https://cwiki.apache.org/confluence/display/Hive

3.1 数据库操作

Hive Data Definition Language
DDL 说明文档链接:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL
对数据的创建,修改,删除,查看,文档上写的比较详细,直接看官方文档就行了

  • 命令窗口显示当前是哪个数据库
set hive.cli.print.current.db=true

在这里插入图片描述

  • 清屏
!clear;

3.2 表操作

增删查改也可以看官方文档,建表示例:

CREATE TABLE emp(
empno int COMMENT '员工编号',
ename string COMMENT '员工名称',
job string COMMENT '工作岗位',
mgr int,
hiredate string,
sal double,
comm double,
deptno int
) 
COMMENT '员工信息表'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

常用命令:

  • 查看表 show tables;
  • 查看表信息 desc emp
  • 查看表信息-详情 desc extended emp;
  • 查看表信息-格式化的详情 desc formatted emp;
  • 向表里加载数据 LOAD DATA LOCAL INPATH ‘/home/hadoop/data/emp.txt’ OVERWRITE INTO TABLE emp;
  • 修改表名 alter table car rename to car_new;
  • 增加一个字段 alter table car add columns (count int);
  • 修改一个字段的定义 alter table car change name name_new string;
  • 添加一个分区 alter table car add partition(name=“benchi”);

3.3 数据的操作

文档地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML

3.3.1 导入数据

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

LOCAL:本地系统,如果没有local那么就是指的HDFS的路径

LOAD DATA LOCAL INPATH '/home/hadoop/data/emp.txt' OVERWRITE INTO TABLE emp;
LOAD DATA INPATH 'hdfs://hadoop000:8020/data/emp.txt' INTO TABLE emp;

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

3.3.1.1 Insert

INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 …) [IF NOT EXISTS]] select_statement1 FROM from_statement;

INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 …)] select_statement1 FROM from_statement;

INSERT OVERWRITE TABLE emp2 select * FROM emp;

在这里插入图片描述

create table emp1 as select * from emp;

3.3.2 导出数据

INSERT OVERWRITE LOCAL DIRECTORY '/tmp/hive/' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' select empno,ename,sal,deptno from emp;

3.3.3 简单查询

完全类似于 sql语句

3.3.4 复杂查询

函数,分组,聚合,join 也完全类似于 sql语句

3.3.4 执行计划

展示Hql语句执行的过程

EXPLAIN [EXTENDED|CBO|AST|DEPENDENCY|AUTHORIZATION|LOCKS|VECTORIZATION|ANALYZE] query

3.4 外部表和内部表的区别

  • MANAGED_TABLE,内部表
    删除表:HDFS上的数据被删除 & Meta也被删除
  • EXTERNAL_TABLE,外部表
    HDFS上的数据不被删除 & Meta被删除
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值