Hadoop生态 -- Hive 命令大全及详解

以下为 Hive 命令大全及详解,涵盖常用 DDL、DML、查询、配置与运维命令,结合核心概念说明,便于快速查阅与实践:


一、Hive 基础概念

  • 本质:基于 Hadoop 的数据仓库工具,将 SQL 转换为 MapReduce/Spark/Tez 任务。
  • 核心组件
    • 元数据库(Metastore):存储表结构(MySQL/PostgreSQL等)。
    • HiveQL:类 SQL 查询语言。
    • 执行引擎:默认 MapReduce,可切换 Spark/Tez。
  • 表类型
    • 托管表(Managed Table):数据由 Hive 管理,删除表时数据一并删除。
    • 外部表(External Table):数据存于 HDFS 指定路径,删除表仅删元数据。

二、Hive 环境与连接命令

命令说明
hive进入旧版 CLI(已淘汰)
beeline -u jdbc:hive2://<host>:<port>连接 HiveServer2(推荐)
!connect jdbc:hive2://localhost:10000在 Beeline 内连接
!quit!exit退出 Beeline

三、数据库操作(DDL)

-- 创建数据库
CREATE DATABASE IF NOT EXISTS mydb 
COMMENT '测试数据库' 
LOCATION '/user/hive/mydb';  -- 指定 HDFS 路径

-- 切换数据库
USE mydb;

-- 查看数据库
SHOW DATABASES LIKE 'my*';  -- 模糊匹配

-- 删除数据库
DROP DATABASE IF EXISTS mydb CASCADE;  -- 强制删除库及表

四、表操作(DDL)

1. 创建表

-- 托管表
CREATE TABLE employees (
  id INT COMMENT '员工ID',
  name STRING,
  salary FLOAT,
  hire_date DATE
)
COMMENT '员工信息表'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','   -- 列分隔符
STORED AS TEXTFILE;        -- 存储格式(ORC/PARQUET 更高效)

-- 外部表(数据保留在 HDFS)
CREATE EXTERNAL TABLE logs (
  log_time TIMESTAMP,
  message STRING
)
LOCATION '/data/logs';     -- 指定外部数据路径

-- 分区表(按日期分区)
CREATE TABLE sales (
  order_id BIGINT,
  product STRING
)
PARTITIONED BY (dt STRING); -- 分区字段

-- 分桶表(哈希分桶)
CREATE TABLE user_behavior (
  user_id BIGINT,
  action STRING
)
CLUSTERED BY (user_id) INTO 4 BUCKETS;  -- 分4桶

2. 修改表

-- 添加分区
ALTER TABLE sales ADD PARTITION (dt='2023-10-01');

-- 重命名表
ALTER TABLE old_name RENAME TO new_name;

-- 修改列
ALTER TABLE employees CHANGE COLUMN salary salary DOUBLE;

-- 添加列
ALTER TABLE employees ADD COLUMNS (dept STRING COMMENT '部门');

3. 删除表

DROP TABLE IF EXISTS employees;          -- 托管表删除数据
DROP TABLE logs;                         -- 外部表仅删元数据

五、数据操作(DML)

1. 加载数据

-- 从本地加载(复制)
LOAD DATA LOCAL INPATH '/home/user/data.csv' 
INTO TABLE employees;

-- 从 HDFS 加载(移动)
LOAD DATA INPATH '/input/data.csv' 
OVERWRITE INTO TABLE employees;  -- 覆盖写入

-- 插入数据(推荐 INSERT + SELECT)
INSERT OVERWRITE TABLE sales PARTITION (dt='2023-10-01')
SELECT order_id, product FROM raw_orders;

2. 数据导出

-- 导出到 HDFS
INSERT OVERWRITE DIRECTORY '/output/sales'
SELECT * FROM sales;

-- 导出到本地(需 HiveServer2 配置)
INSERT OVERWRITE LOCAL DIRECTORY '/tmp/export'
SELECT * FROM employees;

六、查询命令(DQL)

1. 基础查询

-- 分区剪裁
SELECT * FROM sales WHERE dt = '2023-10-01';

