项目3 🎬MapReduce 项目三:统计电影网站用户影评数据
1. 项目背景与目标
| 类别 | 描述 |
|---|---|
| 背景 | 在大数据时代下,发展数字经济需兼顾保护用户隐私和深入探索大数据价值,以指导决策 。 |
| 意义 | 电影的评分次数直观地反映了影片的受欢迎程度和公众关注度 。分析不同性别的观影偏好有助于提供针对性的电影推荐 。 |
| 技术选型 | 选用 MapReduce 编程,以保证较高的处理效率和灵活性 。 |
| 主要任务 | * 统计所有电影的评分次数 。* 统计不同性别的用户对电影的评分(平均评分) 。 |
2. MapReduce 开发环境搭建
本项目使用 IntelliJ IDEA 作为 MapReduce 的编程工具,因为它是一个常用的 Java 集成开发工具,且 Hadoop 框架基于 Java 开发 。
步骤概览
在 Windows 系统下安装 Java (JDK 8 Update 281) 。
配置 Windows 系统的 Java 环境变量(
JAVA_HOME、Path、ClassPath)。下载并安装 IntelliJ IDEA (Community Edition) 。
创建 MapReduce 工程(Maven Archetype,使用 JDK 1.8)。
配置 MapReduce 开发环境,将 Hadoop 安装包
/share/hadoop目录下的全部 Jar 包导入到 IDEA 项目的Libraries或Modules中 。
3. MapReduce 基础知识与案例分析
A. WordCount(词频统计)源码解析
通过官方提供的 WordCount 示例,深入了解 MapReduce 的工作原理和执行流程 。
| 模块 | 职责与流程 |
|---|---|
| Driver 模块 | MapReduce 程序的入口,负责初始化设置,包括:初始化 Hadoop 配置、新建 Job 对象、设置 Mapper/Combiner/Reducer、设置输入/输出路径和提交任务等 。 |
| Map 阶段 | 将输入文件的每一行记录映射(Map)处理为若干组键值对 <键, 值> 。在词频统计中,键是单词,值是初始频次 。 |
| Shuffle/Sort | 在 Map 输出和 Reduce 输入之间进行。先按键进行排序,然后将键相同的键值对汇集起来,并将值存入同一列表中 。 |
| Reduce 阶段 | 接收 Shuffle 后的数据,对列表中的值进行聚合计算,例如求和统计词频 。 |
B. 网站用户登录次数排序案例
该案例解决了上一个项目(项目2)中结果仅按邮件地址排序的问题,实现了根据登录次数进行升序排序 。
| 模块 | 实现逻辑 |
|---|---|
| Mapper | 读取日志文件,将 键与值的位置进行交换。例如:<邮件地址, 登录次数> 转换为 <登录次数, 邮件地址> 。 |
| Shuffle/Sort | 根据新的键(登录次数)进行排序 。 |
| Reducer | 读取 Mapper 的输出键值对,再次 将键与值的位置进行交换,最终输出 <邮件地址, 登录次数>(此时已按登录次数排序)。 |
4. 项目实践:电影影评数据统计
| 统计目标 | 数据文件 | 主要步骤 | 关键技术点 | ||
|---|---|---|---|---|---|
| 所有电影评分次数 | movies.dat, ratings.dat | 1. 连接 movies.dat 和 ratings.dat 数据 。2. 计算所有电影的评分次数 。 | 需要关注 MapReduce 中的表连接(reducejoin() 或 mapjoin())和数据倾斜问题 。 | ||
| 不同性别用户对电影的平均评分 | movies.dat, users.dat, ratings.dat | 1. 连接 movies.dat、users.dat 和 ratings.dat 数据 。2. 按性别和电影 ID 分组 。3. 计算每部电影的平均评分 。 | 涉及三表连接(例如 MapjoinThreeTables ),并在 Reduce 阶段按需分组聚合 。 |