/bigdata

云计算课设

Primary LanguageJava

bigdata

项目背景

云计算课程:大数据的推荐以及热门gitee项目的数据统计

项目实现

环境搭建

Spark 3.x 、Maven 3.x 、 Jdk1.8、zookeeper3.6

整体架构

image

二度好友的推荐: image

二度推荐 目的:把好友的好友推荐给你 方法:通过GraphX建图,用户为点,存在关注、被关注关系就建立边,每个顶点的属性Attr为Map(dstId->distance),初始化为Map( 该顶点ID->0) 。然后进行两次迭代求解二度关系. 第一次迭代: 遍历每条边,将dst顶点属性dstAttr中的跳数字段标记为1 发给src顶点,src收到后合并到顶点属性srcAttr里. image 第二次迭代: 遍历边筛选出dstAttr里面跳数为1 的Key-Value 发给对应的src顶点,并将dstId加入桥梁顶点,最后聚合这些消息得到所有2 跳邻居。 image

image

实现细节

  1. 利用多线程爬取最新的gitee开源仓库信息,来模拟实时数据源,为了追求爬虫的性能,分别比较了python和java的爬虫代码的效果。 其中java版本考虑了线程池的大小,通过while循环分批爬取,防止任务数过多线程阻塞,拒绝服务。 将爬取的数据封装后备份在本地,同时上传到HDFS,为了模拟数据涌入,采用的数据一条一条上传。

image

  1. 定时将HDFS中的最新数据取出,把Watch、Fork、Star进行排序后,更新ranks文件,并传回HDFS,后期前端进行展 示。

image

image

  1. 每1分钟触发数据的计算,统计24小时中所有分类出现次数,一小时作为一个窗口进行统计。

image

  1. 二度好友推荐 image

image

考虑到用户的关注不会频繁更新,那么用户推荐的结果就不应该频繁更新占用资源,考虑到频繁的查询,所以存入Redis中,每12小时更新一次。 image

运行结果

  1. Rank榜单 image

  2. 分类统计 image

  3. Redis中推荐结果 image