Skip to content

项目5 📚 基于Hive实现电影网站用户影评分析学习教程 ​

本教程将基于您提供的项目资料,从认识 Hive 数据仓库开始,逐步深入到 Hive 的安装模式、表的创建与修改,以及数据的增删查改,最后以电影网站用户影评分析案例收尾,强调实用性和操作步骤。

🚀 一、 认识 Hive 数据仓库 ​

Hive 是一个构建在 Hadoop 之上的数据仓库工具,属于 Hadoop 生态系统的组件之一。它主要用于海量数据的存储和离线批量处理。对于熟悉 SQL 的传统数据分析人员,Hive 提供了 HQL (类 SQL) 接口,可以轻松对存储在 Hadoop 文件中的大规模数据集进行数据整理、特殊查询和分析。

1. Hive 与传统数据库的对比 ​

对比内容Hive传统数据库
查询语言HQL 4SQL 5
数据存储HDFS 6块设备或本地文件系统 7
执行引擎MapReduce、Tez、Spark 8自身的执行引擎 9
执行延迟高 10低 11
可扩展性好 12有限 13
数据处理规模大 14小 15

2. Hive 系统架构概述 ​

Hive 采用典型的 客户端/服务器 (C/S) 架构,底层驱动引擎使用的是 Hadoop 的 MapReduce 框架,因此它运行在 Hadoop 基础上 16。

  • 用户接口 (CLI/JDBC/ODBC/HWI):用户通过这些接口提交 HQL 语句 17。

  • Thrift:提供跨语言服务 18。

  • Driver (驱动引擎):接收 HQL 语句,查找 MetaStore,编译生成执行计划,并提交给 Hadoop 191919。

  • MetaStore (元数据存储系统):存储 Hive 的元数据,通常使用 Derby 或 MySQL 数据库 20。

  • HDFS (底层存储):所有数据最终都存储在 HDFS 中 21。

🛠️ 二、 Hive 的安装模式(实操重点) ​

Hive 有三种主要的安装连接模式,核心区别在于元数据(MetaStore)的存储和共享方式 22。

连接模式元数据存储介质元数据是否共享额外服务要求
内嵌模式内嵌的 Derby 数据库不共享(在不同路径下打开客户端会创建新的日志文件和元数据) 2424无 2525
直连数据库模式外部数据库(如 MySQL)共享(所有节点访问一致的元数据) 27无需单独开启 MetaStore 服务 28
远程模式外部数据库(如 MySQL)共享需要单独开启 MetaStore 服务 31313131

1. 内嵌模式设置(以 Derby 为例) ​

内嵌模式通常用于快速体验和测试,其特点是简单但元数据不共享 。

  1. 准备环境: 下载 Hive 安装包,上传至 Linux 系统,并解压 。

  2. 解决依赖冲突: 删除旧版本 guava-19.0.jar,复制 Hadoop 的 guava-27.0-jre.jar 到 Hive 的 lib 目录下 。

  3. 解决日志冲突: 删除 /lib 目录下的 log4j-slf4j-impl-2.17.1.jar 。

  4. 配置环境变量: 在 /etc/profile 中配置 Hive 环境变量 。

  5. 启动 Hive: 启动 Hadoop 集群后,直接使用 hive 命令启动并进入 Hive 交互界面 。

  6. 验证: 在 Hive 交互界面输入 show databases; 查看数据库列表 。

2. 直连数据库模式设置(以 MySQL 为例) ​

直连模式将元数据存储在外部的 MySQL 数据库中,实现元数据共享 。

  1. 安装 MySQL: 在 Master 节点安装并配置 MySQL 数据库,包括设置编码、启动服务、修改密码和配置远程登录权限等。

  2. 安装配置 Hive (Slave 节点):

    • 将 Hive 安装包和 MySQL 连接驱动 Jar 包上传至 Slave 节点 。

    • 解决依赖和日志 Jar 包冲突(步骤与内嵌模式一致)。

    • 配置 Hive 环境变量 。

    • 添加 hive-site.xml 文件,配置 MySQL 连接信息 。

    • 复制 MySQL 连接驱动 Jar 包到 Hive 安装包的 lib 目录 。

    • 初始化元数据库: 使用 schematool -dbType mysql -initSchema 命令 。

  3. 启动 Hive: 通过 hive 命令启动并进入 Hive 交互界面 。

💿 三、 实现 Hive 表的创建与修改(HQL 核心) ​

Hive 的 HQL 语法与 SQL 类似,但表结构具有更高的灵活性,支持内部表和外部表 。

1. 数据库操作语法 ​

