2016年大数据Spark“蘑菇云”行动代码学习之AdClickedStreamingStats模块分析数据库
系统背景:用户使用终端设备(IPAD、手机、浏览器)等登陆系统,系统采用js脚本发送用户信息和广告点击信息到后台日志,进入flume监控,经过kafka消息中间件传输数据,由Spark Streaming消费后将信息存储到后台。本模块主要就是实现将kafka发送的信息进行过滤,动态更新黑名单,生成有效的广告点击数据,造成广告点击趋势,将相关信息经过数据库链接池写入数据库MySql。浏览器
实现思路:因为kafka传输的广告点击数据中有一些是无效数据,须要根据必定的规则进行过滤(本方案采起简单的黑名单过滤的方式进行过滤,还能够采用机器学习的方式进行过滤——能够作一个大课题研究、大数据黄金岗位、下一步重点方向)。机器学习
在造成有效的广告点击数据后,按照天为单位,对广告点击次数进行累计,同时按照一天点击次数超过?次造成新的黑名单,持久化到后台。ide
对广告按照时间、省份、城市进行点击次数更新,而后插入或更新到MySql数据库。函数
由DataFrame的GroupBy,计算出天天每一个省份的Top5排名的广告。学习
采用窗口函数reduceByKeyAndWindow计算过去半个小时内广告点击的趋势。大数据
具体的流程以下:spa
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分钟),计算出广告点击趋势
写入广告点击趋势数据