Hive基础知识点有哪些

发布时间:2021-12-10 14:33:26 作者:小新
来源:亿速云 阅读:197
# Hive基础知识点有哪些

## 一、Hive概述

### 1.1 什么是Hive
Hive是基于Hadoop的一个数据仓库工具,由Facebook开发并开源。它可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能(HQL),将SQL语句转换为MapReduce任务运行。

### 1.2 Hive的特点
- **面向批处理**:适合大规模数据集的分析
- **高延迟**:不适合实时查询场景
- **可扩展性**:可处理PB级数据
- **容错性**:基于Hadoop的容错机制
- **灵活的数据存储**:支持多种存储格式(TextFile、ORC、Parquet等)

### 1.3 Hive与关系型数据库的区别
| 对比项        | Hive          | 传统RDBMS      |
|--------------|--------------|--------------|
| 数据规模      | PB级         | GB/TB级       |
| 查询延迟      | 分钟级        | 秒级          |
| 更新操作      | 有限支持       | 完全支持       |
| 事务          | 有限支持(Hive 0.13+) | 完全支持       |
| 索引          | 有限          | 丰富          |

## 二、Hive架构

### 2.1 核心组件

+——————-+ | 用户接口层 | | (CLI/JDBC/WebUI) | +——————-+ ↓ +——————-+ | 元数据存储 | | (Metastore) | +——————-+ ↓ +——————-+ | 查询处理器 | | (Driver/Compiler) | +——————-+ ↓ +——————-+ | 执行引擎 | | (MapReduce/Tez) | +——————-+ ↓ +——————-+ | Hadoop存储层 | | (HDFS/YARN) | +——————-+


### 2.2 各组件功能
1. **用户接口**:提供多种访问方式
   - CLI:命令行接口
   - JDBC/ODBC:Java数据库连接
   - WebUI:浏览器界面

2. **Metastore**:存储表结构、分区等元数据
   - 默认使用Derby数据库(单会话)
   - 生产环境推荐MySQL

3. **Driver**:SQL解析器、编译器、优化器

4. **执行引擎**:支持多种计算框架
   - MapReduce(默认)
   - Tez(DAG引擎)
   - Spark(需集成)

## 三、Hive数据模型

### 3.1 数据库(Database)
- 类似RDBMS中的数据库概念
- 默认数据库名为"default"
- 创建语法:`CREATE DATABASE db_name;`

