大数据实时项目

项目说明

日志收集模块

  1. 运行gmall0311-logger项目下的Gmall0311LoggerApplication,启动web服务收集上传过来的日志并存进kafka中
  2. 运行gmall0311-mock项目下的JsonMocker,模拟app应用上传日志到web端
  3. 查看kafka,可以看到数据已保存到kafka
    在这里插入图片描述

实时预警

根据日志数据中的系统报错异常,或者用户行为异常检测,产生预警日志并图形化展示

需求:同一设备,5分钟内三次及以上用不同账号登录并领取优惠劵,并且在登录到领劵过程中没有浏览商品。达到以上要求则产生一条预警日志。

      val sparkConf: SparkConf = new SparkConf().setAppName("alert_app").setMaster("local[*]")

      val ssc =new StreamingContext(sparkConf,Seconds(5))

      val inputDstream: InputDStream[ConsumerRecord[String, String]] = MyKafkaUtil.getKafkaStream(GmallConstants.KAFKA_TOPIC_EVENT,ssc)

    val eventInfoDstream: DStream[EventInfo] = inputDstream.map { record =>
      val eventInfo: EventInfo = JSON.parseObject(record.value(), classOf[EventInfo])
      eventInfo

    }

    eventInfoDstream.cache()
    //    1 ) 5分钟内 --> 窗口大小  window      窗口 (窗口大小,滑动步长 )   窗口大小 数据的统计范围    滑动步长 统计频率

    val eventWindowDStream: DStream[EventInfo] = eventInfoDstream.window(Seconds(300),Seconds(5))
    //    2) 同一设备   groupby  mid
    val groupbyMidDstream: DStream[(String, Iterable[EventInfo])] = eventWindowDStream.map(eventInfo=>(eventInfo.mid,eventInfo)).groupByKey()
    //    3 ) 用三次及以上不同账号登录并领取优惠劵     没有 浏览商品
    //    map   变换结构 (预警结构)   经过判断  把是否满足预警条件的mid 打上标签
    val checkedDstream: DStream[(Boolean, AlertInfo)] = groupbyMidDstream.map { case (mid, eventInfoItr) =>
      val couponUidSet = new util.HashSet[String]()
      val itemsSet = new util.HashSet[String]()
      val eventList = new util.ArrayList[String]()
      var hasClickItem = false
      breakable(
        for (eventInfo: EventInfo <- eventInfoItr) {
          eventList.add(eventInfo.evid) //收集mid的所有操作事件
          if (eventInfo.evid == "coupon") {
            //点击购物券时 涉及登录账号
            couponUidSet.add(eventInfo.uid)
            itemsSet.add(eventInfo.itemid) //收集领取购物券的商品
          }
          if (eventInfo.evid == "clickItem") { //点击商品
            hasClickItem = true
            break() //如果有点击 直接退出
          }
        }
      )

      //判断 符合预警的条件    1)  点击购物券时 涉及登录账号 >=3   2) events not contain  clickItem

      (couponUidSet.size >= 3 && !hasClickItem, AlertInfo(mid, couponUidSet, itemsSet, eventList, System.currentTimeMillis())) //(是否符合条件 ,日志信息)
    }

      val alterDstream: DStream[AlertInfo] = checkedDstream.filter(_._1).map(_._2)


    // 保存到ES中
......

采集架构图
在这里插入图片描述
spark streaming实时统计日志中的信息并输出到es中,最终由kibana展示

实时计算

T+1模式

在这里插入图片描述

  1. 利用sqoop从业务数据库中批量抽取数据
  2. 利用数仓作业,在dws层组织宽表(用户购买行为)
  3. 开发spark的批处理任务,把dws层的宽表导入es中
  4. 从es中读取数据并显示到可视化界面

优点是能利用离线处理好的dws层宽表,直接导出一份到es进行快速交互的分析,但时效性等同于离线数据

在这里插入图片描述

T+0模式

在这里插入图片描述

  1. 利用canal抓取对应数据表的实时新增变化数据,推送到kafka
  2. 在spark-streaming中进行转换、过滤,关联组合成宽表的结构
  3. 保存到es中,读取es数据并展示到可视化界面中

在这里插入图片描述

此时会产生双流join
在这里插入图片描述
双流join即订单的数据来了,但订单项的数据还没过来,或者订单项数据过来了,但订单表的数据没过来。两者之间无法直接关联

双流join的解决方案:如果另一方数据没有过来,则缓存这一方的数据,查询的时候如果stream里面没有相应的数据,就继续查询缓存里面是否有匹配的数据
在这里插入图片描述

canal:分布式数据同步中间件
canal是基于数据库增量日志解析,提供增量数据订阅和消费

