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

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

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


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

 

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

 

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

 

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

 

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

 

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

 

    具体的流程如下:

  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. 写入广告点击趋势数据


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