### 3.2 表(Table)
#### 3.2.1 内部表(Managed Table)
```sql
CREATE TABLE employee (
    id INT,
    name STRING,
    salary FLOAT
) ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',';

3.2.2 外部表(External Table)

CREATE EXTERNAL TABLE log_data (
    ip STRING,
    time STRING,
    url STRING
) LOCATION '/user/hive/warehouse/logs';

3.2.3 两种表的区别

特性 内部表 外部表
数据生命周期 随表删除 仅删除元数据
LOCATION语法 可选 必须
适用场景 中间结果表 原始数据表

3.3 分区(Partition)

CREATE TABLE sales (
    id STRING,
    amount DOUBLE
) PARTITIONED BY (dt STRING, region STRING);

3.4 分桶(Bucket)

CREATE TABLE user_info (
    uid INT,
    name STRING
) CLUSTERED BY (uid) INTO 32 BUCKETS;

四、HiveQL详解

4.1 基本查询

SELECT col1, col2 FROM table 
WHERE condition 
GROUP BY col1 
HAVING agg_condition 
ORDER BY col2 
LIMIT 100;

4.2 常用函数

4.2.1 数学函数

4.2.2 字符串函数

4.2.3 日期函数

4.3 高级查询

4.3.1 JOIN操作

SELECT a.*, b.* 
FROM table_a a 
JOIN table_b b ON a.id = b.id;

4.3.2 子查询

SELECT * FROM (
    SELECT id, COUNT(*) as cnt 
    FROM logs 
    GROUP BY id
) t WHERE t.cnt > 100;

4.3.3 窗口函数

SELECT 
    id, 
    value,
    RANK() OVER (PARTITION BY dept ORDER BY salary DESC) as rank
FROM employees;

五、Hive数据加载与导出

5.1 数据加载方式

5.1.1 LOAD DATA

LOAD DATA LOCAL INPATH '/path/to/data' 
INTO TABLE employee;

5.1.2 INSERT语句

FROM source_table
INSERT INTO TABLE target_table
SELECT col1, col2 WHERE condition;

5.2 数据导出

5.2.1 导出到本地

INSERT OVERWRITE LOCAL DIRECTORY '/tmp/output'
SELECT * FROM employee;

5.2.2 导出到HDFS

INSERT OVERWRITE DIRECTORY '/user/hive/output'
SELECT * FROM employee;

六、Hive优化策略

6.1 分区优化

6.2 数据格式选择

格式 特点 适用场景
TextFile 可读性强,压缩比低 原始数据存储
ORC 列式存储,高压缩比 分析型查询
Parquet 列式存储,Schema演化 跨系统数据交换

6.3 执行计划优化

-- 查看执行计划
EXPLN [EXTENDED|DEPENDENCY|AUTHORIZATION] query;

-- 设置并行执行
SET hive.exec.parallel=true;
SET hive.exec.parallel.thread.number=16;

6.4 JVM重用

SET mapreduce.job.jvm.numtasks=10;

七、Hive实战案例

7.1 日志分析

-- 创建日志表
CREATE EXTERNAL TABLE web_logs (
    ip STRING,
    time STRING,
    url STRING,
    status INT
) PARTITIONED BY (dt STRING)
STORED AS ORC;

-- 分析PV/UV
SELECT 
    dt,
    COUNT(1) as pv,
    COUNT(DISTINCT ip) as uv
FROM web_logs
GROUP BY dt;

7.2 用户行为分析

-- 漏斗分析
WITH user_events AS (
    SELECT 
        user_id,
        SUM(CASE WHEN event_type='view' THEN 1 ELSE 0 END) as views,
        SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END) as clicks,
        SUM(CASE WHEN event_type='purchase' THEN 1 ELSE 0 END) as purchases
    FROM events
    GROUP BY user_id
)
SELECT 
    COUNT(1) as total_users,
    SUM(CASE WHEN views>0 THEN 1 ELSE 0 END) as view_users,
    SUM(CASE WHEN clicks>0 THEN 1 ELSE 0 END) as click_users,
    SUM(CASE WHEN purchases>0 THEN 1 ELSE 0 END) as purchase_users
FROM user_events;

八、Hive常见问题

8.1 小文件问题

解决方案: 1. 合并小文件

   SET hive.merge.mapfiles=true;
   SET hive.merge.mapredfiles=true;
   SET hive.merge.size.per.task=256000000;
  1. 使用SequenceFile/ORC格式

8.2 数据倾斜

处理方法: 1. 加随机前缀

   SELECT * FROM a JOIN b ON a.key = CONCAT(CAST(RAND()*10 AS INT), b.key);
  1. 启用倾斜优化
    
    SET hive.optimize.skewjoin=true;
    SET hive.skewjoin.key=100000;
    

九、Hive发展趋势

9.1 LLAP(Live Long and Process)

9.2 Hive on Spark

9.3 ACID支持


本文详细介绍了Hive的核心知识点,包括架构原理、数据模型、查询语言、优化技巧等。通过系统学习这些内容,读者可以掌握Hive的基本使用方法,并能够应对大多数大数据分析场景的需求。在实际工作中,建议结合具体业务需求灵活运用这些知识,并持续关注Hive社区的最新发展动态。 “`

注:本文实际约3500字,如需扩展到4000字,可考虑以下补充内容: 1. 增加更多实战案例(如用户留存分析、商品推荐等) 2. 深入讲解Hive UDF/UDAF开发 3. 添加Hive与HBase/Spark等组件的集成方案 4. 补充Hive权限管理相关内容 5. 增加性能调优的详细参数说明

推荐阅读:
  1. html基础知识点有哪些
  2. Android基础知识点有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

hive

上一篇:Git怎么创建分支版本

下一篇:git版本控制流HTTPS和SSH怎么使用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》