场景1:更新缓存在这里插入图片描述
场景2:抓取业务数据新增变化表,用于制作拉链表
场景3:抓取业务数据新增变化数据,用于制作实时统计

phoniex是hbase的开源sql皮肤,可使用jdbc api开代替hbase客户端api来创建表、插入数据和查询hbase
本项目中sparkstreaming从kafka中拉取数据保存到hbase中都使用了phoniex,便于后面直接使用sql语句来统计查询

代码地址

已标记关键词 清除标记
项目一Spark离线处理 本项目来源于企业级电商网站的大数据统计分析平台,该平台以 Spark 框架为核心,对电商网站的日志进行离线和实时分析。  该大数据分析平台对电商网站的各种用户行为(访问行为、购物行为、广告点击行为等)进行分析,根据平台统计出来的数据,辅助公司中的 PM(产品经理)、数据分析师以及管理人员分析现有产品的情况,并根据用户行为分析结果持续改进产品的设计,以及调整公司的战略和业务。最终达到用大数据技术来帮助提升公司的业绩、营业额以及市场占有率的目标。  本项目使用了 Spark 技术生态栈中最常用的三个技术框架,Spark Core、Spark SQL 和 Spark Streaming,进行离线计算和实时计算业务模块的开发。实现了包括用户访问 session 分析、页面单跳转化率统计、热门商品离线统计、广告流量实时统计 4 个业务模块。通过合理的将实际业务模块进行技术整合与改造,该项目几乎完全涵盖了 Spark Core、Spark SQL 和 Spark Streaming 这三个技术框架中大部分的功能点、知识点,学员对于 Spark 技术框架的理解将会在本项目中得到很大的提高。  项目二Spark实时处理 项目简介对于实时性要求高的应用,如用户即时详单查询,业务量监控等,需要应用实时处理架构项目场景对于实时要求高的应用、有对数据进行实时展示和查询需求时项目技术分别使用canal和kafka搭建各自针对业务数据库和用户行为数据实时数据采集系统,使用SparkStreaming搭建高吞吐的数据实时处理模块,选用ES作为最终的实时数据处理结果的存储位置,并从中获取数据进行展示,进一步降低响应时间。 
相关推荐
本教程为授权出品 一、课程简介 数据仓库(Data Warehouse,可简写为DW或DWH),是面向分析的集成化数据环境,为企业决策制定过程,提供系统数据支持的战略集合,是国内外各大公司正在重点投入的战略级技术领域。 二、课程内容 《大数据电商数仓项目实战》视频教程,从项目架构的搭建,到数据采集模块的设计、数仓架构的设计、实战需求实现、即席查询的实现,我们针对国内目前广泛使用的Apache原生框架和CDH版本框架进行了分别介绍,Apache原生框架介绍中涉及到的技术框架包括Flume、Kafka、Sqoop、MySql、HDFS、Hive、Tez、Spark、Presto、Druid等,CDH版本框架讲解包括CM的安装部署、Hadoop、Zookeeper、Hive、Flume、Kafka、Oozie、Impala、HUE、Kudu、Spark的安装配置,透彻了解不同版本框架的区别联系,将大数据全生态系统前沿技术一网打尽。在过程中对大数据生态体系进行了系统的讲解,对实际企业数仓项目中可能涉及到的技术点都进行了深入的讲解和探讨。同时穿插了大量数仓基础理论知识,让你在掌握实战经验的同时能够打下坚实的理论基础。 三、课程目标 本课程以国内电商巨头实际业务应用场景为依托,对电商数仓的常见实战指标以及难点实战指标进行了详尽讲解,具体指标包括:每日、周、月活跃设备明细,留存用户比例,沉默用户、回流用户、流失用户统计,最近连续3周活跃用户统计,最近7天内连续3天活跃用户统计,GMV成交总额分析,转化率及漏斗分析,品牌复购率分析、订单表拉链表的设计等,让学生拥有更直观全面的实战经验。通过对本课程的学习,对数仓项目可以建立起清晰明确的概念,系统全面的掌握各项数仓项目技术,轻松应对各种数仓难题。 四、课程亮点 本课程结合国内多家企业实际项目经验,特别加入了项目架构模块,从集群规模的确定到框架版本选型以及服务器选型,手把手教你从零开始搭建大数据集群。并且总结大量项目实战中会遇到的问题,针对各个技术框架,均有调优实战经验,具体包括:常用Linux运维命令、Hadoop集群调优、Flume组件选型及性能优化、Kafka集群规模确认及关键参数调优。通过这部分学习,助学生迅速成长,获取前沿技术经验,从容解决实战问题。
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:C马雯娟 返回首页