文章目录
- 1.Hive介绍
- 1.1 Hive是什么
- 1.2 Hive产生背景
- 1.3 使用Hive的好处
- 1.4 Hive的架构
- 1.5 Hive的数据结构
- 2.Hive的部署
- 2.1 下载并安装
- 2.2 配置Hive到环境变量
- 2.3 修改配置文件
- 3.Hive的操作
- 3.1 数据库操作
- 3.2 表操作
- 3.3 数据的操作
- 3.3.1 导入数据
- 3.3.1.1 LOAD
- 3.3.1.1 Insert
- 3.3.2 导出数据
- 3.3.3 简单查询
- 3.3.4 复杂查询
- 3.3.4 执行计划
- 3.4 外部表和内部表的区别
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被删除