问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Hive的基本操作(附详细步骤和相关操作截图)

创作时间:
作者:
@小白创作中心

Hive的基本操作(附详细步骤和相关操作截图)

引用
1
来源
1.
https://www.cnblogs.com/bjynjj/p/18539672

Apache Hive是基于Hadoop的数据仓库工具,用于处理和分析大规模数据集。它提供了一个类似于SQL的查询语言(HiveQL),使得熟悉SQL的用户能够轻松地进行数据查询和分析。本文将详细介绍Hive的基本概念、架构、元数据管理以及基本操作,帮助读者快速掌握Hive的使用方法。

Hive3.1.2概述与基本操作

1.1 Hive简介

Hive本质上是一个将SQL转换为MapReduce任务的工具,底层依赖HDFS进行数据存储。可以将其理解为一个MapReduce客户端,通过类SQL语法简化了大数据处理的复杂性。

为什么使用Hive?

  • 直接使用Hadoop需要较高的学习成本,而Hive通过类SQL语法降低了开发难度。
  • 避免了编写复杂的MapReduce代码,减少了开发人员的学习成本。
  • 支持功能扩展,如开窗函数等高级特性。

Hive的特点:

  1. 可扩展性:集群规模可以自由扩展,通常不需要重启服务。
  2. 延展性:支持自定义函数,满足特定需求。
  3. 容错性:即使节点出现错误,SQL任务仍可完成执行。

Hive的优缺点:

优点:

  1. 操作接口采用类SQL语法,提高开发效率。
  2. 避免编写MapReduce代码,降低学习成本。
  3. 适用于对实时性要求不高的场景。
  4. 支持用户自定义函数。
  5. 具有良好的容错性和可扩展性。

缺点:

  1. HQL表达能力有限,不适合迭代式算法和复杂数据挖掘。
  2. 执行效率相对较低,生成的MapReduce作业不够智能化,调优难度大。

Hive应用场景:

  • 日志分析:广泛应用于互联网公司,如百度、淘宝等。
  • 统计网站的PV(页面浏览量)、UV(独立访客)、SKU(库存单位)、SPU(标准产品单元)、SKC(库存商品)等指标。
  • 多维度数据分析和数据仓库构建。
  • 海量结构化数据的离线分析。

1.2 Hive架构

1.2.1 Client

Hive提供了多种客户端连接方式:

  1. CLI(Hive Shell):通过命令行界面直接与Hive交互。
  2. JDBC/ODBC:通过Java应用程序连接Hive,使用Thrift软件框架实现跨语言服务开发。
  3. WebUI:提供了一个简单的Web页面界面,但功能较为简陋。

1.2.2 Metastore

元数据包括表名、所属数据库、拥有者、列/分区字段等信息。Hive通常使用MySQL等数据库存储元数据,需要提供URI、用户名、密码和驱动信息。

1.2.3 Driver

Hive的查询处理流程:

  1. 解析器(SQL Parser):将SQL字符串转换为抽象语法树(AST)。
  2. 编译器(Physical Plan):生成逻辑执行计划。
  3. 优化器(Query Optimizer):对逻辑执行计划进行优化。
  4. 执行器(Execution):将逻辑计划转换为MapReduce任务。

1.2.4 数据处理

Hive的数据存储在HDFS中,计算由MapReduce完成。HDFS和MapReduce在源码级别上进行了整合,两者结合最佳。

1.4 Hive的三种交互方式

1)第一种交互方式

通过命令行启动Hive Shell:

nohup hive --service metastore >/dev/null &
hive
quit;

2)第二种交互方式

通过HiveServer2提供服务:

nohup hive --service metastore >/dev/null &
nohup hiveserver2 &
beeline -u jdbc:hive2://master:10000 -n root
!exit

3)第三种交互方式

使用-e参数直接执行HQL语句:

bin/hive -e "show databases;"

使用-f参数执行脚本文件:

vim hive.sql
create database bigdata29;
use bigdata29;
create table test1
(
    id bigint,
    name string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
show tables;
hive -f hive.sql

1.5 Hive元数据

Hive元数据库中重要的表结构:

  1. VERSION:存储Hive版本信息。
  2. DBS、DATABASE_PARAMS:存储数据库基本信息和参数。
  3. TBLS、TABLE_PARAMS、TBL_PRIVS:存储表/视图的基本信息、属性和授权信息。
  4. SDS、SD_PARAMS、SERDES、SERDE_PARAMS:存储文件存储信息。
  5. COLUMNS_V2:存储表字段信息。

2、Hive的基本操作

2.1 Hive库操作

2.1.1 创建数据库

  1. 创建数据库:
create database testdb;
  1. 避免重复创建:
create database if not exists testdb;

2.2.2 创建数据库和位置

create database if not exists zs location '/bigdata32/databases'

2.2.3 修改数据库

数据库的名称和位置不可更改,但可以添加其他元数据信息:

alter database dept set dbproperties('createtime'='20220531');

2.2.4 数据库详细信息

  1. 显示数据库:
show databases;
show databases like 't*';
  1. 查看数据库详情:
desc database testdb;
  1. 切换数据库:
use testdb;

2.2.5 删除数据库

  1. 最简写法:
drop database testdb;
  1. 避免错误:
drop database if exists testdb;
  1. 强制删除非空数据库:
drop database if exists testdb cascade;

2.2 Hive数据类型

2.2.1 基础数据类型

类型
Java数据类型
描述
TINYINT
byte
8位有符号整型
SMALLINT
short
16位有符号整型
INT
int
32位有符号整型
BIGINT
long
64位有符号整型
BINARY
二进制数据类型
FLOAT
float
32位二进制浮点型
DOUBLE
double
64位二进制浮点型
DECIMAL
10进制精确数字类型
VARCHAR
变长字符类型
CHAR
固定长度字符类型
STRING
string
字符串类型
DATE
日期类型
DATETIME
日期时间类型
TIMESTAMP
时区无关的时间戳类型
BOOLEAN
boolean
布尔类型

2.2.2 复杂的数据类型

类型
定义方法
构造方法
ARRAY
array
array(1, 2, 3)
MAP
map<string, string>
map(“k1”, “v1”, “k2”, “v2”)
STRUCT
struct<x:int, y:int>
named_struct(‘x’, 1, ‘y’, 2)

2.3 Hive表操作

2.3.1 创建表

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
(
    col_name data_type [COMMENT col_comment], ...
)
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...)]
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]

建表示例:

create table IF NOT EXISTS students5
(
    id bigint,
    name string,
    age int,
    gender string,
    clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

2.3.2 显示表

show tables;
show tables like 'u*';
desc t_person;
desc formatted students;

2.3.3 加载数据

  1. 使用HDFS命令:
hdfs dfs -put '本地数据' 'hive表对应的HDFS目录下'
  1. 使用load data:
load data local inpath '/usr/local/soft/bigdata32/data/students' into table students2;
  1. 使用create table as:
create table st1 as select * from students1 where age > 17;
  1. 使用insert into:
insert into students4 select * from students2 where age > 15;

2.3.4 修改列

desc students2;
alter table students2 add columns (education string);
alter table stduents2 change education educationnew string;

2.3.5 删除表

drop table students2;

2.4 Hive内外部表

2.4.1 Hive内部表

  • 创建表时会在HDFS上创建对应目录。
  • 数据一旦被load,就不能被修改。
  • 删除表时,表对应的文件夹和数据都会被删除。
create table students_internal
(
    id bigint,
    name string,
    age int,
    gender string,
    clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/databases/zs/';

2.4.2 Hive外部表

  • 删除表时,数据仍然保存在HDFS中,不会删除。
  • 通常用于多个程序共享的数据。
create external table students_external
(
    id bigint,
    name string,
    age int,
    gender string,
    clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/databases/zs';

2.5 Hive导出数据

将表中的数据备份

  1. 导出到本地:
mkdir -p /usr/local/soft/shujia
insert overwrite local directory '/usr/local/soft/shujia/person_data' select * from t_person;
  1. 按指定格式导出到本地:
insert overwrite local directory '/usr/local/soft/shujia/person' 
ROW FORMAT DELIMITED fields terminated by ',' 
collection items terminated by '-' 
map keys terminated by ':' 
lines terminated by '\n' 
select * from t_person;
  1. 导出到HDFS:
hdfs dfs -mkdir -p /shujia/bigdata17/copy
insert overwrite local directory '/usr/local/soft/shujia/students_data2' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select * from students
  1. 使用HDFS命令:
hdfs dfs -mkdir -p /shujia/bigdata17/person
hdfs dfs -cp /hive/warehouse/t_person/*  /shujia/bigdata17/person

将表结构和数据同时备份

export table t_person to '/shujia/bigdata17/copy';
drop table t_person;
import from '/shujia/bigdata17';
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号