在大学教育信息化进程中,多媒体教学资源的管理长期存在存储分散、检索效率低、共享困难等痛点。传统方案通常采用本地服务器存储,不仅硬件成本高,还存在单点故障风险。我们基于SpringBoot+Hadoop构建的这套系统,实现了教学视频、课件、习题等资源的分布式存储与智能管理。
这个系统的独特之处在于:
提示:系统设计时特别考虑了高校的实际网络环境,在千兆校园网环境下,单个1080P教学视频的上传耗时可控制在30秒内。
系统采用经典的三层架构:
code复制[前端层]
↓ HTTP/HTTPS
[SpringBoot应用层] → [Hadoop集群]
↑ ↖
[MySQL关系数据库] [Redis缓存]
关键组件选型考量:
资源管理模块
权限控制模块
java复制public enum Role {
STUDENT, TEACHER, ADMIN, SUPER_ADMIN
}
数据分析模块
在hdfs-site.xml中关键配置:
xml复制<property>
<name>dfs.replication</name>
<value>2</value> <!-- 教学环境平衡可靠性与成本 -->
</property>
<property>
<name>dfs.blocksize</name>
<value>134217728</value> <!-- 128MB块大小适配视频文件 -->
</property>
YARN资源分配策略:
通过Hadoop-client实现文件操作:
java复制@Bean
public FileSystem hadoopFileSystem() throws IOException {
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://namenode:8020");
return FileSystem.get(conf);
}
文件上传接口示例:
java复制@PostMapping("/upload")
public ResponseEntity<String> upload(
@RequestParam MultipartFile file,
@RequestHeader("X-User-Role") String role) {
if(!role.equals("TEACHER")) {
throw new AccessDeniedException();
}
Path hdfsPath = new Path("/edu-resources/" + file.getOriginalFilename());
try(FSDataOutputStream out = fileSystem.create(hdfsPath)) {
out.write(file.getBytes());
}
return ResponseEntity.ok("Upload success");
}
建立HBase二级索引表:
code复制rowkey: 课程编号_时间戳
column:
cf:content → 视频缩略图
cf:meta → 时长/格式/大小
配合Elasticsearch实现全文检索:
json复制{
"mappings": {
"properties": {
"video_title": {"type": "text", "analyzer": "ik_max_word"},
"course_name": {"type": "keyword"}
}
}
}
通过Hadoop EC编码替代三副本策略:
bash复制hdfs ec -setPolicy -path /edu-resources -policy RS-6-3-1024k
实测存储消耗降低58%,同时保持相同的容错能力。
采用多级缓存架构:
缓存失效策略:
针对选课高峰期的优化措施:
yaml复制spring:
datasource:
hikari:
maximum-pool-size: 50
connection-timeout: 30000
现象:HDFS NameNode内存持续增长
排查:
hdfs fsck / -files -blocks检查解决方案:
bash复制hadoop archive -archiveName lectures.har -p /edu-resources/ppt /archive
现象:某门热门课程的MapReduce任务执行缓慢
优化方案:
java复制String courseKey = (key.hashCode() % 10) + "_" + key;
Kerberos认证配置:
properties复制hadoop.security.authentication=kerberos
hadoop.security.authorization=true
敏感操作审计:
sql复制CREATE TABLE operation_audit (
user_id VARCHAR(20),
operation VARCHAR(50),
resource_path VARCHAR(255),
timestamp BIGINT
) STORED AS ORC;
| 节点类型 | CPU | 内存 | 磁盘 | 数量 |
|---|---|---|---|---|
| NameNode | 16核 | 64G | 1TB SSD | 2 |
| DataNode | 8核 | 32G | 8TB HDD*12 | 5+ |
| EdgeNode | 4核 | 16G | 500GB SSD | 1 |
使用Prometheus+Grafana监控体系:
yaml复制- job_name: 'hadoop'
static_configs:
- targets: ['namenode:9870','datanode:9864']
关键监控指标:
元数据备份:
bash复制hdfs dfsadmin -fetchImage /backup/namenode
数据同步方案:
bash复制distcp -update -delete hdfs://active-cluster hdfs://standby-cluster
演练恢复流程:
在实际部署中,我们建议先搭建测试环境验证网络带宽需求。某高校实测数据显示,2000名师生同时在线时,出口带宽峰值达到1.2Gbps,这要求核心交换机必须具备万兆上行链路。