点一下关注吧!!!非常感谢!!持续更新!!!
🚀 AI篇持续更新中!(长期更新)
目前2025年06月16日更新到: AI炼丹日志-29 - 字节跳动 DeerFlow 深度研究框架 私有部署 测试上手 架构研究,持续打造实用AI工具指南!📐🤖
💻 Java篇正式开启!(300篇)
目前2025年06月16日更新到: Java-44 深入浅出 Nginx - 底层进程机制 Master Worker 机制原理 常用指令 MyBatis 已完结,Spring 已完结,深入浅出助你打牢基础!
📊 大数据板块已完成多项干货更新(300篇):
包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈! 目前2025年06月13日更新到: 大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT案例 详解

章节内容
上一节我们完成了:
- Hive简介
- 安装配置
- 下载、解压等等操作
- 修改配置
- MariaDB 安装
- 启动配置
- 建立用户 远程访问 刷新权限
背景介绍
这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。 之前已经在 VM 虚拟机上搭建过一次,但是没留下笔记,这次趁着前几天薅羊毛的3台机器,赶紧尝试在公网上搭建体验一下。
- 2C4G 编号 h121
- 2C4G 编号 h122
- 2C2G 编号 h123
启动Hive
上一节我们配置好了环境,在 h121 节点上。 此时,我们在命令行中执行:
shell
hive
可以看到如下的执行效果
数据定义语言(DDL)
创建数据库
sql
CREATE DATABASE IF NOT EXISTS mydb;
- 可加 LOCATION 指定 HDFS 路径。
- 默认存放在 /user/hive/warehouse/mydb.db。
删除数据库
sql
DROP DATABASE mydb [CASCADE];
- CASCADE 表示删除数据库及其中所有表。
创建表
内部表(Managed Table)
sql
CREATE TABLE IF NOT EXISTS emp (
id INT,
name STRING,
salary FLOAT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
外部表(External Table)
sql
CREATE EXTERNAL TABLE IF NOT EXISTS emp_ext (
id INT,
name STRING,
salary FLOAT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LOCATION '/user/hadoop/empdata';
- 外部表不会随 DROP TABLE 删除数据。
删除表
sql
DROP TABLE IF EXISTS emp;
数据操作语言(DML)
加载数据
sql
LOAD DATA LOCAL INPATH '/home/data/emp.csv' INTO TABLE emp;
-- LOCAL 表示从本地上传;省略则是从 HDFS
插入数据
sql
INSERT INTO TABLE emp VALUES (1, 'Tom', 5000.0);
多表插入
sql
FROM employees
INSERT INTO TABLE high_salary SELECT * WHERE salary > 8000
INSERT INTO TABLE low_salary SELECT * WHERE salary <= 8000;
查询结果插入新表
sql
CREATE TABLE emp_copy AS SELECT * FROM emp;
数据查询语言(SELECT)
基本查询
sql
SELECT id, name FROM emp WHERE salary > 5000;
排序与限制
sql
SELECT * FROM emp ORDER BY salary DESC LIMIT 10;
分组与聚合
sql
SELECT dept, COUNT(*) AS cnt, AVG(salary) AS avg_sal
FROM emp
GROUP BY dept
HAVING COUNT(*) > 5;
联合与去重
sql
SELECT name FROM emp1
UNION ALL
SELECT name FROM emp2;
sql
SELECT DISTINCT dept FROM emp;
连接(Join)
内连接
sql
SELECT a.id, a.name, b.dept_name
FROM emp a
JOIN dept b
ON a.dept_id = b.id;
左外连接
sql
SELECT a.id, a.name, b.dept_name
FROM emp a
LEFT JOIN dept b ON a.dept_id = b.id;
右外连接 / 全外连接
sql
RIGHT JOIN / FULL OUTER JOIN
测试Hive
shell
show functions;
执行结果如下图:
修改配置
shell
vim hive-site.xml
增加如下内容:
xml
<!-- 数据默认的存储位置(HDFS) -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
<!-- 在命令行中,显示当前操作的数据库 -->
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
<description>Whether to include the current database in the Hive prompt.</description>
</property>
<!-- 在命令行中,显示数据的表头 -->
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<!-- 操作小规模数据时,使用本地模式,提高效率 -->
<property>
<name>hive.exec.mode.local.auto</name>
<value>true</value>
<description>Let Hive determine whether to run in local mode automatically</description>
</property>
修改的结果如下图:
命令测试
shell
hive: set;

可以在 Hive 控制台中,执行操作系统的指令:
shell
!ls;
!clear;
可以在 Hive 控制台中,执行 DFS 的指令:
shell
dfs -ls /;

一些语句
编写一些语句,对 Hive 进行其他简单的测试:
shell
select array(1,2,3);
select arr[0] from (select array(1,2,3) arr) tmp;
select map('a',1,'b',2,'c',3);
select mymap["a"] from (select map('a', 1, 'b', 2, 'c',3) as mymap) tmp;
select struct('username1', 7, 1288.68);
