暑假周总结3
本周继续推进大型数据库技术大作业,主要完成 MapReduce 数据清洗的进一步完善,并把处理后的数据导入 Hive,开始使用 HiveSQL 进行离线分析。这一周最大的感受是,大数据课程中很多看起来独立的知识点实际上是可以连起来的。前面爬取网页得到原始数据,MapReduce 对数据进行清洗,之后 Hive 再对清洗后的数据进行统计分析,整个流程开始逐渐清晰起来。
首先,我继续修改上周的 MapReduce 清洗程序。在测试更多数据后发现,原来的代码仍然存在一些问题,比如部分记录正文为空、时间格式不统一,还有一些数据包含特殊字符。于是本周增加了字段合法性判断和简单的时间格式处理,并把明显无效的数据过滤掉。对于重复数据,目前采用比较简单的方法,以标题和部分正文组合成标识进行判断。虽然这种方法不能完全解决文章转载或者高度相似的问题,但对于当前实验数据已经能够起到一定作用。
完成清洗后,我把输出文件上传到 HDFS,并开始学习 Hive。之前学习数据库时主要使用 MySQL,所以刚开始看到 Hive 的时候会自然把它当成另一种关系型数据库。通过学习之后,我逐渐明白 Hive 本质上更偏向数据仓库工具,它通过类似 SQL 的 HiveSQL 来操作 HDFS 中的数据,适合大规模离线分析,而不是高频实时增删改。
本周完成了 Hive 数据库和数据表的创建,并尝试使用外部表加载已经存放在 HDFS 中的数据。过程中遇到了字段分隔符不一致的问题,第一次加载后查询结果很多字段都是 NULL。后来检查原始文件才发现 Hive 建表语句中指定的字段分隔符和 MapReduce 输出格式不一致。修改 ROW FORMAT DELIMITED FIELDS TERMINATED BY 后,数据才正常显示。
在查询分析方面,我尝试编写多条 HiveSQL。例如统计数据总量、按照时间统计记录数量、按照类别统计数据数量、统计出现频率较高的关键词等。虽然目前的统计还比较基础,但已经基本完成了“利用 HiveSQL 离线分析数据”这一阶段的核心流程。同时我也复习了 GROUP BY、ORDER BY、COUNT、LIMIT 等 SQL 操作。
本周总学习时间大约为 22 小时,其中 Hive 理论和命令学习约 7 小时,MapReduce 修改与测试约 4 小时,HiveSQL 编写与数据分析约 7 小时,解决环境和数据格式问题约 4 小时。排错时间比预想中多,尤其是 Hive 表字段和 HDFS 文件对应关系的问题。
Redis 方面,本周学习了 Set 和 ZSet,并尝试理解它们适合什么场景。Set 可以做去重、共同关注等功能,ZSet 可以根据 score 排序,因此经常用于排行榜。结合热词项目,我想到以后可以尝试使用 ZSet 保存热词及其热度分值,这样可以比较方便地获得热门词排行榜。
后端学习方面,本周开始复习 MySQL 索引,重点了解 B+ 树、聚簇索引、非聚簇索引、最左前缀原则等内容。以前只知道“加索引能提高查询速度”,现在开始关注索引为什么有效以及什么情况下索引可能失效。
下周准备学习 Sqoop,把 Hive 中统计得到的数据导出到 MySQL。同时开始设计 JavaWeb 数据展示部分的数据库表结构和后端接口,为之后使用 ECharts 展示分析结果做准备。

浙公网安备 33010602011771号