-- 分桶查询
SELECT * FROM user_behavior 
TABLESAMPLE(BUCKET 1 OUT OF 4 ON user_id);  -- 抽样第1桶

-- 聚合与窗口函数
SELECT 
  dept, 
  AVG(salary) AS avg_salary,
  RANK() OVER (ORDER BY salary DESC) AS rank
FROM employees
GROUP BY dept;

2. 复杂查询

-- JOIN 操作
SELECT e.name, d.dept_name
FROM employees e
JOIN departments d ON e.dept_id = d.id;

-- 子查询
SELECT name 
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

七、Hive 优化关键命令

1. 执行引擎设置

-- 切换引擎(默认为 mr)
SET hive.execution.engine=tez;   -- 或 spark

-- 启用向量化查询(ORC/Parquet)
SET hive.vectorized.execution.enabled=true;

2. 动态分区

SET hive.exec.dynamic.partition=true;         -- 启用动态分区
SET hive.exec.dynamic.partition.mode=nonstrict; -- 允许所有字段动态分区

INSERT INTO sales PARTITION (dt)
SELECT order_id, product, order_date AS dt 
FROM raw_orders;

3. 压缩与存储优化

-- 启用中间数据压缩
SET hive.exec.compress.intermediate=true;
SET mapred.map.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;

-- ORC 表压缩
CREATE TABLE orc_table (...) 
STORED AS ORC 
TBLPROPERTIES ("orc.compress"="SNAPPY");

八、元数据查看与描述

-- 查看表结构
DESCRIBE FORMATTED employees;  -- 详细信息(分区/存储格式)
SHOW PARTITIONS sales;         -- 显示所有分区

-- 查看建表语句
SHOW CREATE TABLE employees;

-- 函数操作
SHOW FUNCTIONS LIKE 'coalesce*';  -- 查找函数
DESCRIBE FUNCTION EXTENDED upper; -- 函数用法说明

九、权限管理

-- 授权(需启用 Sentry/Ranger)
GRANT SELECT ON TABLE employees TO USER alice;
REVOKE ALL ON DATABASE mydb FROM USER bob;

十、运维与配置

1. Hive 参数设置

-- 临时设置(会话级)
SET hive.map.aggr=true;        -- Map 端聚合
SET hive.auto.convert.join=true; -- 自动 MapJoin

-- 永久配置(hive-site.xml)
<property>
  <name>hive.fetch.task.conversion</name>
  <value>more</value>  -- 避免小查询触发 MR
</property>

2. 资源队列(YARN)

SET mapred.job.queue.name=prod;  -- 指定 YARN 队列

3. 日志与调试

# 查看 Hive 日志位置(默认)
/var/log/hive/hive.log

# 在 Beeline 中查看执行计划
EXPLAIN FORMATTED 
SELECT count(*) FROM sales;

十一、Hive 高级特性

1. ACID 事务(Hive 3+)

-- 启用事务表
CREATE TABLE acid_table (...) 
STORED AS ORC 
TBLPROPERTIES ('transactional'='true');

-- 更新/删除数据
UPDATE acid_table SET col=1 WHERE id=100;
DELETE FROM acid_table WHERE id=200;

2. 物化视图

CREATE MATERIALIZED VIEW mv_sales 
AS 
SELECT dt, SUM(amount) 
FROM sales 
GROUP BY dt;

附:常用技巧与避坑指南

  1. 避免小文件
    • 合并输出文件:SET hive.merge.mapfiles=true;
    • 定期执行:ALTER TABLE sales CONCATENATE;(ORC表)
  2. 数据倾斜处理
    SET hive.groupby.skewindata=true; -- 分组倾斜优化
    SET hive.optimize.skewjoin=true;  -- JOIN 倾斜优化
    
  3. 使用分析函数替代 UDF
    PERCENTILE_APPROX() 比自定义分位数 UDF 更高效。
  4. 外部表恢复
    误删外部表后重建表并指定原路径即可恢复数据。

注意:生产环境优先使用 Beeline + HiveServer2,避免直接操作 HDFS 路径。

掌握以上命令可覆盖 90% 的 Hive 使用场景。建议结合存储格式(ORC/Parquet)、分区/分桶策略和计算引擎(Tez/Spark)进行深度优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值