2016年大数据Spark“蘑菇云”行动代码学习之AdClickedStreamingStats模块分析

2016年大数据Spark“蘑菇云”行动代码学习之AdClickedStreamingStats模块分析数据库


    系统背景:用户使用终端设备(IPAD、手机、浏览器)等登陆系统,系统采用js脚本发送用户信息和广告点击信息到后台日志,进入flume监控,经过kafka消息中间件传输数据,由Spark Streaming消费后将信息存储到后台。本模块主要就是实现将kafka发送的信息进行过滤,动态更新黑名单,生成有效的广告点击数据,造成广告点击趋势,将相关信息经过数据库链接池写入数据库MySql浏览器

 

    实现思路:因为kafka传输的广告点击数据中有一些是无效数据,须要根据必定的规则进行过滤(本方案采起简单的黑名单过滤的方式进行过滤,还能够采用机器学习的方式进行过滤——能够作一个大课题研究、大数据黄金岗位、下一步重点方向)。机器学习

 

在造成有效的广告点击数据后,按照天为单位,对广告点击次数进行累计,同时按照一天点击次数超过?次造成新的黑名单,持久化到后台。ide

 

对广告按照时间、省份、城市进行点击次数更新,而后插入或更新到MySql数据库。函数

 

DataFrameGroupBy,计算出天天每一个省份的Top5排名的广告。学习

 

采用窗口函数reduceByKeyAndWindow计算过去半个小时内广告点击的趋势。大数据

 

    具体的流程以下:spa

  1. AdClickedStreamingStats模块流程图日志


  2. 初始化Spark的运行环境,加载必要的JAR包中间件


  3. 设置kafka的参数(broker地址列表、Topics)


  4. 从kafka获取数据(time+IP+UserID+AdID+province+city)


  5. 从数据库获取黑名单信息(UserID),生成黑名单RDD,格式为map(UserID,true)


  6. 将广告点击数据按(UserID,字串流)造成广告点击RDD


  7. 广告点击RDD和黑名单RDD左外链接,造成UserID,(字串流,true或者为空)的RDD


  8. 重新的RDD过滤出用户名不在黑名单上的广告点击RDD(UserID,字串流)


  9. 累加有效的广告点击次数RDD

    ("time_IP_userID_adID_province_city",long)


  10. 根据一天内的点击次数,来过滤出有效的广告点击数

    (代码中一天内大于1次就过滤掉了?)


  11. 造成用户广告点击ListBuffer


  12. 插入或者更新用户广告点击数据

    (当天已有记录则将广告点击数累加后更新,不然插入)


  13. 根据当天、用户、广告,得到总的点击数,

    若是大于81次,造成新的黑名单


  14. 根据用户ID,进行黑名单去重操做并写入


  15. 按照日期+广告ID+省+市,造成新的广告点击RDD


  16. updateStateByKey,更新状态?


  17. 写入或更新广告点击数据(日期+广告+省+市+点击数)


  18. 按省进行Group by,而后查询出点击排名前5的广告


  19. 将当天+广告的TOP5数据库清空,而后插入新的数据


  20. 计算过去半小时广告点击的趋势

    造成(广告ID+Time)的DStream


  21. 根据滑动窗口(半小时、5分钟),计算出广告点击趋势


  22. 写入广告点击趋势数据