暑假学习笔记
一、本周学习内容
(一)Hadoop 集群监控与深度调优
Ambari 部署与监控视图
本周重点完成了 Ambari 2.7.6 的离线安装与集群纳管。通过自定义本地源,解决了公司内网无法访问外网仓库的问题。
在 Ambari Web 控制台中创建了 Hadoop、YARN、Hive 服务组,并启用了 Metrics 视图,实时观测 CPU、内存、网络、磁盘四大维度指标。
利用 Alert 功能配置了“DataNode 离线”“磁盘剩余空间 < 10 %”两类告警,告警阈值触发后通过邮件通知至个人邮箱。
HDFS 块策略与 MapReduce 调优
将 HDFS 默认块大小从 128 MB 调整为 256 MB,减少小文件场景下 NameNode 内存压力;通过 hdfs fsck 验证块分布均衡性。
针对上周的日志清洗作业,新增 CombineTextInputFormat,使 Map Task 数量由 210 个降至 48 个,作业总耗时缩短 34 %。
使用 yarn logs -applicationId 分析 Container 内存溢出日志,将 Map 内存从 1 GB 提升到 2 GB,Reduce 内存提升到 4 GB,彻底解决 OOM 异常。
实战:用户行为日志分析
编写 MapReduce 程序,对 5 GB 模拟用户点击日志进行字段抽取、时间窗口聚合,输出每个用户每日 PV、UV、平均停留时长三张宽表。
使用 HDFS 归档目录 /warehouse/behavior/daily/ 存储结果,设置生命周期 30 天,自动由 HDFS Balancer 进行冷热数据迁移。
(二)Python 数据分析与机器学习
pandas 数据清洗流水线
使用 pandas.read_json() 加载爬虫获取的 3.7 万条新闻数据,通过 dropna()、fillna() 处理缺失值,astype() 统一字段类型,构建 DataFrame 流水线。
设计正则表达式 re.compile(r'[\u4e00-\u9fa5]+') 提取中文标题,剔除乱码及特殊符号,清洗后数据有效率达 96.8 %。
scikit-learn 模型训练
以 TF-IDF 向量化新闻标题,训练朴素贝叶斯分类器,实现“科技、财经、体育”三类主题自动标注。
在 8:2 训练/测试集上,准确率 0.91,召回率 0.89,F1 值 0.90;通过 GridSearchCV 调整 alpha 与 ngram_range,模型性能提升 4.3 %。
将模型持久化至 news_nb.pkl,并编写 predict_topic.py 脚本,实现单条标题秒级预测。
matplotlib/seaborn 可视化
绘制主题分布饼图、每日新闻量折线图,以及混淆矩阵热力图,用于周报展示与错误分析。
使用 matplotlib.pyplot 自定义中文字体路径,解决图表中文乱码问题。
(三)Java Web 项目功能扩展
评论模块
新建 CommentServlet 接收 POST 请求,参数包括文章 ID、用户 ID、内容、时间戳。
数据库新增 comment 表(id, article_id, user_id, content, create_time),通过外键级联删除确保数据完整性。
前端采用 AJAX 无刷新提交,后端返回 JSON。列表页使用 JSTL <c:forEach> + EL 表达式实现分页(每页 10 条),支持按时间倒序排列。
消息通知
基于观察者模式,在 CommentServlet 中发布“评论事件”,由 NotificationService 异步发送邮件。
使用 JavaMail + QQ 邮箱 SMTP,配置 SSL 465 端口,成功实现评论后实时提醒被回复用户。
站内信表 notification 记录未读状态,用户登录后通过顶部 Badge 数字提示未读数量。
二、下周计划
Hadoop 生态进阶
部署 Hive 3.1.3,完成日志表外部表映射,使用 HQL 实现“昨日 Top10 热点新闻”快速查询。
学习 Sqoop 将 MySQL 用户表增量导入 HDFS,打通关系型数据库与大数据平台链路。
Python Web 框架初探
搭建 Flask 0.12 开发环境,开发 RESTful API /api/predict,封装上周训练好的新闻主题模型,支持 POST JSON 输入返回预测结果。
实现 Swagger 在线文档与异常捕获中间件,提高接口可维护性。
Java Web 性能与安全
引入 Redis 缓存热点评论,减少数据库压力;使用 JMeter 压测评论接口,目标 QPS ≥ 200。
添加 XSS 过滤器与 SQL 注入全局防御,使用 OWASP ESAPI 对用户输入进行转义与校验。
三、本周遇到的问题及解决方法
表格
问题描述 原因定位 解决方案
Ambari Agent 心跳超时 主机名与 /etc/hosts 不一致 统一主机名并重启 Agent
pandas 处理 5 GB JSON 内存溢出 一次性加载全部数据 改用 chunksize=10000 分块读取
评论分页 LIMIT 偏移性能差 深翻页导致全表扫描 采用“上一页最大 ID”游标分页,速度提升 7 倍
邮件发送被 QQ 拦截 缺少 SPF 记录 在 DNS 添加 TXT 记录 v=spf1 include:qq.com ~all
四、总结与反思
本周在 Hadoop 运维监控、Python 机器学习及 Java Web 业务功能三条战线同时推进,均取得阶段性成果:
集群层面,Ambari 可视化监控与参数调优使作业稳定性与资源利用率显著提升;
算法层面,朴素贝叶斯文本分类模型达到上线标准,为后续推荐系统奠定数据基础;
产品层面,评论与消息模块增强了用户互动,邮件+站内双通道通知提升了留存率。
不足之处:
Hadoop HA 自动切换脚本未做演练,需在下周模拟 NameNode 故障以验证容错;
Python 模型尚缺 A/B 测试与线上监控,后续需接入 Flask 接口的实时日志。
下周将围绕“数据平台闭环”与“模型服务化”两大目标,持续深耕。
浙公网安备 33010602011771号