系统背景:用户使用终端设备(IPAD、手机、浏览器)等登录系统,系统采用js脚本发送用户信息和广告点击信息到后台日志,进入flume监控,通过kafka消息中间件传输数据,由Spark Streaming消费后将信息存储到后台。本模块主要就是实现将kafka发送的信息进行过滤,动态更新黑名单,生成有效的广告点击数据,形成广告点击趋势,将相关信息通过数据库连接池写入数据库MySql。
实现思路:由于kafka传输的广告点击数据中有一些是无效数据,需要根据一定的规则进行过滤(本方案采取简单的黑名单过滤的方式进行过滤,还可以采用机器学习的方式进行过滤——可以做一个大课题研究、大数据黄金岗位、下一步重点方向)。
在形成有效的广告点击数据后,按照天为单位,对广告点击次数进行累计,同时按照一天点击次数超过?次形成新的黑名单,持久化到后台。
对广告按照时间、省份、城市进行点击次数更新,然后插入或更新到MySql数据库。
由DataFrame的GroupBy,计算出每天每个省份的Top5排名的广告。
采用窗口函数reduceByKeyAndWindow计算过去半个小时内广告点击的趋势。
具体的流程如下:
- AdClickedStreamingStats模块流程图
- 初始化Spark的运行环境,加载必要的JAR包
- 设置kafka的参数(broker地址列表、Topics)
- 从kafka获取数据(time+IP+UserID+AdID+province+city)
- 从数据库获取黑名单信息(UserID),生成黑名单RDD,格式为map(UserID,true)
- 将广告点击数据按(UserID,字串流)形成广告点击RDD
- 广告点击RDD和黑名单RDD左外连接,形成UserID,(字串流,true或者为空)的RDD
- 从新的RDD过滤出用户名不在黑名单上的广告点击RDD(UserID,字串流)
- 累加有效的广告点击次数RDD
("time_IP_userID_adID_province_city",long)
- 根据一天内的点击次数,来过滤出有效的广告点击数
(代码中一天内大于1次就过滤掉了?)
- 形成用户广告点击ListBuffer
- 插入或者更新用户广告点击数据
(当天已有记录则将广告点击数累加后更新,否则插入)
- 根据当天、用户、广告,获得总的点击数,
如果大于81次,形成新的黑名单
- 根据用户ID,进行黑名单去重操作并写入
- 按照日期+广告ID+省+市,形成新的广告点击RDD
- updateStateByKey,更新状态?
- 写入或更新广告点击数据(日期+广告+省+市+点击数)
- 按省进行Group by,然后查询出点击排名前5的广告
- 将当天+广告的TOP5数据库清空,然后插入新的数据
- 计算过去半小时广告点击的趋势
形成(广告ID+Time)的DStream
- 根据滑动窗口(半小时、5分钟),计算出广告点击趋势
- 写入广告点击趋势数据
时间: 2024-10-12 12:35:22