操作类型HQL 语法说明
创建数据库`CREATE (DATABASESCHEMA) [IF NOT EXISTS] database_name [LOCATION hdfs_path];`
使用数据库USE database_name; 或 USE default;设置当前工作的数据库。
删除数据库`DROP (DATABASESCHEMA) [IF EXISTS] database_name [RESTRICT
更改数据库`ALTER (DATABASESCHEMA) database_name SET LOCATION hdfs_path;`

💡 实践操作示例:

  1. 创建数据库: hive> create database myhive;

  2. 查看: hive> show databases;

  3. 使用: hive> use myhive;

2. 表的创建 ​

创建表时可选择内部表或外部表,并可指定分区和分桶 。

sql
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, ...)
        [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
    [ROW FORMAT row_format]
    [STORED AS file_format]
    [LOCATION hdfs_path];
  • EXTERNAL:创建外部表,删除表时只删除元数据,不删除实际数据 。

  • PARTITIONED BY:创建分区表,用于按属性粗略划分表数据,加快查询速度 。

  • CLUSTERED BY:将表或分区进一步组织成桶,是更细粒度的数据划分,可提高查询处理效率和采样效率 。

  • ROW FORMAT:指定行格式,包括字段和行分隔符 。

  • STORED AS:文件存储格式,默认是 TextFile 。

  • LOCATION:指定表在 HDFS 中的实际路径 。

3. 表的修改 ​

使用 ALTER TABLE 语句可以实现表的重命名、添加列、修改列名/类型以及分区操作 。

操作类型HQL 语法示例
重命名表ALTER TABLE score RENAME TO stu_score;
添加列ALTER TABLE stu_score ADD COLUMNS (credit INT, gpa FLOAT);
更改列ALTER TABLE stu_score CHANGE COLUMN credit Credits float;
添加分区ALTER TABLE table_name ADD PARTITION (partition_column = partition_col_value, ...);

📊 四、 实现 Hive 表中数据的增删查改 ​

Hive 的数据操作语言 (DML) 专注于批量处理,与传统数据库的行级操作有所不同 。

1. 数据装载(导入数据) ​

数据装载是向 Hive 表中导入数据的主要方式,通常使用 LOAD DATA 命令 。

代码段

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE table_name [PARTITION (col_name=val, ...)];
  • LOCAL:filepath 是本地文件系统路径,文件会被复制到目标 HDFS 路径 70。

  • 无 LOCAL:filepath 是 HDFS 路径,文件内容会被移动到 Hive 表指定的 HDFS 路径 71。

  • OVERWRITE:覆盖表中原有数据。

  • 无 OVERWRITE:追加数据到表末尾

2. 数据查询 ​

Hive 的 SELECT 语句与 MySQL 语法基本一致,支持 WHERE, DISTINCT, GROUP BY, ORDER BY, HAVING, LIMIT 等 7474。

  • SORT BY:在数据进入 Reducer 前完成排序,保证每个 Reducer 的输出有序,但不保证全局有序 75。

  • ORDER BY:进行全局排序,只有一个 Reducer,数据量大时计算时间长 76。

  • GROUP BY 和 HAVING:GROUP BY 分组,HAVING 对分组后的结果进行过滤(可使用聚合函数),而 WHERE 针对表中的列进行条件过滤(不能使用分组函数) 77777777。

3. 数据插入、更新与删除 ​

  • 插入数据: 使用 INSERT INTO (追加) 或 INSERT OVERWRITE (覆盖) 语句 78。

  • 更新/删除: 默认情况下,Hive 不支持单条 UPDATE 和 DELETE 79。若要支持,需要:

    1. 在 hive-site.xml 文件中进行相关配置 80。

    2. 数据表需要显式创建为事务表 (TBLPROPERTIES ('transactional'='true')) 81818181。

  • 清空表: TRUNCATE TABLE table_name; 会清空整个表的所有数据 82828282。

🎬 五、 项目实践:电影用户影评分析 ​

利用上述知识,可以对电影网站的用户影评数据进行分析。

1. 创建电影用户影评数据表 ​

根据 ratings.dat、users.dat、movies.dat 三个数据文件,创建对应的 Hive 外部表,并设置好字段分隔符(例如 ::)和文件存储路径 。

文件名对应表名字段(部分)字段类型说明
ratings.datfilm.ratingsUserID, MovieID, Rating, tsint, int, int, bigint用户评分数据 84
users.datfilm.usersUserID, Gender, Age, Occupation, Zip_codeint, string, int, int, string用户基本信息 85
movies.datfilm.moviesMovieID, MovieTypeint, string电影信息(电影ID和类型) 86

2. 导入数据 ​

使用 LOAD DATA 命令将 HDFS 或本地文件系统中的数据导入到创建的 Hive 表中 87878787。

3. 数据分析(HQL 查询) ​

通过编写 HQL 查询语句,实现以下分析目标:

  • 统计评分次数最多的10部电影及评分次数 88。

  • 统计不同性别的用户评分最高的10部电影及评分 89。

  • 计算指定电影各年龄段用户的平均评分 90。

  • 统计影评库中各种类型电影中评分最高的5部电影 91。

这些分析通常涉及 表连接(JOIN)、分组(GROUP BY) 和 排序(ORDER BY/SORT BY) 等核心 HQL 操作 92929292。


如果您在实践过程中遇到任何问题,或者想进一步深入某个特定的 Hive 主题,例如具体的分区表或分桶操作的 HQL 语句,请随时告诉我!

基于 Vite 强力驱动 | 纯静态轻量托管