markdown复制## 1. 项目背景与核心价值
宁波作为长三角南翼经济中心,每年接待游客量超过1.2亿人次。传统旅游推荐系统存在两个痛点:一是景点数据分散在OTA平台、社交媒体和政务系统中;二是静态推荐策略难以应对游客的个性化需求。这个毕业设计通过Hadoop处理多源异构数据,结合SpringBoot构建实时推荐引擎,最终实现三个创新点:
1. 融合景点基础数据(开放时间、票价)与行为数据(停留时长、消费记录)
2. 采用混合推荐策略(协同过滤+内容推荐)
3. 可视化交互设计支持多维度筛选(季节偏好、消费档次)
> 提示:系统设计时特别注意了宁波本地特色,比如将"海鲜排档距离"作为餐饮推荐的重要权重因子。
## 2. 技术架构解析
### 2.1 大数据处理层设计
采用Hadoop 3.2.1版本搭建四节点集群:
- NameNode:Intel Xeon E5-2620/64GB RAM
- DataNode ×3:Intel i7-9700/32GB RAM
数据流程分三个阶段:
1. 数据采集:使用WebMagic爬取携程、美团等平台的宁波景点数据(日均抓取量约15万条)
2. 数据清洗:编写MapReduce程序处理脏数据,关键清洗规则包括:
```java
// 示例:价格异常值过滤
if(price < 0 || price > 1000) {
context.getCounter("DATA_CLEAN", "INVALID_PRICE").increment(1);
return;
}
核心采用改进的ItemCF算法:
python复制# 相似度计算加入季节修正因子
def season_adjusted_sim(item1, item2):
base_sim = cosine_similarity(item1, item2)
season_factor = get_season_overlap(item1.seasons, item2.seasons)
return base_sim * (1 + 0.3*season_factor)
实时推荐模块采用Redis缓存热点数据:
使用ECharts实现三种核心视图:
javascript复制option = {
calendar: {
range: '2023',
itemStyle: {borderWidth: 0.5}
},
visualMap: {min: 0, max: 10000},
series: [{
type: 'heatmap',
coordinateSystem: 'calendar',
data: heatData
}]
}
采用微服务架构设计商品推荐:
数据库分表策略:
sql复制CREATE TABLE `scenic_shop_rel` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`scenic_id` int(11) NOT NULL COMMENT '景点ID',
`shop_id` int(11) NOT NULL COMMENT '店铺ID',
`distance` decimal(10,2) DEFAULT NULL COMMENT '直线距离(米)',
`walk_time` int(11) DEFAULT NULL COMMENT '步行分钟数',
PRIMARY KEY (`id`),
KEY `idx_scenic` (`scenic_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
通过YARN配置资源分配:
xml复制<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>24576</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>4096</value>
</property>
HDFS优化参数:
数据倾斜处理:
推荐冷启动问题:
可视化页面卡顿:
注意:源码中的敏感配置(如数据库密码)务必使用环境变量替换,示例:
java复制@Value("${spring.datasource.password}")
private String dbPassword;
我在实际开发中发现三个关键经验:
系统测试阶段收集到一些典型用户反馈:
code复制