The Apache Hive ™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL. Structure can be projected onto data already in storage. A command line tool and JDBC driver are provided to connect users to Hive.
Hive是一个基于 Hadoop的数据仓库软件,其核心在于存储和分析数据。
Hive可以存储大数据量(PB级)的结构化数据,同时支持绝大部分 SQL语法。可以在命令行直接使用 SQL分析数据,也可以使用 Spark程序或者 Java程序来操作其中的数据。
更多权威内容见官网:Apache Hive TM
2.名词解释
Beeline
Beeline是 Hive 0.11版本引入的新命令行客户端工具,它是基于 SQLLine CLI的 JDBC客户端。
Hive metastore Server
元数据服务,负责提供 hive里面创建的数据库、表、分区和数据存储目录等元数据。元数据默认存储在自带的 derby数据库中,但是 生产上一般使用 MySQL来进行存储。
HiveServer2
HiveServer2(HS2)是一个服务端接口,使远程客户端可以执行对 hive的查询并返回结果。 启动 hiveServer2服务后,就可以使用jdbc,odbc,或者 thrift的方式连接。
MapReduce
MapReduce是一种大数据量处理的编程模型,也是 hive默认的执行引擎,其他的执行引擎还有 spark。
Partition
分区,为了更加快速的过滤数据,生产上一般都会给表分区,比较常见的分区方式有按天、按月和按批次分区。
3.Hive命令行使用 beeline就可以进入 hive的命令行,如下:
也可以直接指定服务器地址和账户信息,如下:
beeline -u jdbc:hive2://:10000 -n -p
退出命令行:
# 为了避免丢失 hive历史命令,建议使用此命令退出 !exit4.数据库及表操作 4.1 数据库操作
首先使用 beeline命令进入到 hive的命令行。
查看现有的数据库
show databases;
切换数据库
use db2;
创建数据库
# --1.直接创建数据库,若数据库已存在会报错 create database db5; # --2.先判断数据库是否存在,不存在则创建,反之什么都不做 create database if not exists db5;
删除数据库
drop database db5;
下面的命令均需要在 hive命令行中操作。
查看表
# 先切换到目标数据库 use db5; show tables;
创建表
# --1.创建普通表,同样支持 if not exists命令 # 常用的数据类型有:string,int,date,float create table table2( field1 string, field2 int ); # --2.创建分区表 # 首先开启分区 set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstrict; # 建表 create table table3( field1 string, field2 date )partitioned by(day string) row format delimited fields terminated by 't'; # --3.从现有表创建一张新表,两张表的 schema信息完全一样 create table table5 like table3;
删除表
drop table table3;
修改表
alter table table2 rename to table002;
清空表数据
truncate table table2;
通过 SQL查询 hive表中的数据:
# 查询某张表的 10条数据(与 MySQL的语法十分接近) select * from table2 limit 10; # 查询表中数据量 select count(*) from table2;
通过 HDFS命令查看 hive表所占的存储空间:
# /user/hive/warehouse/是 hive数据在 hdfs上存储的默认路径 # testdb01是数据库名,table2是目标表的名称 hdfs dfs -du -s -h /user/hive/warehouse/testdb01.db/table2 #6.6 G 19.7 G /user/hive/warehouse/testdb01.db/table25.2 插入数据
# 往普通表插入数据
insert into table table2 values("hello",2022);
# 往分区表插入数据
insert into table table3 PARTITION(day='20220118') values("hello",2022);
6.导入和导出数据
6.1 导入数据
# 从本地磁盘导入数据到 hive表里面 # 此命令需要在 hive命令行里面执行 # 普通表 load data local inpath '/opt/test.csv' into table testdb01.table3; # 分区表 load data local inpath '/opt/test.csv' into table testdb01.table3 PARTITION (day='20220118');6.2 导出数据
# 将 hive表里面的数据以 MapReduce任务的方式导出到本地磁盘 # 此命令需要在 hive命令行里面执行 insert overwrite local directory '/tmp/table3-export' select * from testdb01.table3;7.角色授权
一般情况下 hive账户拥有最高权限,因此可以使用 hive账户给其他账户赋权限。
# 给 root用户赋予管理员权限 create role admin; grant all on server server1 to role admin; grant role admin to group root;8.总结
本文的目标是简单介绍 hive,给出 hive常见的操作,希望不了解 hive的人也能根据本文把 hive用起来。



